diff options
author | Jan Beulich <jbeulich@suse.com> | 2024-06-21 08:32:53 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2024-06-21 08:32:53 +0200 |
commit | 4ad2348edbf43a3d1a694fd5375680cb55e6b1c1 (patch) | |
tree | f8bff11714d4543371e83faa7092ebd1a11e15c7 /gas/read.c | |
parent | da16a23481b3b89a61b7c6d04a661f9327c9fd26 (diff) | |
download | fsf-binutils-gdb-4ad2348edbf43a3d1a694fd5375680cb55e6b1c1.zip fsf-binutils-gdb-4ad2348edbf43a3d1a694fd5375680cb55e6b1c1.tar.gz fsf-binutils-gdb-4ad2348edbf43a3d1a694fd5375680cb55e6b1c1.tar.bz2 |
gas: terminate buffer SB in do_repeat()
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.
Diffstat (limited to 'gas/read.c')
-rw-r--r-- | gas/read.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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); |