Coverage Report

Created: 2025-11-09 06:48

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