Bug 18208 – demangle RangeError@src/core/demangle.d(230)

Status
RESOLVED
Resolution
FIXED
Severity
major
Priority
P1
Component
tools
Product
D
Version
D2
Platform
x86_64
OS
All
Creation time
2018-01-08T12:51:19Z
Last change time
2018-03-02T23:19:30Z
Assigned to
No Owner
Creator
JR

Attachments

IDFilenameSummaryContent-TypeSize
1675callgrind.out.25662Callgrind file that causes the crashtext/plain232199

Comments

Comment #0 by zorael — 2018-01-08T12:51:19Z
Created attachment 1675 Callgrind file that causes the crash Arch/Manjaro 64-bit, dmd is 2.078.0 from official repositories. dtools-ddemangle < file crashes with a Range Violation. Cannot seem to get line numbers other than the line 230 in the message. Attaching file. (Unsure if this should be filed towards tools or druntime so please reassign if in error, or close if invalid.)
Comment #1 by timothee.cour2 — 2018-01-28T00:45:01Z
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@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 ```
Comment #2 by timothee.cour2 — 2018-02-27T06:03:09Z
further reduced: ``` auto mangled="_D4vibe4data4bson14BsonSerializer__T18endWriteArrayEntryTSQCeQCc13serialization__T9SubTraitsTSQDoQDmQBk__T6TraitsTAfSQElQEjQCh13DefaultPolicyVS6dproto10attributes6PackedS0VSQBeQBa10ProtoFieldS2a5_666c6f6174i6ZQDzTfZQFdZQHbMFNaNbNiNfmZv"; import core.demangle; auto dst=new char[50]; auto ret=demangle(mangled, dst); import std.stdio; writeln(ret); ``` ``` core.exception.RangeError@core/demangle.d(230): Range violation ---------------- 0 lldbdplugin 0x000000010bbd1839 object.Throwable.TraceInfo core.runtime.defaultTraceHandler(void*) + 137 1 lldbdplugin 0x000000010bbeaf7a _d_createTrace + 58 2 lldbdplugin 0x000000010bbebb74 _d_throw_exception + 132 3 lldbdplugin 0x000000010bbcf71e onRangeError + 158 4 lldbdplugin 0x000000010bbd01e7 _d_arraybounds + 7 5 lldbdplugin 0x000000010bbc947b pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.append(const(char)[]) + 251 6 lldbdplugin 0x000000010bbca270 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseLName() + 400 7 lldbdplugin 0x000000010bbca30f pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseLName() + 559 8 lldbdplugin 0x000000010bbcb324 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseQualifiedName() + 68 9 lldbdplugin 0x000000010bbca482 pure @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseType(char[]) + 114 10 lldbdplugin 0x000000010bbcc8dd pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateArgs() + 141 11 lldbdplugin 0x000000010bbcd073 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseTemplateInstanceName(bool) + 323 12 lldbdplugin 0x000000010bbccea7 pure @safe void core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName(bool, ulong) + 487 13 lldbdplugin 0x000000010bbcd4c2 pure nothrow @safe char[] core.demangle.Demangle!(core.demangle.NoHooks).Demangle.doDemangle!(core.demangle.Demangle!(core.demangle.NoHooks).Demangle.parseMangledName).doDemangle() + 130 14 lldbdplugin 0x000000010bbc2774 pure nothrow @safe char[] core.demangle.demangle(const(char)[], char[]) + 84 15 lldbdplugin 0x000000010ba9ed3e void dtools.lldbdplugin.__unittest__Users_timothee_git_clone__timotheecour__dtools_dtools_lldbdplugin_d_115_1() + 78 16 lldbdplugin 0x000000010ba9ffda dtools.lldbdplugin.__unittest + 10 17 lldbdplugin 0x000000010bbd1ff7 int core.runtime.runModuleUnitTests().__foreachbody2(object.ModuleInfo*) + 23 18 lldbdplugin 0x000000010bbf3fa1 int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))).__foreachbody2(ref rt.sections_elf_shared.DSO) + 49 19 lldbdplugin 0x000000010bbf4ac9 int rt.sections_elf_shared.DSO.opApply(scope int delegate(ref rt.sections_elf_shared.DSO)) + 57 20 lldbdplugin 0x000000010bbf3f4b int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))) + 27 21 lldbdplugin 0x000000010bbe529e int object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*)) + 30 22 lldbdplugin 0x000000010bbd1ee2 runModuleUnitTests + 130 23 lldbdplugin 0x000000010bbeb4ea _d_run_main + 442 24 lldbdplugin 0x000000010ba9e654 main + 36 ```
Comment #3 by timothee.cour2 — 2018-02-27T08:25:13Z
Comment #4 by r.sagitario — 2018-02-27T08:54:21Z
*** Issue 18300 has been marked as a duplicate of this issue. ***
Comment #5 by github-bugzilla — 2018-03-02T23:19:22Z