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 #include <cmath>
16 
17 #include "examples/libfuzzer/libfuzzer_example.pb.h"
18 #include "src/libfuzzer/libfuzzer_macro.h"
19 
20 protobuf_mutator::protobuf::LogSilencer log_silincer;
21 
DEFINE_PROTO_FUZZER(const libfuzzer_example::Msg & message)22 DEFINE_PROTO_FUZZER(const libfuzzer_example::Msg& message) {
23   // Emulate a bug.
24   if (message.optional_string() == "FooBar" &&
25       message.optional_uint64() > 100 &&
26       !std::isnan(message.optional_float()) &&
27       std::fabs(message.optional_float()) > 1000 &&
28       std::fabs(message.optional_float()) < 1E10) {
29     abort();
30   }
31 }
32