dlltool: sprintf sanitizer null destination pointer
authorAlan Modra <amodra@gmail.com>
Wed, 2 Aug 2023 22:45:12 +0000 (08:15 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 3 Aug 2023 11:49:54 +0000 (21:19 +0930)
* dlltool.c (gen_lib_file): Avoid bogus sanitizer error.

binutils/dlltool.c

index 142d43a..efa54f1 100644 (file)
@@ -3089,20 +3089,22 @@ gen_lib_file (int delay)
   if (dontdeltemps < 2)
     {
       char *name;
+      size_t stub_len = strlen (TMP_STUB);
 
-      name = xmalloc (strlen (TMP_STUB) + 10);
+      name = xmalloc (stub_len + 10);
+      memcpy (name, TMP_STUB, stub_len);
       for (i = 0; (exp = d_exports_lexically[i]); i++)
        {
          /* Don't delete non-existent stubs for PRIVATE entries.  */
           if (exp->private)
            continue;
-         sprintf (name, "%s%05d.o", TMP_STUB, i);
+         sprintf (name + stub_len, "%05d.o", i);
          if (unlink (name) < 0)
            /* xgettext:c-format */
            non_fatal (_("cannot delete %s: %s"), name, strerror (errno));
          if (ext_prefix_alias)
            {
-             sprintf (name, "%s%05d.o", TMP_STUB, i + PREFIX_ALIAS_BASE);
+             sprintf (name + stub_len, "%05d.o", i + PREFIX_ALIAS_BASE);
              if (unlink (name) < 0)
                /* xgettext:c-format */
                non_fatal (_("cannot delete %s: %s"), name, strerror (errno));