diff options
Diffstat (limited to 'llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp')
| -rw-r--r-- | llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp b/llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp index 07c290a0be5..017e85aabf6 100644 --- a/llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp +++ b/llvm/tools/llvm-demangle-fuzzer/llvm-demangle-fuzzer.cpp @@ -14,11 +14,19 @@ #include <string> 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; + + bool UseItanium = Data[0] < 128; + std::string NullTerminatedString((const char *)Data + 1, Size - 1); + + if (UseItanium) { + free(llvm::itaniumDemangle(NullTerminatedString.c_str(), nullptr, nullptr, + nullptr)); + } else { + free(llvm::microsoftDemangle(NullTerminatedString.c_str(), nullptr, nullptr, + nullptr)); + } return 0; } |

