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

Reply via email to