1 /* 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 8 #include "src/gpu/GrShaderCaps.h" 9 #include "src/sksl/SkSLCompiler.h" 10 11 #include "fuzz/Fuzz.h" 12 FuzzSKSL2Pipeline(sk_sp<SkData> bytes)13bool FuzzSKSL2Pipeline(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::kPipelineStage_Kind, 21 SkSL::String((const char*) bytes->data(), 22 bytes->size()), 23 settings); 24 std::vector<SkSL::Compiler::FormatArg> formatArgs; 25 if (!program || !compiler.toPipelineStage(*program, &output, &formatArgs)) { 26 return false; 27 } 28 return true; 29 } 30 31 #if defined(IS_FUZZING_WITH_LIBFUZZER) LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)32extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { 33 auto bytes = SkData::MakeWithoutCopy(data, size); 34 FuzzSKSL2Pipeline(bytes); 35 return 0; 36 } 37 #endif 38