Skip to content

Commit dc94773

Browse files
committed
[ELF] Don't cause assertion failure if --dynamic-list or --version-script takes an empty file
Fixes PR46184 Report line 1 of the last memory buffer. (cherry picked from commit ac6abc9)
1 parent 4d0626a commit dc94773

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

lld/ELF/ScriptLexer.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ StringRef ScriptLexer::getLine() {
5252

5353
// Returns 1-based line number of the current token.
5454
size_t ScriptLexer::getLineNumber() {
55+
if (pos == 0)
56+
return 1;
5557
StringRef s = getCurrentMB().getBuffer();
5658
StringRef tok = tokens[pos - 1];
5759
return s.substr(0, tok.data() - s.data()).count('\n') + 1;
@@ -292,7 +294,9 @@ static bool encloses(StringRef s, StringRef t) {
292294

293295
MemoryBufferRef ScriptLexer::getCurrentMB() {
294296
// Find input buffer containing the current token.
295-
assert(!mbs.empty() && pos > 0);
297+
assert(!mbs.empty());
298+
if (pos == 0)
299+
return mbs.back();
296300
for (MemoryBufferRef mb : mbs)
297301
if (encloses(mb.getBuffer(), tokens[pos - 1]))
298302
return mb;

lld/test/ELF/invalid-dynamic-list.test

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99

1010
# RUN: mkdir -p %t.dir
1111

12+
# RUN: echo > %tempty.list
13+
# RUN: not ld.lld --dynamic-list %tempty.list 2>&1 | FileCheck --check-prefix=EMPTY %s
14+
# EMPTY: error: {{.*}}.list:1: unexpected EOF
15+
1216
# RUN: echo foobar > %t1
1317
# RUN: not ld.lld --dynamic-list %t1 2>&1 | FileCheck -check-prefix=ERR1 %s
1418
# ERR1: {{.*}}:1: { expected, but got foobar

lld/test/ELF/version-script-err.s

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,8 @@
88
// RUN: not ld.lld --version-script %terr1.script -shared %t.o -o %t.so 2>&1 | \
99
// RUN: FileCheck -check-prefix=ERR1 %s
1010
// ERR1: {{.*}}:1: unclosed quote
11+
12+
// RUN: echo > %tempty.ver
13+
// RUN: not ld.lld --version-script %tempty.ver 2>&1 | \
14+
// RUN: FileCheck --check-prefix=ERR2 %s
15+
// ERR2: error: {{.*}}.ver:1: unexpected EOF

0 commit comments

Comments
 (0)