}
uint8_t Demangler::demangleCharLiteral(StringView &MangledName) {
+ assert(!MangledName.empty());
if (!MangledName.startsWith('?'))
return MangledName.popFront();
// Encoded Length
std::tie(StringByteSize, IsNegative) = demangleNumber(MangledName);
- if (Error || IsNegative)
+ if (Error || IsNegative || StringByteSize < (IsWcharT ? 2 : 1))
goto StringLiteralError;
// CRC 32 (always 8 characters plus a terminator)
Result->IsTruncated = true;
while (!MangledName.consumeFront('@')) {
- if (StringByteSize < 2)
+ if (MangledName.size() < 2)
goto StringLiteralError;
wchar_t W = demangleWcharLiteral(MangledName);
if (StringByteSize != 2 || Result->IsTruncated)
unsigned BytesDecoded = 0;
while (!MangledName.consumeFront('@')) {
- if (StringByteSize < 1)
+ if (MangledName.size() < 1)
goto StringLiteralError;
StringBytes[BytesDecoded++] = demangleCharLiteral(MangledName);
}
; CHECK-EMPTY:
; CHECK-NEXT: ??_C@_1A@01234567@a
; CHECK-NEXT: error: Invalid mangled name
+
+??_C@_0301234567@a
+; CHECK-EMPTY:
+; CHECK-NEXT: ??_C@_0301234567@a
+; CHECK-NEXT: error: Invalid mangled name
+
+??_C@_1301234567@a
+; CHECK-EMPTY:
+; CHECK-NEXT: ??_C@_1301234567@a
+; CHECK-NEXT: error: Invalid mangled name