Coverage Report

Created: 2026-09-01 07:01

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/mercurial/contrib/fuzz/fm1readmarkers.cc
Line
Count
Source
1
#include <Python.h>
2
#include <assert.h>
3
#include <stdlib.h>
4
#include <unistd.h>
5
6
#include <string>
7
8
#include "pyutil.h"
9
10
extern "C" {
11
12
static PYCODETYPE *code;
13
14
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
15
15
{
16
15
  contrib::initpy(*argv[0]);
17
15
  code = (PYCODETYPE *)Py_CompileString(R"py(
18
15
def maybeint(s, default):
19
15
    try:
20
15
        return int(s)
21
15
    except ValueError:
22
15
        return default
23
15
try:
24
15
    parts = data.split('\0', 2)
25
15
    if len(parts) == 3:
26
15
        offset, stop, data = parts
27
15
    elif len(parts) == 2:
28
15
        stop, data = parts
29
15
        offset = 0
30
15
    else:
31
15
        offset = stop = 0
32
15
    offset, stop = maybeint(offset, 0), maybeint(stop, len(data))
33
15
    parsers.fm1readmarkers(data, offset, stop)
34
15
except Exception as e:
35
15
    pass
36
15
    # uncomment this print if you're editing this Python code
37
15
    # to debug failures.
38
15
    # print e
39
15
)py",
40
15
                                        "fuzzer", Py_file_input);
41
15
  return 0;
42
15
}
43
44
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
45
2.10k
{
46
2.10k
  PyObject *text =
47
2.10k
      PyBytes_FromStringAndSize((const char *)Data, (Py_ssize_t)Size);
48
2.10k
  PyObject *locals = PyDict_New();
49
2.10k
  PyDict_SetItemString(locals, "data", text);
50
2.10k
  PyObject *res = PyEval_EvalCode(code, contrib::pyglobals(), locals);
51
2.10k
  if (!res) {
52
0
    PyErr_Print();
53
0
  }
54
2.10k
  Py_XDECREF(res);
55
2.10k
  Py_DECREF(locals);
56
2.10k
  Py_DECREF(text);
57
2.10k
  return 0; // Non-zero return values are reserved for future use.
58
2.10k
}
59
}