resrc: sprintf sanitizer null destination pointer
authorAlan Modra <amodra@gmail.com>
Wed, 2 Aug 2023 22:48:13 +0000 (08:18 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 3 Aug 2023 11:49:54 +0000 (21:19 +0930)
* resrc.c (read_rc_file): Use stpcpy rather than sprintf
followed by strlen.  Tidy.

binutils/resrc.c

index 3ea9813d8bd08d99e98ea72040fb75e456ee069f..0d7a6e1cdbc99562aa96d3448bf20ff60886250c 100644 (file)
@@ -441,29 +441,23 @@ read_rc_file (const char *filename, const char *preprocessor,
     {
       char *edit, *dir;
 
-      if (filename[0] == '/'
-         || filename[0] == '\\'
-         || filename[1] == ':')
-        /* Absolute path.  */
-       edit = dir = xstrdup (filename);
-      else
+      edit = dir = xmalloc (strlen (filename) + 3);
+      if (filename[0] != '/'
+         && filename[0] != '\\'
+         && filename[1] != ':')
        {
          /* Relative path.  */
-         edit = dir = xmalloc (strlen (filename) + 3);
-         sprintf (dir, "./%s", filename);
+         *edit++ = '.';
+         *edit++ = '/';
        }
+      edit = stpcpy (edit, filename);
 
       /* Walk dir backwards stopping at the first directory separator.  */
-      edit += strlen (dir);
       while (edit > dir && (edit[-1] != '\\' && edit[-1] != '/'))
-       {
-         --edit;
-         edit[0] = 0;
-       }
+       --edit;
 
       /* Cut off trailing slash.  */
-      --edit;
-      edit[0] = 0;
+      *--edit = 0;
 
       /* Convert all back slashes to forward slashes.  */
       while ((edit = strchr (dir, '\\')) != NULL)