Simplify proto comparison in test.

Change-Id: Ia8d559f375be5bdf7cdb0d979140b9fdbd513c85
Reviewed-on: https://team-review.git.corp.google.com/58370
Reviewed-by: Mike Aizatsky <aizatsky@google.com>
1 file changed
tree: 3e2936d9aab55f16f8f7cad5c3eb52a497cf0ad0
  1. cmake/
  2. .clang-format
  3. AUTHORS
  4. CONTRIBUTING
  5. field_instance.h
  6. LICENSE
  7. protobuf_mutator.cc
  8. protobuf_mutator.h
  9. protobuf_mutator.proto
  10. protobuf_mutator_test.cc
  11. README.md
  12. weighted_reservoir_sampler.h
  13. weighted_reservoir_sampler_test.cc
README.md

libprotobuf-mutator

Overview

libprotobuf-mutator is a library to randomly mutate protobuffers.
It could be used together with guided fuzzing engines, such as libFuzzer.

Quick start on Debian/Ubuntu

Install prerequisites:

sudo apt-get update
sudo apt-get install binutils cmake ninja-build

Compile and test everything:

mkdir build
cd build
cmake ../cmake/ -GNinja -DCMAKE_BUILD_TYPE=Debug
ninja check

Usage

To use libprotobuf-mutator simply include protobuf_mutator.h and protobuf_mutator.cc into your build files.

The ProtobufMutator class implements mutations of the protobuf tree structure and mutations of individual fields. The field mutation logic is very basic -- for better results you should override the ProtobufMutator::Mutate* methods with more sophisticated logic, e.g. using libFuzzer's mutators.

To apply one mutation to a protobuf object do the following:

class MyProtobufMutator : public ProtobufMutator {
 public:
  MyProtobufMutator(uint32_t seed) : ProtobufMutator(seed) {}
  // Optionally redefine the Mutate* methods to perform more sophisticated mutations.
}
void Mutate(MyMessage* message) {
  MyProtobufMutator mutator(my_random_seed);
  mutator.Mutate(message, 200);
}

See also the ProtobufMutatorMessagesTest.UsageExample test from protobuf_mutator_test.cc.

Integrating with libFuzzer

TODO