Ada 3.4.4
Fast spec-compliant URL parser
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
10extern "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}
Main header for the Ada URL parser library.
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
Definition can_parse.cc:10
bool can_parse(std::string_view input, const std::string_view *base_input=nullptr)
ada_warn_unused ada::result< result_type > parse(std::string_view input, const result_type *base_url=nullptr)