| // Copyright 2019 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <base/logging.h> |
| #include <libprotobuf-mutator/src/libfuzzer/libfuzzer_macro.h> |
| |
| #include "chaps/attributes.h" |
| #include "chaps/proto_bindings/attributes.pb.h" |
| |
| class Environment { |
| public: |
| Environment() { |
| // Disable logging. |
| logging::SetMinLogLevel(logging::LOG_FATAL); |
| } |
| }; |
| |
| DEFINE_PROTO_FUZZER(const chaps::AttributeList& input) { |
| static Environment env; |
| |
| // This creates a fuzzed protobuf that we then attempt to parse, and if the |
| // parse does succeed then we test serializing that back out w/ the fuzzed |
| // data. |
| chaps::Attributes attributes; |
| std::string attribute_string = input.SerializeAsString(); |
| std::vector<uint8_t> attribute_data(attribute_string.begin(), |
| attribute_string.end()); |
| if (attributes.Parse(attribute_data)) { |
| std::vector<uint8_t> serialized_data; |
| attributes.Serialize(&serialized_data); |
| } |
| } |