From c01634ac8f57888e197f758a170c66c6faa281ad Mon Sep 17 00:00:00 2001 From: Jon Meow <46229924+jonmeow@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:25:34 -0800 Subject: [PATCH] Ignore large fuzzer inputs. (#1085) --- toolchain/lexer/tokenized_buffer_fuzzer.cpp | 9 +++++++++ toolchain/parser/parse_tree_fuzzer.cpp | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/toolchain/lexer/tokenized_buffer_fuzzer.cpp b/toolchain/lexer/tokenized_buffer_fuzzer.cpp index 3d54c7731562..a4eeb38992b9 100644 --- a/toolchain/lexer/tokenized_buffer_fuzzer.cpp +++ b/toolchain/lexer/tokenized_buffer_fuzzer.cpp @@ -16,6 +16,15 @@ namespace Carbon::Testing { // NOLINTNEXTLINE: Match the documented fuzzer entry point declaration style. extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, std::size_t size) { + // Ignore large inputs. + // TODO: Investigate replacement with an error limit. Content with errors on + // escaped quotes (`\"` repeated) have O(M * N) behavior for M errors in a + // file length N, so either that will need to also be fixed or M will need to + // shrink for large (1MB+) inputs. + // This also affects parse_tree_fuzzer.cpp. + if (size > 100000) { + return 0; + } auto source = SourceBuffer::CreateFromText( llvm::StringRef(reinterpret_cast(data), size)); diff --git a/toolchain/parser/parse_tree_fuzzer.cpp b/toolchain/parser/parse_tree_fuzzer.cpp index 744cca060da0..17a7170abe38 100644 --- a/toolchain/parser/parse_tree_fuzzer.cpp +++ b/toolchain/parser/parse_tree_fuzzer.cpp @@ -18,6 +18,12 @@ namespace Carbon::Testing { // NOLINTNEXTLINE: Match the documented fuzzer entry point declaration style. extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, std::size_t size) { + // Ignore large inputs. + // TODO: See tokenized_buffer_fuzzer.cpp. + if (size > 100000) { + return 0; + } + auto source = SourceBuffer::CreateFromText( llvm::StringRef(reinterpret_cast(data), size));