aboutsummaryrefslogtreecommitdiff
path: root/gas/read.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-03-17 11:54:40 +1030
committerAlan Modra <amodra@gmail.com>2022-03-17 21:32:44 +1030
commit0d1064face9956be43774b81e9cdad5daea28c92 (patch)
treeca43519e91660955464296ab9b48145c2613237b /gas/read.c
parentdf573325cb23198af194a492842f957f8b6945b4 (diff)
downloadgdb-0d1064face9956be43774b81e9cdad5daea28c92.zip
gdb-0d1064face9956be43774b81e9cdad5daea28c92.tar.gz
gdb-0d1064face9956be43774b81e9cdad5daea28c92.tar.bz2
asan: buffer overflows after calling ignore_rest_of_line
operand() is not a place that should be calling ignore_rest_of_line. ignore_rest_of_line shouldn't increment input_line_pointer if already at buffer limit. * expr.c (operand): Don't call ignore_rest_of_line. * read.c (s_mri_common): Likewise. (ignore_rest_of_line): Don't increment input_line_pointer if already at buffer_limit.
Diffstat (limited to 'gas/read.c')
-rw-r--r--gas/read.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/gas/read.c b/gas/read.c
index fe0aff2..e9a300f 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -1940,7 +1940,6 @@ s_mri_common (int small ATTRIBUTE_UNUSED)
if (S_IS_DEFINED (sym) && !S_IS_COMMON (sym))
{
as_bad (_("symbol `%s' is already defined"), S_GET_NAME (sym));
- ignore_rest_of_line ();
mri_comment_end (stop, stopc);
return;
}
@@ -3980,15 +3979,10 @@ demand_empty_rest_of_line (void)
void
ignore_rest_of_line (void)
{
- while (input_line_pointer < buffer_limit
- && !is_end_of_line[(unsigned char) *input_line_pointer])
- input_line_pointer++;
-
- input_line_pointer++;
-
+ while (input_line_pointer < buffer_limit)
+ if (is_end_of_line[(unsigned char) *input_line_pointer++])
+ break;
/* Return pointing just after end-of-line. */
- if (input_line_pointer <= buffer_limit)
- know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
}
/* Sets frag for given symbol to zero_address_frag, except when the