This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
patch for crash in d-lang.c's demangler
- From: Brad Roberts <braddr at puremagic dot com>
- To: gdb-patches at sourceware dot org
- Date: Sun, 01 Aug 2010 14:06:22 -0700
- Subject: patch for crash in d-lang.c's demangler
There's a minor, but important bug in the d language symbol demangler. I
haven't reviewed the whole thing for other bugs, just the one that I hit.
I don't have a copyright assignment form on file, but hopefully this diff is
small enough to not require one. Consider the patch public domain or whatever
if that helps.
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 6db521b..f17431b 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -37,8 +37,9 @@ extract_identifiers (const char *mangled_str, struct obstack
*tempbuf)
while (isdigit (*mangled_str))
{
- i = strtol (mangled_str, NULL, 10);
- mangled_str++;
+ char * end_ptr;
+ i = strtol (mangled_str, &end_ptr, 10);
+ mangled_str = end_ptr;
if (i <= 0 && strlen (mangled_str) < i)
return 0;
obstack_grow (tempbuf, mangled_str, i);
Before this change, symbols with string fragments over 9 bytes long gets into a
bad state and might end up crashing. Certainly ends up with a bad string.
And example that crashes for me:
20src/core/atomic.d.9215__unittest_failFiZv
Thanks,
Brad