]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: terminate buffer SB in do_repeat()
authorJan Beulich <jbeulich@suse.com>
Fri, 21 Jun 2024 06:32:53 +0000 (08:32 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 21 Jun 2024 06:32:53 +0000 (08:32 +0200)
PR gas/31903

While elsewhere having realized that "one" doesn't point to a nul-
terminated string, it somehow didn't occur to me that the pre-existing
strstr() could have been wrong, and hence I blindly added a new use of
the function. Add the (already prior to 1e3c814459d8 ["gas: extend \+
support to .rept"]) missing call to sb_terminate(), leveraging that to
simplify the other two places where the lack of nul termination was
previously worked around.

gas/read.c

index 40a91f482db9f808ea3218fe67cd1a5bc3ec82c3..ce45877728807f7c370d07ef84aa80bc7bec59af 100644 (file)
@@ -3103,6 +3103,8 @@ do_repeat (size_t count, const char *start, const char *end,
       return;
     }
 
+  sb_terminate (&one);
+
   if (expander != NULL && !*expander && strstr (one.ptr, "\\+") != NULL)
     {
       /* The 3 here and below are arbitrary, added in an attempt to limit
@@ -3116,8 +3118,7 @@ do_repeat (size_t count, const char *start, const char *end,
 
          sb_build (&processed, one.len + 3);
 
-         for (ptr = one.ptr;
-              (bs = memchr (ptr, '\\', one.ptr + one.len - ptr)) != NULL; )
+         for (ptr = one.ptr; (bs = strchr (ptr, '\\')) != NULL; )
            {
              sb_add_buffer (&processed, ptr, bs - ptr);
              switch (bs[1])
@@ -3148,7 +3149,7 @@ do_repeat (size_t count, const char *start, const char *end,
                }
            }
 
-         sb_add_buffer (&processed, ptr, one.ptr + one.len - ptr);
+         sb_add_string (&processed, ptr);
 
          sb_add_sb (&many, &processed);
          sb_kill (&processed);