diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 10 | ||||
-rw-r--r-- | gas/read.c | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/all/gas.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/all/pr27381.d | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/all/pr27381.err | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/all/pr27381.s | 1 |
6 files changed, 27 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 031bb54..2c7e533 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2021-02-09 Nick Clifton <nickc@redhat.com> + + PR 27381 + * read.c (s_incbin): Check that the file to be included is a + regular, non-directory file. + * testsuite/gas/all/pr27381.s: New test source file. + * testsuite/gas/all/pr27381.d: New test control file. + * testsuite/gas/all/pr27381.err: Expected error output for the new test. + * testsuite/gas/all/gas.exp: Run the new test. + 2021-02-09 Alan Modra <amodra@gmail.com> * Makefile.am (TARG_ENV_HFILES): Remove config/te-symbian.h. @@ -5909,7 +5909,16 @@ s_incbin (int x ATTRIBUTE_UNUSED) if (binfile) { long file_len; + struct stat filestat; + if (fstat (fileno (binfile), &filestat) != 0 + || ! S_ISREG (filestat.st_mode) + || S_ISDIR (filestat.st_mode)) + { + as_bad (_("unable to include `%s'"), path); + goto done; + } + register_dependency (path); /* Compute the length of the file. */ diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp index af36b09..6a8491f 100644 --- a/gas/testsuite/gas/all/gas.exp +++ b/gas/testsuite/gas/all/gas.exp @@ -470,3 +470,4 @@ gas_test "pr23938.s" "" "" ".xstabs" run_dump_test "nop" run_dump_test "asciz" run_dump_test "pr27384" +run_dump_test "pr27381" diff --git a/gas/testsuite/gas/all/pr27381.d b/gas/testsuite/gas/all/pr27381.d new file mode 100644 index 0000000..13bc4d0 --- /dev/null +++ b/gas/testsuite/gas/all/pr27381.d @@ -0,0 +1,4 @@ +#as: +#error_output: pr27381.err +# The TI targets do not support the .incbin directuve. +#notarget: tic*-*-* diff --git a/gas/testsuite/gas/all/pr27381.err b/gas/testsuite/gas/all/pr27381.err new file mode 100644 index 0000000..f414210 --- /dev/null +++ b/gas/testsuite/gas/all/pr27381.err @@ -0,0 +1,2 @@ +.*pr27381.s: Assembler messages: +.*pr27381.s:1: Error: unable to include `/etc/' diff --git a/gas/testsuite/gas/all/pr27381.s b/gas/testsuite/gas/all/pr27381.s new file mode 100644 index 0000000..b75523f --- /dev/null +++ b/gas/testsuite/gas/all/pr27381.s @@ -0,0 +1 @@ +.incbin "/etc/" |