[Issue 18208] ddemangle RangeError at src/core/demangle.d(230)

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Jan 28 00:45:01 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=18208

Timothee Cour <timothee.cour2 at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |timothee.cour2 at gmail.com

--- Comment #1 from Timothee Cour <timothee.cour2 at gmail.com> ---
just ran into that why doing:
git clone https://github.com/dlang-community/D-Scanner && cd D-Scanner && dub
build && nm bin/dscanner|ddemangle

After reduction here's a symbol that triggers (see below).

In addition to fixing this bug, we should make demangle inner loop protected
via a try/catch so that demangle keeps going till end of stdin, and then
rethrow error at the end (at least as an option ddemangle
--keep-going-on-error)


```
echo
_D3std4conv__T10emplaceRefTSQBa12experimental5lexer__T14TokenStructureThVAyaa305_0a20202020737472696e6720636f6d6d656e743b0a20202020737472696e6720747261696c696e67436f6d6d656e743b0a0a20202020696e74206f70436d702873697a655f7420692920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202069662028696e646578203c2069292072657475726e202d313b0a202020202020202069662028696e646578203e2069292072657475726e20313b0a202020202020202072657475726e20303b0a202020207d0a0a20202020696e74206f70436d702872656620636f6e737420747970656f66287468697329206f746865722920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202072657475726e206f70436d70286f746865722e696e646578293b0a202020207d0aZQYoTQZtTQZxZQBAoFKQBAhKQBAmZ1S11__xopEqualsFKxSQBCjQBCj__TQBCiTQBCaTQBCfTQBCkZQBDcFKQBCvKQBDaZQCoKxQCbZb
| ddemangle
core.exception.RangeError at src/core/demangle.d(230): Range violation
----------------
4   ddemangle                           0x0000000104b1fece _d_arrayboundsp +
110
5   ddemangle                           0x0000000104b18ad7 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.append(const(char)[]) +
483
6   ddemangle                           0x0000000104b18c0d pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.put(const(char)[]) +
129
7   ddemangle                           0x0000000104b1d28a pure @safe void
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseValue(char[],
char) + 1574
8   ddemangle                           0x0000000104b1ded8 pure @safe void
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateArgs() +
652
9   ddemangle                           0x0000000104b1e69e pure @safe void
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateInstanceName(bool)
+ 282
10  ddemangle                           0x0000000104b1e9be pure @safe void
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseSymbolName() + 162
11  ddemangle                           0x0000000104b1eca0 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseQualifiedName() +
68
12  ddemangle                           0x0000000104b1ad82 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) +
3558
13  ddemangle                           0x0000000104b1bdcf pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]).__lambda4()
+ 19
14  ddemangle                           0x0000000104b1bccb pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]).parseBackrefType(scope
char[] delegate() pure @safe) + 263
15  ddemangle                           0x0000000104b1a036 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 154
16  ddemangle                           0x0000000104b1c8ac pure @safe void
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFuncArguments() +
760
17  ddemangle                           0x0000000104b1ebd2 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFunctionTypeNoReturn(bool)
+ 374
18  ddemangle                           0x0000000104b1ecaa pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseQualifiedName() +
78
19  ddemangle                           0x0000000104b1ad82 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) +
3558
20  ddemangle                           0x0000000104b1a1d2 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 566
21  ddemangle                           0x0000000104b1c8ac pure @safe void
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFuncArguments() +
760
22  ddemangle                           0x0000000104b1ebd2 pure @safe char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseFunctionTypeNoReturn(bool)
+ 374
23  ddemangle                           0x0000000104b1ee82 pure @safe void
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName(bool,
ulong) + 374
24  ddemangle                           0x0000000104b1f469 pure nothrow @safe
char[]
core.demangle.Demangle!(core.demangle.NoHooks).Demangle.doDemangle!(core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName).doDemangle()
+ 49
25  ddemangle                           0x0000000104b182ed pure nothrow @safe
char[] core.demangle.demangle(const(char)[], char[]) + 121
26  ddemangle                           0x0000000104b07508 nothrow @safe
const(char)[]
ddemangle.demangleMatch!(char[]).demangleMatch(std.regex.Captures!(char[]).Captures)
+ 92
27  ddemangle                           0x0000000104b0746c nothrow @safe void
std.regex.replaceAll!(ddemangle.demangleMatch, char[],
std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[],
std.regex.internal.ir.Regex!(char).Regex).__lambda3!(std.regex.Captures!(char[]).Captures,
std.array.Appender!(char[]).Appender).__lambda3(std.regex.Captures!(char[]).Captures,
std.array.Appender!(char[]).Appender) + 80
28  ddemangle                           0x0000000104b07309 @safe void
std.regex.replaceMatchesInto!(std.regex.replaceAll!(ddemangle.demangleMatch,
char[], std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[],
std.regex.internal.ir.Regex!(char).Regex).__lambda3,
std.array.Appender!(char[]).Appender, char[],
std.regex.RegexMatch!(char[]).RegexMatch).replaceMatchesInto(ref
std.array.Appender!(char[]).Appender, char[],
std.regex.RegexMatch!(char[]).RegexMatch) + 301
29  ddemangle                           0x0000000104b05718 @safe char[]
std.regex.replaceAllWith!(std.regex.replaceAll!(ddemangle.demangleMatch,
char[], std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[],
std.regex.internal.ir.Regex!(char).Regex).__lambda3, std.regex.matchAll,
char[], std.regex.internal.ir.Regex!(char).Regex).replaceAllWith(char[],
std.regex.internal.ir.Regex!(char).Regex) + 268
30  ddemangle                           0x0000000104b05602 @trusted char[]
std.regex.replaceAll!(ddemangle.demangleMatch, char[],
std.regex.internal.ir.Regex!(char).Regex).replaceAll(char[],
std.regex.internal.ir.Regex!(char).Regex) + 54
31  ddemangle                           0x0000000104b055bc @safe char[]
ddemangle.ddemangle!(char[]).ddemangle(char[]) + 96
32  ddemangle                           0x0000000104adf8a6 _Dmain + 470
33  ddemangle                           0x0000000104b31c13 void
rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).runAll().__lambda1() + 39
34  ddemangle                           0x0000000104b31aa3 void
rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) + 31
35  ddemangle                           0x0000000104b31b7e void
rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()
+ 138
36  ddemangle                           0x0000000104b31aa3 void
rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) + 31
37  ddemangle                           0x0000000104b31a11 _d_run_main + 485
38  ddemangle                           0x0000000104adfa1f main + 15
39  libdyld.dylib                       0x00007fff53874144 start + 0
40  ???                                 0x0000000000000000 0x0 + 0
```

--


More information about the Digitalmars-d-bugs mailing list