Home | History | Annotate | Download | only in libfuzzer
      1 // Copyright 2017 Google Inc. All rights reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #ifndef SRC_LIBFUZZER_LIBFUZZER_MUTATOR_H_
     16 #define SRC_LIBFUZZER_LIBFUZZER_MUTATOR_H_
     17 
     18 #include <string>
     19 
     20 #include "src/mutator.h"
     21 
     22 namespace protobuf_mutator {
     23 namespace libfuzzer {
     24 
     25 // Overrides protobuf_mutator::Mutator::Mutate* methods with implementation
     26 // which uses libFuzzer library. protobuf_mutator::Mutator has very basic
     27 // implementation of this methods.
     28 class Mutator : public protobuf_mutator::Mutator {
     29  public:
     30   using protobuf_mutator::Mutator::Mutator;
     31 
     32  protected:
     33   int32_t MutateInt32(int32_t value) override;
     34   int64_t MutateInt64(int64_t value) override;
     35   uint32_t MutateUInt32(uint32_t value) override;
     36   uint64_t MutateUInt64(uint64_t value) override;
     37   float MutateFloat(float value) override;
     38   double MutateDouble(double value) override;
     39   std::string MutateString(const std::string& value,
     40                            size_t size_increase_hint) override;
     41 };
     42 
     43 }  // namespace libfuzzer
     44 }  // namespace protobuf_mutator
     45 
     46 #endif  // SRC_LIBFUZZER_LIBFUZZER_MUTATOR_H_
     47