From 137f6bc0dabe209c1617fb396eb590e7b7ee8faa Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 3 Aug 2023 08:18:13 +0930 Subject: [PATCH] resrc: sprintf sanitizer null destination pointer * resrc.c (read_rc_file): Use stpcpy rather than sprintf followed by strlen. Tidy. --- binutils/resrc.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/binutils/resrc.c b/binutils/resrc.c index 3ea9813d8bd..0d7a6e1cdbc 100644 --- a/binutils/resrc.c +++ b/binutils/resrc.c @@ -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) -- 2.30.2