Bug 18687 - GNU as segfaults when file ended by '.endr' or '.endm' directive with spaces at end of line
Summary: GNU as segfaults when file ended by '.endr' or '.endm' directive with spaces ...
Status: RESOLVED FIXED
Alias: None
Product: binutils
Classification: Unclassified
Component: gas (show other bugs)
Version: 2.26
: P2 normal
Target Milestone: ---
Assignee: Alan Modra
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-07-16 18:31 UTC by matszpk
Modified: 2015-07-22 12:59 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
Sample source code for that GNU as segfaults. (46 bytes, text/x-asm)
2015-07-16 18:31 UTC, matszpk
Details

Note You need to log in before you can comment on or make changes to this bug.
Description matszpk 2015-07-16 18:31:25 UTC
Created attachment 8444 [details]
Sample source code for that GNU as segfaults.

For following code the GNU as segfaults:

        .macro Xv
        .string "\Xv"
        .endm      << end of line

this code have only three lines, where last line is not ended by newline.

GNU as prints messages:
irptest.s: Assembler messages:
irptest.s:3: Warning: partial line at end of file ignored
irptest.s:1: Error: unexpected end of file in macro `xv' definition

and segfaults.

This same problem has been encountered for that code:

        .irp Xv, aaaa
        .string "\Xv"
        .endr   << end of line

Likewise, that code have line that is not ended by newline.
Comment 1 matszpk 2015-07-16 20:20:59 UTC
I forgot about one:
segfault encountered when last line is not terminated by newline and it have spaces at end. An attachment contains that last line.
Comment 2 cvs-commit@gcc.gnu.org 2015-07-22 12:41:31 UTC
The master branch has been updated by Alan Modra <amodra@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=511b1657d2b251e529a7a0634325bb7d8f3af80d

commit 511b1657d2b251e529a7a0634325bb7d8f3af80d
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Jul 22 21:58:50 2015 +0930

    gas line buffer handling
    
    This fixes a segfault when macro definitions end on the last line of a
    file, and that line isn't properly terminated with a newline.  gas
    used to throw away the last line in cases like this, whereas in other
    cases gas added the missing newline.  So I've also made gas
    consistently provide a missing newline.
    
    	PR gas/18687
    	* input-scrub.c (input_scrub_next_buffer): Rearrange and simplify
    	loop.  Don't drop lines at end of file lacking a newline, add a
    	newline instead.  Ensure partial_size is zero whenever
    	partial_where is NULL.  Adjust buffer size for extra char.
    	(input_scrub_push, input_scrub_begin): Adjust buffer size here too.
Comment 3 Alan Modra 2015-07-22 12:59:15 UTC
Fixed