// 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 "testing/libfuzzer/fuzzers/skia_path_common.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkPaint.h"
#include "third_party/skia/include/core/SkPath.h"
#include "third_party/skia/include/core/SkSurface.h"


extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  uint8_t w, h, anti_alias;
  if (!read<uint8_t>(&data, &size, &w))
    return 0;
  if (!read<uint8_t>(&data, &size, &h))
    return 0;
  if (!read<uint8_t>(&data, &size, &anti_alias))
    return 0;

  SkScalar a, b, c, d;
  if (!read<SkScalar>(&data, &size, &a))
    return 0;
  if (!read<SkScalar>(&data, &size, &b))
    return 0;
  if (!read<SkScalar>(&data, &size, &c))
    return 0;
  if (!read<SkScalar>(&data, &size, &d))
    return 0;

  // In this case, we specifically don't want to include kDone_Verb.
  SkPath path;
  BuildPath(&data, &size, &path, SkPath::Verb::kClose_Verb);

  // Try a few potentially interesting things with our path.
  path.contains(a, b);
  path.conservativelyContainsRect(SkRect::MakeLTRB(a, b, c, d));

  SkPaint paint_fill;
  paint_fill.setStyle(SkPaint::Style::kFill_Style);
  paint_fill.setAntiAlias(anti_alias & 1);

  SkPaint paint_stroke;
  paint_stroke.setStyle(SkPaint::Style::kStroke_Style);
  paint_stroke.setStrokeWidth(1);
  paint_stroke.setAntiAlias(anti_alias & 1);

  SkPaint paint_stroke_and_fill;
  paint_stroke_and_fill.setStyle(SkPaint::Style::kStrokeAndFill_Style);
  paint_stroke_and_fill.setStrokeWidth(1);
  paint_stroke_and_fill.setAntiAlias(anti_alias & 1);

  SkPath dst_path;
  paint_stroke.getFillPath(path, &dst_path, nullptr);

  // Width and height should never be 0.
  auto surface(SkSurface::MakeRasterN32Premul(w ? w : 1, h ? h : 1));

  surface->getCanvas()->drawPath(path, paint_fill);
  surface->getCanvas()->drawPath(path, paint_stroke);
  surface->getCanvas()->drawPath(path, paint_stroke_and_fill);

  return 0;
}
