Commit 81adfd10 by Ben L Committed by Jeff Law

d-demangle.c (dlang_parse_integer): Fix stack underflow.

     * d-demangle.c (dlang_parse_integer): Fix stack underflow.
     * testsuite/d-demangle-expected: Add testcase.

From-SVN: r270696
parent 80024f31
2019-04-30 Ben L <bobsayshilol@live.co.uk> 2019-04-30 Ben L <bobsayshilol@live.co.uk>
* d-demangle.c (dlang_parse_integer): Fix stack underflow.
* testsuite/d-demangle-expected: Add testcase.
* cp-demangle (d_print_comp_inner): Guard against a NULL 'typed_name'. * cp-demangle (d_print_comp_inner): Guard against a NULL 'typed_name'.
* testsuite/demangle-expected: Add testcase. * testsuite/demangle-expected: Add testcase.
......
...@@ -939,8 +939,8 @@ dlang_parse_integer (string *decl, const char *mangled, char type) ...@@ -939,8 +939,8 @@ dlang_parse_integer (string *decl, const char *mangled, char type)
if (type == 'a' || type == 'u' || type == 'w') if (type == 'a' || type == 'u' || type == 'w')
{ {
/* Parse character value. */ /* Parse character value. */
char value[10]; char value[20];
int pos = 10; int pos = sizeof(value);
int width = 0; int width = 0;
long val; long val;
...@@ -991,7 +991,7 @@ dlang_parse_integer (string *decl, const char *mangled, char type) ...@@ -991,7 +991,7 @@ dlang_parse_integer (string *decl, const char *mangled, char type)
for (; width > 0; width--) for (; width > 0; width--)
value[--pos] = '0'; value[--pos] = '0';
string_appendn (decl, &(value[pos]), 10 - pos); string_appendn (decl, &(value[pos]), sizeof(value) - pos);
} }
string_append (decl, "'"); string_append (decl, "'");
} }
......
...@@ -1306,3 +1306,7 @@ rt.lifetime._d_newarrayOpT!(_d_newarrayiT)._d_newarrayOpT(const(TypeInfo), ulong ...@@ -1306,3 +1306,7 @@ rt.lifetime._d_newarrayOpT!(_d_newarrayiT)._d_newarrayOpT(const(TypeInfo), ulong
--format=dlang --format=dlang
_D4core8demangle16__T6mangleTFZPvZ6mangleFNaNbNfAxaAaZ11DotSplitter5emptyMxFNaNbNdNiNfZb _D4core8demangle16__T6mangleTFZPvZ6mangleFNaNbNfAxaAaZ11DotSplitter5emptyMxFNaNbNdNiNfZb
core.demangle.mangle!(void*() function).mangle(const(char)[], char[]).DotSplitter.empty() const core.demangle.mangle!(void*() function).mangle(const(char)[], char[]).DotSplitter.empty() const
# Could crash
--format=dlang
_D8__T2fnVa8888888888888_
_D8__T2fnVa8888888888888_
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment