Coverage Report

Created: 2026-04-12 06:43

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