Coverage Report

Created: 2025-07-18 06:20

/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
3.23k
{
44
3.23k
  FuzzedDataProvider fdp(data, size);
45
3.23k
  double hdpi = fdp.ConsumeFloatingPoint<double>();
46
3.23k
  double vdpi = fdp.ConsumeFloatingPoint<double>();
47
3.23k
  int rotate = fdp.ConsumeIntegral<int>();
48
3.23k
  bool useMediaBox = fdp.ConsumeBool();
49
3.23k
  bool crop = fdp.ConsumeBool();
50
3.23k
  bool printing = fdp.ConsumeBool();
51
3.23k
  std::vector<char> payload = fdp.ConsumeRemainingBytes<char>();
52
53
3.23k
  Object xpdf_obj;
54
3.23k
  xpdf_obj.initNull();
55
3.23k
  BaseStream *stream = new MemStream(payload.data(), 0, payload.size(), &xpdf_obj);
56
57
3.23k
  Object info, xfa;
58
3.23k
  Object *acroForm;
59
3.23k
  globalParams = new GlobalParams(NULL);
60
3.23k
  globalParams->setErrQuiet(1);
61
3.23k
  globalParams->setupBaseFonts(NULL);
62
3.23k
  char yes[] = "yes";
63
3.23k
  globalParams->setEnableFreeType(yes); // Yes, it's a string and not a bool.
64
3.23k
  globalParams->setErrQuiet(1);
65
66
3.23k
  PDFDoc *doc = NULL;
67
3.23k
  try
68
3.23k
  {
69
3.23k
    PDFDoc doc(stream);
70
3.23k
    if (doc.isOk() == gTrue)
71
1.59k
    {
72
1.59k
      XRef *xref = doc.getXRef();
73
1.59k
      int objNums = xref->getNumObjects();
74
1.59k
      Object currentObj;
75
46.5M
      for (int i = 0; i < objNums; ++i)
76
46.5M
      {
77
46.5M
        if (xref->fetch(i, 0, &currentObj)->isStream())
78
16.3k
        {
79
16.3k
          currentObj.getStream()->reset();
80
16.3k
        }
81
46.5M
      }
82
1.59k
      currentObj.free();
83
1.59k
    }
84
3.23k
  }
85
3.23k
  catch (...)
86
3.23k
  {
87
24
  }
88
89
3.23k
  delete globalParams;
90
91
3.23k
  return 0;
92
3.23k
}