Ada
3.4.4
Fast spec-compliant URL parser
Toggle main menu visibility
Loading...
Searching...
No Matches
can_parse.cc
Go to the documentation of this file.
1
#include <fuzzer/FuzzedDataProvider.h>
2
3
#include <cstdio>
4
#include <memory>
5
#include <string>
6
7
#include "
ada.cpp
"
8
#include "
ada.h
"
9
10
extern
"C"
int
LLVMFuzzerTestOneInput
(
const
uint8_t *data,
size_t
size) {
11
FuzzedDataProvider fdp(data, size);
12
std::string source = fdp.ConsumeRandomLengthString(256);
13
std::string base_source = fdp.ConsumeRandomLengthString(256);
14
21
22
// Test 1: can_parse(source) must equal
23
// parse<url_aggregator>(source).has_value()
24
bool
can_parse_result =
ada::can_parse
(source);
25
auto
parsed_agg =
ada::parse<ada::url_aggregator>
(source);
26
if
(can_parse_result != parsed_agg.has_value()) {
27
printf(
"can_parse vs parse<url_aggregator> inconsistency for: %s\n"
,
28
source.c_str());
29
abort();
30
}
31
32
// Test 2: can_parse(source) must also equal parse<url>(source).has_value()
33
auto
parsed_url =
ada::parse<ada::url>
(source);
34
if
(can_parse_result != parsed_url.has_value()) {
35
printf(
"can_parse vs parse<url> inconsistency for: %s\n"
, source.c_str());
36
abort();
37
}
38
39
// Test 3: can_parse with base
40
auto
base_source_view =
41
std::string_view(base_source.data(), base_source.length());
42
bool
can_parse_with_base =
ada::can_parse
(source, &base_source_view);
43
44
// Test 4: can_parse(source, base) must equal parse<url_aggregator>(source,
45
// base).has_value()
46
auto
base_agg =
ada::parse<ada::url_aggregator>
(base_source);
47
if
(base_agg) {
48
auto
parsed_with_base =
ada::parse<ada::url_aggregator>
(source, &*base_agg);
49
if
(can_parse_with_base != parsed_with_base.has_value()) {
50
printf(
51
"can_parse_with_base vs parse<url_aggregator> inconsistency for "
52
"source=%s base=%s\n"
,
53
source.c_str(), base_source.c_str());
54
abort();
55
}
56
}
57
58
// Test 5: Empty string edge cases
59
{
60
std::string_view empty_view;
61
bool
empty_can_parse =
ada::can_parse
(
""
);
62
auto
empty_parsed =
ada::parse<ada::url_aggregator>
(
""
);
63
if
(empty_can_parse != empty_parsed.has_value()) {
64
printf(
"Empty string can_parse inconsistency\n"
);
65
abort();
66
}
67
}
68
69
(void)can_parse_result;
70
(void)can_parse_with_base;
71
72
return
0;
73
}
ada.cpp
ada.h
Main header for the Ada URL parser library.
LLVMFuzzerTestOneInput
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
Definition
can_parse.cc:10
ada::can_parse
bool can_parse(std::string_view input, const std::string_view *base_input=nullptr)
Definition
implementation.cpp:51
ada::parse
ada_warn_unused ada::result< result_type > parse(std::string_view input, const result_type *base_url=nullptr)
Definition
implementation.cpp:13