Coverage Report

Created: 2025-11-04 08:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/xpdf-4.05/build/fuzz_JBIG2.cc
Line
Count
Source
1
/*  Copyright 2022 Google Inc.
2
3
Licensed under the Apache License, Version 2.0 (the "License");
4
you may not use this file except in compliance with the License.
5
You may obtain a copy of the License at
6
7
      http://www.apache.org/licenses/LICENSE-2.0
8
9
Unless required by applicable law or agreed to in writing, software
10
distributed under the License is distributed on an "AS IS" BASIS,
11
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
See the License for the specific language governing permissions and
13
limitations under the License.
14
*/
15
#include <fuzzer/FuzzedDataProvider.h>
16
17
#include <vector>
18
#include <aconf.h>
19
#include <stdio.h>
20
#include <stdint.h>
21
#include <stdlib.h>
22
#include <stddef.h>
23
#include <string.h>
24
#include <png.h>
25
26
#include "gmem.h"
27
#include "gmempp.h"
28
#include "parseargs.h"
29
#include "GString.h"
30
#include "gfile.h"
31
#include "GlobalParams.h"
32
#include "Object.h"
33
#include "PDFDoc.h"
34
#include "SplashBitmap.h"
35
#include "Splash.h"
36
#include "SplashOutputDev.h"
37
#include "Stream.h"
38
#include "config.h"
39
40
#include "JBIG2Stream.h"
41
42
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
43
308
{
44
308
  FuzzedDataProvider fdp(data, size);
45
308
  double hdpi = fdp.ConsumeFloatingPoint<double>();
46
308
  double vdpi = fdp.ConsumeFloatingPoint<double>();
47
308
  int rotate = fdp.ConsumeIntegral<int>();
48
308
  bool useMediaBox = fdp.ConsumeBool();
49
308
  bool crop = fdp.ConsumeBool();
50
308
  bool printing = fdp.ConsumeBool();
51
308
  std::vector<char> payload = fdp.ConsumeRemainingBytes<char>();
52
53
308
  Object xpdf_obj;
54
308
  xpdf_obj.initNull();
55
308
  BaseStream *stream = new MemStream(payload.data(), 0, payload.size(), &xpdf_obj);
56
57
308
  Object info, xfa;
58
308
  Object *acroForm;
59
308
  globalParams = new GlobalParams(NULL);
60
308
  globalParams->setErrQuiet(1);
61
308
  globalParams->setupBaseFonts(NULL);
62
308
  char yes[] = "yes";
63
308
  globalParams->setEnableFreeType(yes); // Yes, it's a string and not a bool.
64
308
  globalParams->setErrQuiet(1);
65
66
308
  PDFDoc *doc = NULL;
67
308
  try
68
308
  {
69
308
    PDFDoc doc(stream);
70
308
    if (doc.isOk() == gTrue)
71
233
    {
72
233
      XRef *xref = doc.getXRef();
73
233
      int objNums = xref->getNumObjects();
74
233
      Object currentObj;
75
13.1M
      for (int i = 0; i < objNums; ++i)
76
13.1M
      {
77
13.1M
        if (xref->fetch(i, 0, &currentObj)->isStream())
78
3.69k
        {
79
3.69k
          currentObj.getStream()->reset();
80
3.69k
        }
81
13.1M
      }
82
233
      currentObj.free();
83
233
    }
84
308
  }
85
308
  catch (...)
86
308
  {
87
1
  }
88
89
308
  delete globalParams;
90
91
308
  return 0;
92
308
}