Remove reference to protobuf internals from fuzzers (#4701)

In newer versions of protobuf the Status building code has been made
internal, so that embedders cannot build their own instances like is
being done here.

Changing this code to just use the .ok() method on the status object,
since if the status is OK or not is what is actually being tested.

This will make it easier in the future to update external/protobuf.
This commit is contained in:
Ryan Harrison 2022-02-10 10:41:24 -05:00 committed by GitHub
parent ff91f9449b
commit a383c476e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 18 deletions

View File

@ -149,7 +149,7 @@ void DumpTransformationsJson(
json_options.add_whitespace = true; json_options.add_whitespace = true;
auto json_generation_status = google::protobuf::util::MessageToJsonString( auto json_generation_status = google::protobuf::util::MessageToJsonString(
transformations, &json_string, json_options); transformations, &json_string, json_options);
if (json_generation_status == google::protobuf::util::Status::OK) { if (json_generation_status.ok()) {
std::ofstream transformations_json_file(filename); std::ofstream transformations_json_file(filename);
transformations_json_file << json_string; transformations_json_file << json_string;
transformations_json_file.close(); transformations_json_file.close();

View File

@ -673,19 +673,6 @@ void DumpTransformationsBinary(
transformations_file.close(); transformations_file.close();
} }
// The Chromium project applies the following patch to the protobuf library:
//
// source.chromium.org/chromium/chromium/src/+/main:third_party/protobuf/patches/0003-remove-static-initializers.patch
//
// This affects how Status objects must be constructed. This method provides a
// convenient way to get the OK status that works both with and without the
// patch. With the patch OK is a StatusPod, from which a Status can be
// constructed. Without the patch, OK is already a Status, and we harmlessly
// copy-construct the result from it.
google::protobuf::util::Status GetProtobufOkStatus() {
return google::protobuf::util::Status(google::protobuf::util::Status::OK);
}
// Dumps |transformations| to file |filename| in JSON format. Useful for // Dumps |transformations| to file |filename| in JSON format. Useful for
// interactive debugging. // interactive debugging.
void DumpTransformationsJson( void DumpTransformationsJson(
@ -696,7 +683,7 @@ void DumpTransformationsJson(
json_options.add_whitespace = true; json_options.add_whitespace = true;
auto json_generation_status = google::protobuf::util::MessageToJsonString( auto json_generation_status = google::protobuf::util::MessageToJsonString(
transformations, &json_string, json_options); transformations, &json_string, json_options);
if (json_generation_status == GetProtobufOkStatus()) { if (json_generation_status.ok()) {
std::ofstream transformations_json_file(filename); std::ofstream transformations_json_file(filename);
transformations_json_file << json_string; transformations_json_file << json_string;
transformations_json_file.close(); transformations_json_file.close();
@ -747,8 +734,9 @@ int main(int argc, const char** argv) {
std::string facts_json_string((std::istreambuf_iterator<char>(facts_input)), std::string facts_json_string((std::istreambuf_iterator<char>(facts_input)),
std::istreambuf_iterator<char>()); std::istreambuf_iterator<char>());
facts_input.close(); facts_input.close();
if (GetProtobufOkStatus() != google::protobuf::util::JsonStringToMessage( if (!google::protobuf::util::JsonStringToMessage(facts_json_string,
facts_json_string, &initial_facts)) { &initial_facts)
.ok()) {
spvtools::Error(FuzzDiagnostic, nullptr, {}, "Error reading facts data"); spvtools::Error(FuzzDiagnostic, nullptr, {}, "Error reading facts data");
return 1; return 1;
} }
@ -828,7 +816,7 @@ int main(int argc, const char** argv) {
json_options.add_whitespace = true; json_options.add_whitespace = true;
auto json_generation_status = google::protobuf::util::MessageToJsonString( auto json_generation_status = google::protobuf::util::MessageToJsonString(
transformations_applied, &json_string, json_options); transformations_applied, &json_string, json_options);
if (json_generation_status != GetProtobufOkStatus()) { if (!json_generation_status.ok()) {
spvtools::Error(FuzzDiagnostic, nullptr, {}, spvtools::Error(FuzzDiagnostic, nullptr, {},
"Error writing out transformations in JSON format"); "Error writing out transformations in JSON format");
return 1; return 1;