From: Robert Dubner <[email protected]>
Date: Fri, 10 Jul 2026 23:48:32 -0400
Subject: [PATCH] cobol: Use strncpy properly.
gcc/cobol/ChangeLog:
* copybook.h (class copybook_t): Mollify cppcheck.
* lexio.h (struct filespan_t): Likewise.
* symbols.h (symbol_typedef): Add declaration.
libgcobol/ChangeLog:
* charmaps.cc (helpful_iconv_open): Use strncpy() properly.
(char_from_figconst): Initialize return value.
gcc/testsuite/ChangeLog:
* cobol.dg/group2/BINARY_and_COMP-5.cob: Removed.
* cobol.dg/group2/BINARY_and_COMP-5.out: Removed.
* cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob:
Removed.
* cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out:
Removed.
---
gcc/cobol/copybook.h | 3 +-
gcc/cobol/lexio.h | 4 +-
gcc/cobol/symbols.h | 1 +
.../cobol.dg/group2/BINARY_and_COMP-5.cob | 158 ------------------
.../cobol.dg/group2/BINARY_and_COMP-5.out | 35 ----
.../Non-numeric_data_in_numeric_items__1_.cob | 27 ---
.../Non-numeric_data_in_numeric_items__1_.out | 2 -
libgcobol/charmaps.cc | 6 +-
8 files changed, 8 insertions(+), 228 deletions(-)
delete mode 100644 gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob
delete mode 100644 gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out
delete mode 100644
gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
delete mode 100644
gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
diff --git a/gcc/cobol/copybook.h b/gcc/cobol/copybook.h
index 84b0cc63ff9..93c87b70ea8 100644
--- a/gcc/cobol/copybook.h
+++ b/gcc/cobol/copybook.h
@@ -197,7 +197,8 @@ class copybook_t {
book.clear();
this->source(loc, name);
- for( auto dir : directories ) {
+ for( const auto &dir : directories ) {
+ // cppcheck-suppress useStlAlgorithm
if( (fd = book.open_file(dir, book.literally.source)) != -1 )
break;
}
return fd;
diff --git a/gcc/cobol/lexio.h b/gcc/cobol/lexio.h
index 222a831fe6d..b648997b35c 100644
--- a/gcc/cobol/lexio.h
+++ b/gcc/cobol/lexio.h
@@ -168,9 +168,9 @@ struct filespan_t : public bytespan_t {
if( nul != eol ) {
if( std::any_of( nul, eodata,
[]( char ch ) { return ch != '\0'; } ) ) {
- int icol = nul - cur;
+ int icol2 = nul - cur;
fprintf(stderr, "%s:%d:%d: error: NUL character detected in
input\n%*s\n",
- cobol_filename(), int(iline + 1), ++icol,
+ cobol_filename(), int(iline + 1), ++icol2,
int(eol - cur), cur);
parse_error_inc();
std::replace(nul, eol, '\0', SPACE);
diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h
index fe167c90df4..3744b3a7f61 100644
--- a/gcc/cobol/symbols.h
+++ b/gcc/cobol/symbols.h
@@ -2847,6 +2847,7 @@ cbl_namelist_t teed_up_names();
size_t end_of_group( size_t igroup );
+symbol_elem_t * symbol_typedef( size_t program, std::list<const char *>
names );
symbol_elem_t * symbol_typedef( size_t program, const char name[] );
symbol_elem_t * symbol_field( size_t program, size_t parent, const char
name[] );
cbl_label_t * symbol_label( size_t program, cbl_label_type_t type,
diff --git a/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob
b/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob
deleted file mode 100644
index c1e488a6227..00000000000
--- a/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.cob
+++ /dev/null
@@ -1,158 +0,0 @@
- *> { dg-do run }
- *> { dg-output-file "group2/BINARY_and_COMP-5.out" }
- identification division.
- program-id. prog.
- procedure division.
- call "prog1"
- call "prog2"
- goback.
- end program prog.
-
- identification division.
- program-id. prog1.
- data division.
- working-storage section.
- 01.
- 02 var-binary binary pic 9v9(10) .
- 02 var-binaryp redefines var-binary pointer.
- 02 var-comp comp pic 9v9(10) .
- 02 var-compp redefines var-comp pointer.
- 02 var-compu computational pic 9v9(10) .
- 02 var-compup redefines var-compu pointer.
- 02 var-comp4 comp-4 pic 9v9(10) .
- 02 var-comp4p redefines var-comp4 pointer.
- 02 var-compu4 computational-4 pic 9v9(10) .
- 02 var-compu4p redefines var-compu4 pointer.
-
- 02 var-comp5 comp-5 pic 9v9(10) .
- 02 var-comp5p redefines var-comp5 pointer.
- 02 var-compu5 computational-5 pic 9v9(10) .
- 02 var-compu5p redefines var-compu5 pointer.
-
- 02 var-sbinary binary pic s9v9(10) .
- 02 var-sbinaryp redefines var-sbinary pointer.
- 02 var-scomp comp pic s9v9(10) .
- 02 var-scompp redefines var-scomp pointer.
- 02 var-scompu computational pic s9v9(10) .
- 02 var-scompup redefines var-scompu pointer.
- 02 var-scomp4 comp-4 pic s9v9(10) .
- 02 var-scomp4p redefines var-scomp4 pointer.
- 02 var-scompu4 computational-4 pic s9v9(10) .
- 02 var-scompu4p redefines var-scompu4 pointer.
-
- 02 var-scomp5 comp-5 pic s9v9(10) .
- 02 var-scomp5p redefines var-scomp5 pointer.
- 02 var-scompu5 computational-5 pic s9v9(10) .
- 02 var-scompu5p redefines var-scompu5 pointer.
- procedure division.
- move 0.0001193046 to var-binary var-comp var-compu
- var-comp4 var-compu4 var-comp5
- var-compu5
- display " " var-binary " " var-comp " " var-compu " "
- var-comp4 " " var-compu4 " "
- var-comp5 " " var-compu5
- move 0.0001193046 to var-sbinary var-scomp var-scompu
- var-scomp4 var-scompu4 var-scomp5
- var-scompu5
- display var-sbinary " " var-scomp " " var-scompu " "
- var-scomp4 " " var-scompu4 " "
- var-scomp5 " " var-scompu5
- move -0.0001193046 to var-sbinary var-scomp var-scompu
- var-scomp4 var-scompu4 var-scomp5
- var-scompu5
- display var-sbinary " " var-scomp " " var-scompu " "
- var-scomp4 " " var-scompu4 " "
- var-scomp5 " " var-scompu5
- display var-binaryp
- display var-compp
- display var-compup
- display var-comp4p
- display var-compu4p
- display var-comp5p
- display var-compu5p
-
- display var-sbinaryp
- display var-scompp
- display var-scompup
- display var-scomp4p
- display var-scompu4p
- display var-scomp5p
- display var-scompu5p
-
- goback.
- end program prog1.
-
- identification division.
- program-id. prog2.
- data division.
- working-storage section.
- 01.
- 02 var-binary pic 9v9(10) binary .
- 02 var-binaryp redefines var-binary pointer.
- 02 var-comp pic 9v9(10) comp .
- 02 var-compp redefines var-comp pointer.
- 02 var-compu pic 9v9(10) computational .
- 02 var-compup redefines var-compu pointer.
- 02 var-comp4 pic 9v9(10) comp-4 .
- 02 var-comp4p redefines var-comp4 pointer.
- 02 var-compu4 pic 9v9(10) computational-4 .
- 02 var-compu4p redefines var-compu4 pointer.
-
- 02 var-comp5 pic 9v9(10) comp-5 .
- 02 var-comp5p redefines var-comp5 pointer.
- 02 var-compu5 pic 9v9(10) computational-5 .
- 02 var-compu5p redefines var-compu5 pointer.
-
- 02 var-sbinary pic s9v9(10) binary .
- 02 var-sbinaryp redefines var-sbinary pointer.
- 02 var-scomp pic s9v9(10) comp .
- 02 var-scompp redefines var-scomp pointer.
- 02 var-scompu pic s9v9(10) computational .
- 02 var-scompup redefines var-scompu pointer.
- 02 var-scomp4 pic s9v9(10) comp-4 .
- 02 var-scomp4p redefines var-scomp4 pointer.
- 02 var-scompu4 pic s9v9(10) computational-4 .
- 02 var-scompu4p redefines var-scompu4 pointer.
-
- 02 var-scomp5 pic s9v9(10) comp-5 .
- 02 var-scomp5p redefines var-scomp5 pointer.
- 02 var-scompu5 pic s9v9(10) computational-5 .
- 02 var-scompu5p redefines var-scompu5 pointer.
- procedure division.
- move 0.0001193046 to var-binary var-comp var-compu
- var-comp4 var-compu4 var-comp5
- var-compu5
- display " " var-binary " " var-comp " " var-compu " "
- var-comp4 " " var-compu4 " "
- var-comp5 " " var-compu5
- move 0.0001193046 to var-sbinary var-scomp var-scompu
- var-scomp4 var-scompu4 var-scomp5
- var-scompu5
- display var-sbinary " " var-scomp " " var-scompu " "
- var-scomp4 " " var-scompu4 " "
- var-scomp5 " " var-scompu5
- move -0.0001193046 to var-sbinary var-scomp var-scompu
- var-scomp4 var-scompu4 var-scomp5
- var-scompu5
- display var-sbinary " " var-scomp " " var-scompu " "
- var-scomp4 " " var-scompu4 " "
- var-scomp5 " " var-scompu5
- display var-binaryp
- display var-compp
- display var-compup
- display var-comp4p
- display var-compu4p
- display var-comp5p
- display var-compu5p
-
- display var-sbinaryp
- display var-scompp
- display var-scompup
- display var-scomp4p
- display var-scompu4p
- display var-scomp5p
- display var-scompu5p
-
- goback.
- end program prog2.
-
diff --git a/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out
b/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out
deleted file mode 100644
index 3fd09c41c30..00000000000
--- a/gcc/testsuite/cobol.dg/group2/BINARY_and_COMP-5.out
+++ /dev/null
@@ -1,35 +0,0 @@
- 0.0001193046 0.0001193046 0.0001193046 0.0001193046 0.0001193046
0.0001193046 0.0001193046
-+0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046
+0.0001193046 +0.0001193046
--0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046
-0.0001193046 -0.0001193046
-0x5634120000000000
-0x5634120000000000
-0x5634120000000000
-0x5634120000000000
-0x5634120000000000
-0x0000000000123456
-0x0000000000123456
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xffffffffffedcbaa
-0xffffffffffedcbaa
- 0.0001193046 0.0001193046 0.0001193046 0.0001193046 0.0001193046
0.0001193046 0.0001193046
-+0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046 +0.0001193046
+0.0001193046 +0.0001193046
--0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046 -0.0001193046
-0.0001193046 -0.0001193046
-0x5634120000000000
-0x5634120000000000
-0x5634120000000000
-0x5634120000000000
-0x5634120000000000
-0x0000000000123456
-0x0000000000123456
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xaacbedffffffffff
-0xffffffffffedcbaa
-0xffffffffffedcbaa
-
diff --git
a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
deleted file mode 100644
index 6b38f79f388..00000000000
---
a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
+++ /dev/null
@@ -1,27 +0,0 @@
- *> { dg-do run }
- *> { dg-output-file
"group2/Non-numeric_data_in_numeric_items__1_.out" }
-
- IDENTIFICATION DIVISION.
- PROGRAM-ID. prog.
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- 01 X.
- 03 X-NUM PIC 9(06) VALUE 123.
- 77 NUM PIC 9(06).
- PROCEDURE DIVISION.
- MOVE x"0000" TO X (2:2)
- IF X-NUM NUMERIC
- DISPLAY "low-value is numeric" UPON SYSERR
- END-DISPLAY
- END-IF
- MOVE x"01" TO X (3:1)
- IF X-NUM NUMERIC
- DISPLAY "SOH is numeric" UPON SYSERR
- END-DISPLAY
- END-IF
- MOVE X-NUM TO NUM
- DISPLAY "test over"
- END-DISPLAY
- *
- GOBACK.
-
diff --git
a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
deleted file mode 100644
index ac61d84c6f5..00000000000
---
a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
+++ /dev/null
@@ -1,2 +0,0 @@
-test over
-
diff --git a/libgcobol/charmaps.cc b/libgcobol/charmaps.cc
index 1c70afc0fc9..1fdb9997c09 100644
--- a/libgcobol/charmaps.cc
+++ b/libgcobol/charmaps.cc
@@ -1863,8 +1863,8 @@ helpful_iconv_open(const char *tocode, const char
*fromcode)
char ach_to[32];
char ach_from[32];
- strncpy(ach_to, tocode, sizeof(ach_to));
- strncpy(ach_from, fromcode, sizeof(ach_from));
+ strncpy(ach_to, tocode, sizeof(ach_to)-1);
+ strncpy(ach_from, fromcode, sizeof(ach_from)-1);
fixcode(ach_to, sizeof(ach_to));
fixcode(ach_from, sizeof(ach_from));
@@ -1877,7 +1877,7 @@ helpful_iconv_open(const char *tocode, const char
*fromcode)
char
char_from_figconst(cbl_figconst_t figconst)
{
- char retval;
+ char retval = 0;
switch(figconst)
{
case normal_value_e :
--
2.34.1