[gcc r17-2327] cobol: Use strncpy properly.

Robert Dubner via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:592daa395c512e83eb5018b6877c3888d74ff937

commit r17-2327-g592daa395c512e83eb5018b6877c3888d74ff937
Author: Robert Dubner <[email protected]>
Date:   Fri Jul 10 23:48:32 2026 -0400

    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.

Diff:
---
 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(-)

diff --git a/gcc/cobol/copybook.h b/gcc/cobol/copybook.h
index 84b0cc63ff9b..93c87b70ea83 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 222a831fe6d4..b648997b35c4 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 fe167c90df4a..3744b3a7f616 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 c1e488a62279..000000000000
--- 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 3fd09c41c30d..000000000000
--- 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 6b38f79f3886..000000000000
--- 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 ac61d84c6f55..000000000000
--- 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 1c70afc0fc94..1fdb9997c097 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 :
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.