Index: llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp =================================================================== --- llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp +++ llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp @@ -14,11 +14,19 @@ #include extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - std::string NullTerminatedString((const char *)Data, Size); - int status = 0; - if (char *demangle = llvm::itaniumDemangle(NullTerminatedString.c_str(), nullptr, - nullptr, &status)) - free(demangle); + if (Size == 0) + return 0; + + std::string NullTerminatedString((const char *)&Data[1], Size - 1); + int Status = 0; + char *Demangle = nullptr; + if (Data[0] < 128) + Demangle = llvm::itaniumDemangle(NullTerminatedString.c_str(), nullptr, + nullptr, &Status); + else + Demangle = llvm::microsoftDemangle(NullTerminatedString.c_str(), nullptr, + nullptr, &Status); + free(Demangle); return 0; }