Coverage Report

Created: 2025-06-13 06:07

/src/poco/Foundation/fuzzing/MiscFuzzing.cpp
Line
Count
Source (jump to first uncovered line)
1
#include "Poco/URI.h"
2
#include "Poco/Path.h"
3
#include "Poco/UUID.h"
4
#include "Poco/UTF8String.h"
5
#include <fuzzer/FuzzedDataProvider.h>
6
7
using namespace Poco;
8
9
static void fuzzURI(FuzzedDataProvider& dataProvider)
10
2.50k
{
11
2.50k
  try
12
2.50k
  {
13
2.50k
    URI uri1(dataProvider.ConsumeRandomLengthString());
14
2.50k
    URI uri2(uri1, dataProvider.ConsumeRandomLengthString());
15
16
2.50k
    URI uri3(uri2);
17
2.50k
    uri3.normalize();
18
2.50k
    uri3.setQueryParameters(uri1.getQueryParameters());
19
2.50k
    uri2 = uri3.toString();
20
2.50k
  }
21
2.50k
  catch (const std::exception&)
22
2.50k
  {
23
347
  }
24
2.50k
}
25
26
static void fuzzPath(FuzzedDataProvider& dataProvider)
27
2.83k
{
28
2.83k
  try
29
2.83k
  {
30
2.83k
    Path path1;
31
2.83k
    path1.tryParse(dataProvider.ConsumeRandomLengthString());
32
33
2.83k
    Path path2(path1, Path(dataProvider.ConsumeRandomLengthString()));
34
2.83k
    Path path3 = path1.absolute();
35
2.83k
    Path path4 = Path::expand(dataProvider.ConsumeRandomLengthString());
36
37
2.83k
    const auto style1 = dataProvider.ConsumeIntegralInRange<char>(Path::PATH_UNIX, Path::PATH_GUESS);
38
2.83k
    const auto style2 = dataProvider.ConsumeIntegralInRange<char>(Path::PATH_UNIX, Path::PATH_GUESS);
39
2.83k
    path3.assign(path4.toString(static_cast<Path::Style>(style1)), static_cast<Path::Style>(style2));
40
2.83k
  }
41
2.83k
  catch (const std::exception&)
42
2.83k
  {
43
420
  }
44
2.83k
}
45
46
static void fuzzUUID(FuzzedDataProvider& dataProvider)
47
372
{
48
372
  try
49
372
  {
50
372
    UUID uuid1(dataProvider.ConsumeRandomLengthString());
51
372
    UUID uuid2(uuid1.toString());
52
372
    uuid2.tryParse(dataProvider.ConsumeRandomLengthString());
53
372
  }
54
372
  catch (const std::exception&)
55
372
  {
56
347
  }
57
372
}
58
59
static void fuzzUTF8String(FuzzedDataProvider& dataProvider)
60
1.78k
{
61
1.78k
  try
62
1.78k
  {
63
1.78k
    auto str1 = UTF8::unescape(dataProvider.ConsumeRandomLengthString());
64
1.78k
    auto str2 = UTF8::escape(str1);
65
66
1.78k
    UTF8::toUpperInPlace(str1);
67
1.78k
    UTF8::toLowerInPlace(str2);
68
1.78k
  }
69
1.78k
  catch (const std::exception&)
70
1.78k
  {
71
0
  }
72
1.78k
}
73
74
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
75
7.49k
{
76
7.49k
  FuzzedDataProvider dataProvider(data, size);
77
78
7.49k
  switch (dataProvider.ConsumeIntegral<char>())
79
7.49k
  {
80
2.50k
  case 0:
81
2.50k
    fuzzURI(dataProvider);
82
2.50k
    break;
83
2.83k
  case 1:
84
2.83k
    fuzzPath(dataProvider);
85
2.83k
    break;
86
372
  case 2:
87
372
    fuzzUUID(dataProvider);
88
372
    break;
89
1.78k
  case 3:
90
1.78k
    fuzzUTF8String(dataProvider);
91
1.78k
    break;
92
7.49k
  }
93
94
7.49k
  return 0;
95
7.49k
}