Home | History | Annotate | Download | only in oss_fuzz
      1 /*
      2  * Copyright 2018 Google Inc.
      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 
      9 #include "SkCanvas.h"
     10 #include "SkPaint.h"
     11 #include "SkRegionPriv.h"
     12 #include "SkSurface.h"
     13 
     14 bool FuzzRegionDeserialize(sk_sp<SkData> bytes) {
     15     SkRegion region;
     16     if (!region.readFromMemory(bytes->data(), bytes->size())) {
     17         return false;
     18     }
     19     region.computeRegionComplexity();
     20     region.isComplex();
     21     SkRegion r2;
     22     if (region == r2) {
     23         region.contains(0,0);
     24     } else {
     25         region.contains(1,1);
     26     }
     27     auto s = SkSurface::MakeRasterN32Premul(128, 128);
     28     if (!s) {
     29         // May return nullptr in memory-constrained fuzzing environments
     30         return false;
     31     }
     32     s->getCanvas()->drawRegion(region, SkPaint());
     33     SkDEBUGCODE(SkRegionPriv::Validate(region));
     34     return true;
     35 }
     36 
     37 #if defined(IS_FUZZING_WITH_LIBFUZZER)
     38 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
     39     auto bytes = SkData::MakeWithoutCopy(data, size);
     40     FuzzRegionDeserialize(bytes);
     41     return 0;
     42 }
     43 #endif
     44