14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 The PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory>
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/cfx_retain_ptr.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fde/xml/cfx_saxreader.h"
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fgas/crt/fgas_stream.h"
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_widetextread.h"
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString input = CFX_WideString::FromUTF8(
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CFX_ByteStringC(data, static_cast<FX_STRSIZE>(size)));
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  auto stream = pdfium::MakeRetain<CXFA_WideTextRead>(input);
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!stream)
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_RetainPtr<IFX_SeekableReadStream> fileRead =
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      stream->MakeSeekableReadStream();
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!fileRead)
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_SAXReader reader;
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (reader.StartParse(fileRead, 0, -1, CFX_SaxParseMode_NotSkipSpace) < 0)
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return 0;
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  while (1) {
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t ret = reader.ContinueParse(nullptr);
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (ret < 0 || ret > 99)
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 0;
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
36