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

Function http_parser_parse_url

src/brpc/details/http_parser.cpp:2342–2438  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2340}
2341
2342int
2343http_parser_parse_url(const char *buf, size_t buflen, int is_connect,
2344 struct http_parser_url *u)
2345{
2346 enum state s;
2347 const char *p;
2348 enum http_parser_url_fields uf, old_uf;
2349 int found_at = 0;
2350
2351 u->port = u->field_set = 0;
2352 s = is_connect ? s_req_server_start : s_req_spaces_before_url;
2353 old_uf = UF_MAX;
2354
2355 for (p = buf; p < buf + buflen; p++) {
2356 s = parse_url_char(s, *p);
2357
2358 /* Figure out the next field that we're operating on */
2359 switch (s) {
2360 case s_dead:
2361 return 1;
2362
2363 /* Skip delimeters */
2364 case s_req_scheme_slash:
2365 case s_req_scheme_slash_slash:
2366 case s_req_server_start:
2367 case s_req_query_string_start:
2368 case s_req_fragment_start:
2369 continue;
2370
2371 case s_req_scheme:
2372 uf = UF_SCHEME;
2373 break;
2374
2375 case s_req_server_with_at:
2376 found_at = 1;
2377 // fall through
2378 case s_req_server:
2379 uf = UF_HOST;
2380 break;
2381
2382 case s_req_path:
2383 uf = UF_PATH;
2384 break;
2385
2386 case s_req_query_string:
2387 uf = UF_QUERY;
2388 break;
2389
2390 case s_req_fragment:
2391 uf = UF_FRAGMENT;
2392 break;
2393
2394 default:
2395 assert(!"Unexpected state");
2396 return 1;
2397 }
2398
2399 /* Nothing's changed; soldier on */

Callers 1

LLVMFuzzerTestOneInputFunction · 0.85

Calls 2

parse_url_charFunction · 0.85
http_parse_hostFunction · 0.85

Tested by

no test coverage detected