Coverage Report

Created: 2026-04-27 07:02

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/mercurial/contrib/fuzz/xdiff.cc
Line
Count
Source
1
/*
2
 * xdiff.cc - fuzzer harness for thirdparty/xdiff
3
 *
4
 * Copyright 2018, Google Inc.
5
 *
6
 * This software may be used and distributed according to the terms of
7
 * the GNU General Public License, incorporated herein by reference.
8
 */
9
#include "thirdparty/xdiff/xdiff.h"
10
#include <inttypes.h>
11
#include <stdlib.h>
12
13
#include "FuzzedDataProvider.h"
14
15
extern "C" {
16
17
int LLVMFuzzerInitialize(int *argc, char ***argv)
18
16
{
19
16
  return 0;
20
16
}
21
22
int hunk_consumer(long a1, long a2, long b1, long b2, void *priv)
23
70.9k
{
24
  // TODO: probably also test returning -1 from this when things break?
25
70.9k
  return 0;
26
70.9k
}
27
28
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
29
2.89k
{
30
  // Don't allow fuzzer inputs larger than 100k, since we'll just bog
31
  // down and not accomplish much.
32
2.89k
  if (Size > 100000) {
33
3
    return 0;
34
3
  }
35
2.89k
  FuzzedDataProvider provider(Data, Size);
36
2.89k
  std::string left = provider.ConsumeRandomLengthString(Size);
37
2.89k
  std::string right = provider.ConsumeRemainingBytesAsString();
38
2.89k
  mmfile_t a, b;
39
40
2.89k
  a.ptr = (char *)left.c_str();
41
2.89k
  a.size = left.size();
42
2.89k
  b.ptr = (char *)right.c_str();
43
2.89k
  b.size = right.size();
44
2.89k
  xpparam_t xpp = {
45
2.89k
      XDF_INDENT_HEURISTIC, /* flags */
46
2.89k
  };
47
2.89k
  xdemitconf_t xecfg = {
48
2.89k
      XDL_EMIT_BDIFFHUNK, /* flags */
49
2.89k
      hunk_consumer,      /* hunk_consume_func */
50
2.89k
  };
51
2.89k
  xdemitcb_t ecb = {
52
      NULL, /* priv */
53
2.89k
  };
54
2.89k
  xdl_diff(&a, &b, &xpp, &xecfg, &ecb);
55
2.89k
  return 0; // Non-zero return values are reserved for future use.
56
2.89k
}
57
58
} // extern "C"