| // Copyright 2016 The Chromium 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 <stddef.h> |
| #include <stdint.h> |
| |
| #include "base/logging.h" |
| #include "testing/libfuzzer/fuzzers/skia_path_common.h" |
| #include "third_party/skia/include/core/SkPath.h" |
| #include "third_party/skia/include/pathops/SkPathOps.h" |
| |
| struct Environment { |
| Environment() { |
| // Disable noisy logging as per "libFuzzer in Chrome" documentation: |
| // testing/libfuzzer/getting_started.md#Disable-noisy-error-message-logging. |
| logging::SetMinLogLevel(logging::LOG_FATAL); |
| } |
| }; |
| |
| Environment* env = new Environment(); |
| |
| const int kLastOp = SkPathOp::kReverseDifference_SkPathOp; |
| |
| extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { |
| SkOpBuilder builder; |
| while (size > 0) { |
| SkPath path; |
| uint8_t op; |
| if (!read<uint8_t>(&data, &size, &op)) |
| break; |
| |
| BuildPath(&data, &size, &path, SkPath::Verb::kDone_Verb); |
| builder.add(path, static_cast<SkPathOp>(op % (kLastOp + 1))); |
| } |
| |
| SkPath result; |
| builder.resolve(&result); |
| return 0; |
| } |