blob: 7133e73801d3f6de442b9f7326fb6bb113c3a278 [file] [log] [blame]
Kevin Lubicke9c1ce82019-03-11 11:09:40 -04001/*
2 * Copyright 2019 Google, LLC
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "src/gpu/GrShaderCaps.h"
9#include "src/sksl/SkSLCompiler.h"
Kevin Lubicke9c1ce82019-03-11 11:09:40 -040010
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "fuzz/Fuzz.h"
Kevin Lubicke9c1ce82019-03-11 11:09:40 -040012
13bool FuzzSKSL2GLSL(sk_sp<SkData> bytes) {
14 SkSL::Compiler compiler;
15 SkSL::String output;
16 SkSL::Program::Settings settings;
17 sk_sp<GrShaderCaps> caps = SkSL::ShaderCapsFactory::Default();
18 settings.fCaps = caps.get();
19 std::unique_ptr<SkSL::Program> program = compiler.convertProgram(
20 SkSL::Program::kFragment_Kind,
Kevin Lubick39cbe462019-03-11 15:38:00 -040021 SkSL::String((const char*) bytes->data(),
22 bytes->size()),
Kevin Lubicke9c1ce82019-03-11 11:09:40 -040023 settings);
24 if (!program || !compiler.toGLSL(*program, &output)) {
25 return false;
26 }
27 return true;
28}
29
30#if defined(IS_FUZZING_WITH_LIBFUZZER)
31extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
Zepeng Hu5b35f212020-06-14 19:03:34 +000032 if (size > 3000) {
33 return 0;
34 }
Kevin Lubicke9c1ce82019-03-11 11:09:40 -040035 auto bytes = SkData::MakeWithoutCopy(data, size);
36 FuzzSKSL2GLSL(bytes);
37 return 0;
38}
39#endif