1 /* 2 * Copyright 2018 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 "SkCanvas.h" 9 #include "SkFontMgrPriv.h" 10 #include "SkPaint.h" 11 #include "SkReadBuffer.h" 12 #include "SkSurface.h" 13 #include "SkTestFontMgr.h" 14 #include "SkTextBlobPriv.h" 15 FuzzTextBlobDeserialize(SkReadBuffer & buf)16void FuzzTextBlobDeserialize(SkReadBuffer& buf) { 17 auto tb = SkTextBlobPriv::MakeFromBuffer(buf); 18 if (!buf.isValid()) { 19 return; 20 } 21 22 auto s = SkSurface::MakeRasterN32Premul(128, 128); 23 if (!s) { 24 // May return nullptr in memory-constrained fuzzing environments 25 return; 26 } 27 s->getCanvas()->drawTextBlob(tb, 200, 200, SkPaint()); 28 } 29 30 #if defined(IS_FUZZING_WITH_LIBFUZZER) LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)31extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { 32 gSkFontMgr_DefaultFactory = &sk_tool_utils::MakePortableFontMgr; 33 SkReadBuffer buf(data, size); 34 FuzzTextBlobDeserialize(buf); 35 return 0; 36 } 37 #endif 38