Print more detailed warning message on parsing invalid input. PiperOrigin-RevId: 551941424
diff --git a/fuzztest/domain_core.h b/fuzztest/domain_core.h index 0b36b6e..cfa4cb1 100644 --- a/fuzztest/domain_core.h +++ b/fuzztest/domain_core.h
@@ -137,6 +137,8 @@ // Parses corpus value _without validating it_. Validation must be done with // ValidateCorpusValue(). + // + // TODO(lszekeres): Return StatusOr<corpus_type>. std::optional<corpus_type> ParseCorpus(const internal::IRObject& obj) const { return inner_->UntypedParseCorpus(obj); }
diff --git a/fuzztest/internal/runtime.cc b/fuzztest/internal/runtime.cc index 5e54ce7..15812af 100644 --- a/fuzztest/internal/runtime.cc +++ b/fuzztest/internal/runtime.cc
@@ -294,15 +294,23 @@ std::optional<corpus_type> FuzzTestFuzzerImpl::TryParse(std::string_view data) { auto ir_value = IRObject::FromString(data); - if (!ir_value) return std::nullopt; - + if (!ir_value) { + absl::FPrintF(GetStderr(), "[!] Unexpected file format.\n"); + return std::nullopt; + } auto corpus_value = params_domain_->UntypedParseCorpus(*ir_value); - if (!corpus_value) return std::nullopt; + if (!corpus_value) { + absl::FPrintF(GetStderr(), "[!] Unexpected intermediate representation.\n"); + return std::nullopt; + } - absl::Status valid = + absl::Status is_valid = params_domain_->UntypedValidateCorpusValue(*corpus_value); - if (!valid.ok()) return std::nullopt; - + if (!is_valid.ok()) { + absl::FPrintF(GetStderr(), "[!] Invalid corpus value: %s\n", + is_valid.ToString()); + return std::nullopt; + } return corpus_value; }
diff --git a/fuzztest/internal/serialization.cc b/fuzztest/internal/serialization.cc index 587f5f3..f0160c5 100644 --- a/fuzztest/internal/serialization.cc +++ b/fuzztest/internal/serialization.cc
@@ -179,6 +179,7 @@ return out; } +// TODO(lszekeres): Return StatusOr<IRObject>. std::optional<IRObject> IRObject::FromString(std::string_view str) { IRObject object; if (ReadToken(str) != kHeader) return std::nullopt;