From: Nico Weber Date: Thu, 18 Apr 2019 19:30:21 +0000 (+0000) Subject: llvm-undname: Fix two asserts-on-invalid X-Git-Tag: android-x86-9.0-r1~4500 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=61c38154e11983f3fb852d14113dba26859edfd3;p=android-x86%2Fexternal-llvm.git llvm-undname: Fix two asserts-on-invalid git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358707 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Demangle/MicrosoftDemangle.cpp b/lib/Demangle/MicrosoftDemangle.cpp index cd71e7294df..13227381743 100644 --- a/lib/Demangle/MicrosoftDemangle.cpp +++ b/lib/Demangle/MicrosoftDemangle.cpp @@ -838,7 +838,7 @@ VariableSymbolNode *Demangler::demangleVariableEncoding(StringView &MangledName, // ::= [?] // // ::= # when 1 <= Number <= 10 -// ::= + @ # when Numbrer == 0 or >= 10 +// ::= + @ # when Number == 0 or >= 10 // // ::= [A-P] # A = 0, B = 1, ... std::pair Demangler::demangleNumber(StringView &MangledName) { @@ -1269,7 +1269,8 @@ Demangler::demangleStringLiteral(StringView &MangledName) { Result->IsTruncated = true; while (!MangledName.consumeFront('@')) { - assert(StringByteSize >= 2); + if (StringByteSize < 2) + goto StringLiteralError; wchar_t W = demangleWcharLiteral(MangledName); if (StringByteSize != 2 || Result->IsTruncated) outputEscapedChar(OS, W); @@ -1285,7 +1286,8 @@ Demangler::demangleStringLiteral(StringView &MangledName) { unsigned BytesDecoded = 0; while (!MangledName.consumeFront('@')) { - assert(StringByteSize >= 1); + if (StringByteSize < 1) + goto StringLiteralError; StringBytes[BytesDecoded++] = demangleCharLiteral(MangledName); } diff --git a/test/Demangle/invalid-manglings.test b/test/Demangle/invalid-manglings.test index 84c2b32bf20..c4a75e3de20 100644 --- a/test/Demangle/invalid-manglings.test +++ b/test/Demangle/invalid-manglings.test @@ -139,3 +139,13 @@ ; CHECK-EMPTY: ; CHECK-NEXT: ?foo@?$?0H@ ; CHECK-NEXT: error: Invalid mangled name + +??_C@_0A@01234567@a +; CHECK-EMPTY: +; CHECK-NEXT: ??_C@_0A@01234567@a +; CHECK-NEXT: error: Invalid mangled name + +??_C@_1A@01234567@a +; CHECK-EMPTY: +; CHECK-NEXT: ??_C@_1A@01234567@a +; CHECK-NEXT: error: Invalid mangled name