ngx_http_request_body_chunked_filter(ngx_http_request_t *r, ngx_chain_t *in)
{
size_t size;
+ u_char *p;
ngx_int_t rc;
ngx_buf_t *b;
ngx_chain_t *cl, *out, *tl, **ll;
for (cl = in; cl; cl = cl->next) {
b = NULL;
+ p = cl->buf->pos;
for ( ;; ) {
return NGX_HTTP_BAD_REQUEST;
}
+
+ rb->received += cl->buf->pos - p;
+
+ if (rb->received / 8 > r->headers_in.content_length_n + 1048576) {
+ ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
+ "client sent too large chunked body "
+ "overhead: %O+%O bytes",
+ r->headers_in.content_length_n,
+ rb->received - r->headers_in.content_length_n);
+
+ return NGX_HTTP_BAD_REQUEST;
+ }
}
rc = ngx_http_top_request_body_filter(r, out);