diff options
Diffstat (limited to 'llvm/lib/Demangle/MicrosoftDemangle.cpp')
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index 6be8b0f..8d5f6b2 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -1374,6 +1374,11 @@ Demangler::demangleStringLiteral(std::string_view &MangledName) { Result->IsTruncated = true; while (!consumeFront(MangledName, '@')) { + // For a wide string StringByteSize has to have an even length. + if (StringByteSize % 2 != 0) + goto StringLiteralError; + if (StringByteSize == 0) + goto StringLiteralError; if (MangledName.size() < 2) goto StringLiteralError; wchar_t W = demangleWcharLiteral(MangledName); |