/src/cpp-httplib/test/fuzzing/header_parser_fuzzer.cc
Line | Count | Source |
1 | | #include <cstdint> |
2 | | #include <cstring> |
3 | | #include <string> |
4 | | |
5 | | #include <httplib.h> |
6 | | |
7 | 3.36k | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
8 | 3.36k | if (size < 2) return 0; |
9 | | |
10 | 3.35k | uint8_t selector = data[0]; |
11 | 3.35k | const char *payload = reinterpret_cast<const char *>(data + 1); |
12 | 3.35k | size_t payload_size = size - 1; |
13 | 3.35k | std::string input(payload, payload_size); |
14 | | |
15 | 3.35k | switch (selector % 7) { |
16 | 479 | case 0: { |
17 | | // parse_range_header |
18 | 479 | httplib::Ranges ranges; |
19 | 479 | httplib::detail::parse_range_header(input, ranges); |
20 | 479 | break; |
21 | 0 | } |
22 | 1.41k | case 1: { |
23 | | // parse_accept_header |
24 | 1.41k | std::vector<std::string> content_types; |
25 | 1.41k | httplib::detail::parse_accept_header(input, content_types); |
26 | 1.41k | break; |
27 | 0 | } |
28 | 56 | case 2: { |
29 | | // extract_media_type with params |
30 | 56 | std::map<std::string, std::string> params; |
31 | 56 | httplib::detail::extract_media_type(input, ¶ms); |
32 | 56 | break; |
33 | 0 | } |
34 | 195 | case 3: { |
35 | | // parse_multipart_boundary |
36 | 195 | std::string boundary; |
37 | 195 | httplib::detail::parse_multipart_boundary(input, boundary); |
38 | 195 | break; |
39 | 0 | } |
40 | 548 | case 4: { |
41 | | // parse_disposition_params |
42 | 548 | httplib::Params params; |
43 | 548 | httplib::detail::parse_disposition_params(input, params); |
44 | 548 | break; |
45 | 0 | } |
46 | 3 | case 5: { |
47 | | // parse_http_date |
48 | 3 | httplib::detail::parse_http_date(input); |
49 | 3 | break; |
50 | 0 | } |
51 | 660 | case 6: { |
52 | | // can_compress_content_type |
53 | 660 | httplib::detail::can_compress_content_type(input); |
54 | 660 | break; |
55 | 0 | } |
56 | 3.35k | } |
57 | | |
58 | 3.35k | return 0; |
59 | 3.35k | } |