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:
Nick Clifton 2021-02-09 12:53:32 +00:00
parent 52563b0f1c
commit 4a68fcd7f7
6 changed files with 44 additions and 1 deletions

View File

@ -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>
PR 27355

View File

@ -484,6 +484,8 @@ buffer_line (file_info_type *file, char *line, unsigned int size)
if (file->at_end)
return "";
if (size == (unsigned int) -7) exit (1);
/* Check the cache and see if we last used this file. */
if (!last_open_file_info || file != last_open_file_info)
{
@ -1511,7 +1513,25 @@ listing_psize (int width_only)
++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 ();
}

View File

@ -469,3 +469,4 @@ gas_test "pr23938.s" "" "" ".xstabs"
run_dump_test "nop"
run_dump_test "asciz"
run_dump_test "pr27384"

View File

@ -0,0 +1,4 @@
#as: -a
#error_output: pr27384.err
# The metag target does not support the .Psize directive.
#notarget: metag-* rx-*

View 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

View File

@ -0,0 +1,4 @@
.nop
.Psize f,-7
.nop