refactor ngx_http_arg() using ngx_strcasestrn(),
back out zero termination introduced in r2138
Igor Sysoev
13 years ago
1485 | 1485 | ngx_int_t |
1486 | 1486 | ngx_http_arg(ngx_http_request_t *r, u_char *name, size_t len, ngx_str_t *value) |
1487 | 1487 | { |
1488 | u_char *p; | |
1488 | u_char *p, *last; | |
1489 | 1489 | |
1490 | 1490 | if (r->args.len == 0) { |
1491 | 1491 | return NGX_DECLINED; |
1492 | 1492 | } |
1493 | 1493 | |
1494 | for (p = r->args.data; *p && *p != ' '; p++) { | |
1495 | ||
1496 | /* | |
1497 | * although r->args.data is not null-terminated by itself, | |
1498 | * however, there is null in the end of request line | |
1499 | */ | |
1500 | ||
1501 | p = ngx_strcasestrn(p, (char *) name, len - 1); | |
1494 | p = r->args.data; | |
1495 | last = p + r->args.len; | |
1496 | ||
1497 | for ( /* void */ ; p < last; p++) { | |
1498 | ||
1499 | /* we need '=' after name, so drop one char from last */ | |
1500 | ||
1501 | p = ngx_strlcasestrn(p, last - 1, name, len - 1); | |
1502 | 1502 | |
1503 | 1503 | if (p == NULL) { |
1504 | 1504 | return NGX_DECLINED; |
1508 | 1508 | |
1509 | 1509 | value->data = p + len + 1; |
1510 | 1510 | |
1511 | p = (u_char *) ngx_strchr(p, '&'); | |
1511 | p = ngx_strlchr(p, last, '&'); | |
1512 | 1512 | |
1513 | 1513 | if (p == NULL) { |
1514 | 1514 | p = r->args.data + r->args.len; |