Describe the bug
There is a memory access violation (BAD_ACCESS) in the d_unqualified_name function [1] of demangler_gnu, as demonstrated with the string "_ZN11951592242730AnimationOverlayHandlerImplD18446744073709551616Ev" . This leads to a segmentation fault when launching the demangler_gnu process.
To Reproduce
lldb ./GPL/DemanglerGnu/os/osx64/demangler_gnu _ZN11951592242730AnimationOverlayHandlerImplD18446744073709551616Ev
(lldb) target create "./GPL/DemanglerGnu/os/osx64/demangler_gnu"
Current executable set to './GPL/DemanglerGnu/os/osx64/demangler_gnu' (x86_64).
(lldb) settings set -- target.run-args "_ZN11951592242730AnimationOverlayHandlerImplD18446744073709551616Ev"
(lldb) r
Process 46162 launched: '/Users/marc/Downloads/ghidra_9.1.1_PUBLIC/GPL/DemanglerGnu/os/osx64/demangler_gnu' (x86_64)
Process 46162 stopped
d_unqualified_name + 571
demangler_gnud_unqualified_name:d_unqualified_name + 571
frame #1: 0x000000010000a09f demangler_gnud_prefix + 255d_nested_name + 166
frame #3: 0x000000010000901f demangler_gnud_name + 79d_encoding + 81
frame #5: 0x0000000100002279 demangler_gnucplus_demangle_mangled_name + 201d_demangle_callback + 556
frame #7: 0x0000000100007f91 demangler_gnud_demangle + 65cplus_demangle_v3 + 31
frame #9: 0x00000001000103cc demangler_gnucplus_demangle + 188demangle_it + 130
frame #11: 0x000000010001164b demangler_gnumain + 507start + 1
frame #13: 0x00007fff6b67c3d5 libdyld.dylibstart + 1Expected behavior
No crash, return proper error return code.
Environment (please complete the following information):
Additional context
In the long run the Ghidra default demangler could be implemented in a language which does not allow memory faults when using attacker created mangled symbols.
Related to #1195
The gnu demangler is a modifier version of well the gnu demangler. The issue may have existed within libiberty at some point. It may be solvable looking through the commit history in gcc.
Our version of the gnu demangler is quite old, probably almost 10 years at this point. We intend to update it, but have not yet done so.