re PR c/81117 (Improve buffer overflow checking in strncpy)
authorMartin Sebor <msebor@redhat.com>
Fri, 10 Nov 2017 22:48:43 +0000 (22:48 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Fri, 10 Nov 2017 22:48:43 +0000 (15:48 -0700)
gcc/ChangeLog:

PR c/81117
* config/darwin-c.c (framework_construct_pathname): Replace strncpy
with memcpy.
(find_subframework_file): Same.

From-SVN: r254641

gcc/ChangeLog
gcc/config/darwin-c.c

index 4ff82568cc44e5ff9e53290af383a6d4666e802a..4e50a888103b0823c47fd70156f9c33816dcae56 100644 (file)
@@ -1,3 +1,10 @@
+2017-11-10  Martin Sebor  <msebor@redhat.com>
+
+       PR c/81117
+       * config/darwin-c.c (framework_construct_pathname): Replace strncpy
+       with memcpy.
+       (find_subframework_file): Same.
+
 2017-11-10  Jeff Law  <law@redhat.com>
 
        * vr-values.h (VR_INITIALIZER): Move #define here.
index 91f08a0dceea579ef6ecc27dba3a38c614b41363..bfb35b9ae6d54b2e0e8272bc14578ccf0fe602e4 100644 (file)
@@ -284,13 +284,13 @@ framework_construct_pathname (const char *fname, cpp_dir *dir)
 
   frname = XNEWVEC (char, strlen (fname) + dir->len + 2
                    + strlen(".framework/") + strlen("PrivateHeaders"));
-  strncpy (&frname[0], dir->name, dir->len);
+  memcpy (&frname[0], dir->name, dir->len);
   frname_len = dir->len;
   if (frname_len && frname[frname_len-1] != '/')
     frname[frname_len++] = '/';
-  strncpy (&frname[frname_len], fname, fname_len);
+  memcpy (&frname[frname_len], fname, fname_len);
   frname_len += fname_len;
-  strncpy (&frname[frname_len], ".framework/", strlen (".framework/"));
+  memcpy (&frname[frname_len], ".framework/", strlen (".framework/"));
   frname_len += strlen (".framework/");
 
   if (fast_dir == 0)
@@ -316,7 +316,7 @@ framework_construct_pathname (const char *fname, cpp_dir *dir)
   /* Append framework_header_dirs and header file name */
   for (i = 0; framework_header_dirs[i].dirName; i++)
     {
-      strncpy (&frname[frname_len],
+      memcpy (&frname[frname_len],
               framework_header_dirs[i].dirName,
               framework_header_dirs[i].dirNameLen);
       strcpy (&frname[frname_len + framework_header_dirs[i].dirNameLen],
@@ -378,23 +378,23 @@ find_subframework_file (const char *fname, const char *pname)
 
   sfrname_len = bufptr - pname;
 
-  strncpy (&sfrname[0], pname, sfrname_len);
+  memcpy (&sfrname[0], pname, sfrname_len);
 
-  strncpy (&sfrname[sfrname_len], "Frameworks/", strlen ("Frameworks/"));
+  memcpy (&sfrname[sfrname_len], "Frameworks/", strlen ("Frameworks/"));
   sfrname_len += strlen("Frameworks/");
 
-  strncpy (&sfrname[sfrname_len], fname, fname_len);
+  memcpy (&sfrname[sfrname_len], fname, fname_len);
   sfrname_len += fname_len;
 
-  strncpy (&sfrname[sfrname_len], ".framework/", strlen (".framework/"));
+  memcpy (&sfrname[sfrname_len], ".framework/", strlen (".framework/"));
   sfrname_len += strlen (".framework/");
 
   /* Append framework_header_dirs and header file name */
   for (i = 0; framework_header_dirs[i].dirName; i++)
     {
-      strncpy (&sfrname[sfrname_len],
-              framework_header_dirs[i].dirName,
-              framework_header_dirs[i].dirNameLen);
+      memcpy (&sfrname[sfrname_len],
+             framework_header_dirs[i].dirName,
+             framework_header_dirs[i].dirNameLen);
       strcpy (&sfrname[sfrname_len + framework_header_dirs[i].dirNameLen],
              &fname[fname_len]);