CLEANUP: h1: Remove now useless h1_parse_cont_len_header() function
Since the commit "MINOR: hlua/h1: Use http_parse_cont_len_header() to parse content-length value", this function is no longer used. So it can be safely removed.
This commit is contained in:
parent
9e05c14a41
commit
a56feffc6f
@ -158,7 +158,6 @@ int h1_headers_to_hdr_list(char *start, const char *stop,
|
|||||||
struct http_hdr *hdr, unsigned int hdr_num,
|
struct http_hdr *hdr, unsigned int hdr_num,
|
||||||
struct h1m *h1m, union h1_sl *slp);
|
struct h1m *h1m, union h1_sl *slp);
|
||||||
|
|
||||||
int h1_parse_cont_len_header(struct h1m *h1m, struct ist *value);
|
|
||||||
int h1_parse_xfer_enc_header(struct h1m *h1m, struct ist value);
|
int h1_parse_xfer_enc_header(struct h1m *h1m, struct ist value);
|
||||||
void h1_parse_connection_header(struct h1m *h1m, struct ist *value);
|
void h1_parse_connection_header(struct h1m *h1m, struct ist *value);
|
||||||
void h1_parse_upgrade_header(struct h1m *h1m, struct ist value);
|
void h1_parse_upgrade_header(struct h1m *h1m, struct ist value);
|
||||||
|
94
src/h1.c
94
src/h1.c
@ -27,100 +27,6 @@
|
|||||||
*/
|
*/
|
||||||
int h1_do_not_close_on_insecure_t_e = 0;
|
int h1_do_not_close_on_insecure_t_e = 0;
|
||||||
|
|
||||||
/* Parse the Content-Length header field of an HTTP/1 request. The function
|
|
||||||
* checks all possible occurrences of a comma-delimited value, and verifies
|
|
||||||
* if any of them doesn't match a previous value. It returns <0 if a value
|
|
||||||
* differs, 0 if the whole header can be dropped (i.e. already known), or >0
|
|
||||||
* if the value can be indexed (first one). In the last case, the value might
|
|
||||||
* be adjusted and the caller must only add the updated value.
|
|
||||||
*/
|
|
||||||
int h1_parse_cont_len_header(struct h1m *h1m, struct ist *value)
|
|
||||||
{
|
|
||||||
char *e, *n;
|
|
||||||
long long cl;
|
|
||||||
int not_first = !!(h1m->flags & H1_MF_CLEN);
|
|
||||||
struct ist word;
|
|
||||||
|
|
||||||
word.ptr = value->ptr;
|
|
||||||
e = value->ptr + value->len;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
if (word.ptr >= e) {
|
|
||||||
/* empty header or empty value */
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* skip leading delimiter and blanks */
|
|
||||||
if (unlikely(HTTP_IS_LWS(*word.ptr))) {
|
|
||||||
word.ptr++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* digits only now */
|
|
||||||
for (cl = 0, n = word.ptr; n < e; n++) {
|
|
||||||
unsigned int c = *n - '0';
|
|
||||||
if (unlikely(c > 9)) {
|
|
||||||
/* non-digit */
|
|
||||||
if (unlikely(n == word.ptr)) // spaces only
|
|
||||||
goto fail;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unlikely(!cl && n > word.ptr)) {
|
|
||||||
/* There was a leading zero before this digit,
|
|
||||||
* let's trim it.
|
|
||||||
*/
|
|
||||||
word.ptr = n;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unlikely(cl > ULLONG_MAX / 10ULL))
|
|
||||||
goto fail; /* multiply overflow */
|
|
||||||
cl = cl * 10ULL;
|
|
||||||
if (unlikely(cl + c < cl))
|
|
||||||
goto fail; /* addition overflow */
|
|
||||||
cl = cl + c;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* keep a copy of the exact cleaned value */
|
|
||||||
word.len = n - word.ptr;
|
|
||||||
|
|
||||||
/* skip trailing LWS till next comma or EOL */
|
|
||||||
for (; n < e; n++) {
|
|
||||||
if (!HTTP_IS_LWS(*n)) {
|
|
||||||
if (unlikely(*n != ','))
|
|
||||||
goto fail;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if duplicate, must be equal */
|
|
||||||
if (h1m->flags & H1_MF_CLEN && cl != h1m->body_len)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
/* OK, store this result as the one to be indexed */
|
|
||||||
h1m->flags |= H1_MF_CLEN;
|
|
||||||
h1m->curr_len = h1m->body_len = cl;
|
|
||||||
*value = word;
|
|
||||||
|
|
||||||
/* Now either n==e and we're done, or n points to the comma,
|
|
||||||
* and we skip it and continue.
|
|
||||||
*/
|
|
||||||
if (n++ == e)
|
|
||||||
break;
|
|
||||||
|
|
||||||
word.ptr = n;
|
|
||||||
}
|
|
||||||
/* here we've reached the end with a single value or a series of
|
|
||||||
* identical values, all matching previous series if any. The last
|
|
||||||
* parsed value was sent back into <value>. We just have to decide
|
|
||||||
* if this occurrence has to be indexed (it's the first one) or
|
|
||||||
* silently skipped (it's not the first one)
|
|
||||||
*/
|
|
||||||
return !not_first;
|
|
||||||
fail:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse the Transfer-Encoding: header field of an HTTP/1 request, looking for
|
/* Parse the Transfer-Encoding: header field of an HTTP/1 request, looking for
|
||||||
* "chunked" encoding to perform some checks (it must be the last encoding for
|
* "chunked" encoding to perform some checks (it must be the last encoding for
|
||||||
* the request and must not be performed twice for any message). The
|
* the request and must not be performed twice for any message). The
|
||||||
|
Loading…
x
Reference in New Issue
Block a user