mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
Prevent a bad .Psize expression from triggering a memory access violation.
PR 27384 * listing.c (listing_psize): Check the result of the width expression before assigning it to paper_width. * testsuite/gas/all/pr27384.s: New test source file. * testsuite/gas/all/pr27384.d: New test control file. * testsuite/gas/all/pr27384.err: Expected errors from new test. * testsuite/gas/all/gas.exp: Run the new test.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
2021-02-09 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR 27384
|
||||||
|
* listing.c (listing_psize): Check the result of the width
|
||||||
|
expression before assigning it to paper_width.
|
||||||
|
* testsuite/gas/all/pr27384.s: New test source file.
|
||||||
|
* testsuite/gas/all/pr27384.d: New test control file.
|
||||||
|
* testsuite/gas/all/pr27384.err: Expected errors from new test.
|
||||||
|
* testsuite/gas/all/gas.exp: Run the new test.
|
||||||
|
|
||||||
2021-02-09 Nick Clifton <nickc@redhat.com>
|
2021-02-09 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR 27355
|
PR 27355
|
||||||
|
@ -484,6 +484,8 @@ buffer_line (file_info_type *file, char *line, unsigned int size)
|
|||||||
if (file->at_end)
|
if (file->at_end)
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
|
if (size == (unsigned int) -7) exit (1);
|
||||||
|
|
||||||
/* Check the cache and see if we last used this file. */
|
/* Check the cache and see if we last used this file. */
|
||||||
if (!last_open_file_info || file != last_open_file_info)
|
if (!last_open_file_info || file != last_open_file_info)
|
||||||
{
|
{
|
||||||
@ -1511,7 +1513,25 @@ listing_psize (int width_only)
|
|||||||
++input_line_pointer;
|
++input_line_pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
paper_width = get_absolute_expression ();
|
{
|
||||||
|
expressionS exp;
|
||||||
|
|
||||||
|
(void) expression_and_evaluate (& exp);
|
||||||
|
|
||||||
|
if (exp.X_op == O_constant)
|
||||||
|
{
|
||||||
|
offsetT new_width = exp.X_add_number;
|
||||||
|
|
||||||
|
if (new_width > 7)
|
||||||
|
paper_width = new_width;
|
||||||
|
else
|
||||||
|
as_bad (_("new paper width is too small"));
|
||||||
|
}
|
||||||
|
else if (exp.X_op != O_absent)
|
||||||
|
as_bad (_("bad or irreducible expression for paper width"));
|
||||||
|
else
|
||||||
|
as_bad (_("missing expression for paper width"));
|
||||||
|
}
|
||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
}
|
}
|
||||||
|
@ -469,3 +469,4 @@ gas_test "pr23938.s" "" "" ".xstabs"
|
|||||||
|
|
||||||
run_dump_test "nop"
|
run_dump_test "nop"
|
||||||
run_dump_test "asciz"
|
run_dump_test "asciz"
|
||||||
|
run_dump_test "pr27384"
|
||||||
|
4
gas/testsuite/gas/all/pr27384.d
Normal file
4
gas/testsuite/gas/all/pr27384.d
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#as: -a
|
||||||
|
#error_output: pr27384.err
|
||||||
|
# The metag target does not support the .Psize directive.
|
||||||
|
#notarget: metag-* rx-*
|
4
gas/testsuite/gas/all/pr27384.err
Normal file
4
gas/testsuite/gas/all/pr27384.err
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.*pr27384.s: Assembler messages:
|
||||||
|
.*pr27384.s:2: Error: bad or irreducible absolute expression
|
||||||
|
.*pr27384.s:2: Error: new paper width is too small
|
||||||
|
#pass
|
4
gas/testsuite/gas/all/pr27384.s
Normal file
4
gas/testsuite/gas/all/pr27384.s
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.nop
|
||||||
|
.Psize f,-7
|
||||||
|
.nop
|
||||||
|
|
Reference in New Issue
Block a user