MCPcopy Create free account
hub / github.com/apache/brpc / LLVMFuzzerTestOneInput

Function LLVMFuzzerTestOneInput

test/fuzzing/fuzz_http_parser.cpp:33–97  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31static int on_message_complete_cb(brpc::http_parser* p) { return 0; }
32
33extern "C" int
34LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
35{
36 if (size < kMinInputLength || size > kMaxInputLength){
37 return 1;
38 }
39
40 // Use first byte to select mode
41 uint8_t mode = data[0] % 4;
42 const uint8_t *payload = data + 1;
43 size_t payload_size = size - 1;
44
45 switch (mode) {
46 case 0: {
47 // Fuzz low-level HTTP request parsing
48 brpc::http_parser parser;
49 brpc::http_parser_init(&parser, brpc::HTTP_REQUEST);
50 brpc::http_parser_settings settings;
51 memset(&settings, 0, sizeof(settings));
52 settings.on_url = on_url_cb;
53 settings.on_header_field = on_header_field_cb;
54 settings.on_header_value = on_header_value_cb;
55 settings.on_body = on_body_cb;
56 settings.on_message_begin = on_message_begin_cb;
57 settings.on_headers_complete = on_headers_complete_cb;
58 settings.on_message_complete = on_message_complete_cb;
59 brpc::http_parser_execute(&parser, &settings,
60 reinterpret_cast<const char*>(payload), payload_size);
61 break;
62 }
63 case 1: {
64 // Fuzz low-level HTTP response parsing
65 brpc::http_parser parser;
66 brpc::http_parser_init(&parser, brpc::HTTP_RESPONSE);
67 brpc::http_parser_settings settings;
68 memset(&settings, 0, sizeof(settings));
69 settings.on_url = on_url_cb;
70 settings.on_header_field = on_header_field_cb;
71 settings.on_header_value = on_header_value_cb;
72 settings.on_body = on_body_cb;
73 settings.on_message_begin = on_message_begin_cb;
74 settings.on_headers_complete = on_headers_complete_cb;
75 settings.on_message_complete = on_message_complete_cb;
76 brpc::http_parser_execute(&parser, &settings,
77 reinterpret_cast<const char*>(payload), payload_size);
78 break;
79 }
80 case 2: {
81 // Fuzz URL parsing (not connect)
82 brpc::http_parser_url u;
83 brpc::http_parser_parse_url(reinterpret_cast<const char*>(payload),
84 payload_size, 0, &u);
85 break;
86 }
87 case 3: {
88 // Fuzz URL parsing (connect mode)
89 brpc::http_parser_url u;
90 brpc::http_parser_parse_url(reinterpret_cast<const char*>(payload),

Callers

nothing calls this directly

Calls 3

http_parser_initFunction · 0.85
http_parser_executeFunction · 0.85
http_parser_parse_urlFunction · 0.85

Tested by

no test coverage detected