diff options
author | Nick Clifton <nickc@redhat.com> | 2016-12-05 16:00:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-12-05 16:00:43 +0000 |
commit | 406bd128dba2a59d0736839fc87a59bce319076c (patch) | |
tree | 8dd5ae1af0a3fd81b597df6c5c44d45b5e417952 /ld | |
parent | 9b5481c63ab5e1e66e8f23681741039754eabcce (diff) | |
download | gdb-406bd128dba2a59d0736839fc87a59bce319076c.zip gdb-406bd128dba2a59d0736839fc87a59bce319076c.tar.gz gdb-406bd128dba2a59d0736839fc87a59bce319076c.tar.bz2 |
Fix seg-fault in linker when passed a bogus input script.
PR ld/20906
* ldlex.l: Check for bogus strings in linker scripts.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/ldlex.l | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 3529834..19e94e9 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2016-12-05 Nick Clifton <nickc@redhat.com> + + PR ld/20906 + * ldlex.l: Check for bogus strings in linker scripts. + 2016-12-05 Alyssa Milburn <amilburn@zall.org> * testsuite/ld-sparc/wdispcall.s: New file. @@ -415,9 +415,15 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)* <EXPRESSION,BOTH,SCRIPT,VERS_NODE,INPUTLIST>"\""[^\"]*"\"" { /* No matter the state, quotes - give what's inside */ + give what's inside. */ + bfd_size_type len; yylval.name = xstrdup (yytext + 1); - yylval.name[yyleng - 2] = 0; + /* PR ld/20906. A corrupt input file + can contain bogus strings. */ + len = strlen (yylval.name); + if (len > yyleng - 2) + len = yyleng - 2; + yylval.name[len] = 0; return NAME; } <BOTH,SCRIPT,EXPRESSION>"\n" { lineno++;} |