pdf_codec_fax_fuzzer.cc revision 4d3acf4ec42bf6e838f9060103aff98fbf170794
1// Copyright 2016 The PDFium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <cstdint> 6#include <memory> 7 8#include "core/fxcodec/codec/ccodec_faxmodule.h" 9#include "core/fxcodec/codec/ccodec_scanlinedecoder.h" 10 11static int GetInteger(const uint8_t* data) { 12 return data[0] | data[1] << 8 | data[2] << 16 | data[3] << 24; 13} 14 15extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { 16 const int kParameterSize = 21; 17 if (size < kParameterSize) 18 return 0; 19 20 int width = GetInteger(data); 21 int height = GetInteger(data + 4); 22 int K = GetInteger(data + 8); 23 int Columns = GetInteger(data + 12); 24 int Rows = GetInteger(data + 16); 25 bool EndOfLine = !(data[20] & 0x01); 26 bool ByteAlign = !(data[20] & 0x02); 27 bool BlackIs1 = !(data[20] & 0x04); 28 data += kParameterSize; 29 size -= kParameterSize; 30 31 CCodec_FaxModule fax_module; 32 std::unique_ptr<CCodec_ScanlineDecoder> decoder( 33 fax_module.CreateDecoder(data, size, width, height, K, EndOfLine, 34 ByteAlign, BlackIs1, Columns, Rows)); 35 36 if (decoder) { 37 int line = 0; 38 while (decoder->GetScanline(line)) 39 line++; 40 } 41 42 return 0; 43} 44