On 14 May 2015 at 14:58, Jeff Law <l...@redhat.com> wrote: > On 05/13/2015 02:51 AM, Iain Buclaw wrote: >> >> If a symbol that has so far been valid abruptly ends then we will want >> to fail the process rather than silently succeed. >> >> --- >> libiberty/ChangeLog >> >> 2015-05-13 Iain Buclaw <ibuc...@gdcproject.org> >> >> * d-demangle.c (dlang_call_convention): Return NULL if have reached >> the >> end of the symbol, but expected more. >> (dlang_attributes): Likewise. >> (dlang_function_type): Likewise. >> (dlang_type): Likewise. >> (dlang_identifier): Likewise. >> (dlang_value): Likewise. > > I spot checked various callers of these functions that not return NULL and > they looked reasonable. Though I was a bit concerned about the callers of > dlang_type, dlang_value and dlang_identifier. > > In those cases we'll often still do the string_append, string_setlength and > other calls in the caller of dlang_{value,type,identifier}. I'm assuming > that's safe (the error still appears to be bubbling up properly). >
The string routines should be safe for that (appending a string with a zero length does nothing, for instance). > If you can confirm that we're OK in those cases, then this is OK for the > trunk. > I can start fuzzing mangle strings to test that failures actually fail gracefully. There's already a fuzzer that exists for C++, I think the only change that would be required for D is exchanging "_Z" for "_D" and calling cplus_demangle with DMGL_DLANG. Regards Iain