1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2018 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "fuzz/Fuzz.h" 9cb93a386Sopenharmony_ci#include "fuzz/FuzzCommon.h" 10cb93a386Sopenharmony_ci#include "include/core/SkData.h" 11cb93a386Sopenharmony_ci#include "include/core/SkPath.h" 12cb93a386Sopenharmony_ci#include "include/core/SkRegion.h" 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_civoid FuzzRegionSetPath(Fuzz* fuzz) { 16cb93a386Sopenharmony_ci SkPath p; 17cb93a386Sopenharmony_ci FuzzNicePath(fuzz, &p, 1000); 18cb93a386Sopenharmony_ci SkRegion r1; 19cb93a386Sopenharmony_ci bool initR1; 20cb93a386Sopenharmony_ci fuzz->next(&initR1); 21cb93a386Sopenharmony_ci if (initR1) { 22cb93a386Sopenharmony_ci fuzz->next(&r1); 23cb93a386Sopenharmony_ci } 24cb93a386Sopenharmony_ci SkRegion r2; 25cb93a386Sopenharmony_ci fuzz->next(&r2); 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci r1.setPath(p, r2); 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ci // Do some follow on computations to make sure region is well-formed. 30cb93a386Sopenharmony_ci r1.computeRegionComplexity(); 31cb93a386Sopenharmony_ci r1.isComplex(); 32cb93a386Sopenharmony_ci if (r1 == r2) { 33cb93a386Sopenharmony_ci r1.contains(0,0); 34cb93a386Sopenharmony_ci } else { 35cb93a386Sopenharmony_ci r1.contains(1,1); 36cb93a386Sopenharmony_ci } 37cb93a386Sopenharmony_ci} 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci// TODO(kjlubick): remove IS_FUZZING... after https://crrev.com/c/2410304 lands 40cb93a386Sopenharmony_ci#if defined(SK_BUILD_FOR_LIBFUZZER) || defined(IS_FUZZING_WITH_LIBFUZZER) 41cb93a386Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { 42cb93a386Sopenharmony_ci if (size > 512) { 43cb93a386Sopenharmony_ci return 0; 44cb93a386Sopenharmony_ci } 45cb93a386Sopenharmony_ci sk_sp<SkData> bytes(SkData::MakeWithoutCopy(data, size)); 46cb93a386Sopenharmony_ci Fuzz fuzz(bytes); 47cb93a386Sopenharmony_ci FuzzRegionSetPath(&fuzz); 48cb93a386Sopenharmony_ci return 0; 49cb93a386Sopenharmony_ci} 50cb93a386Sopenharmony_ci#endif 51