summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-10-31 00:53:29 +0100
committerJo-Philipp Wich <jo@mein.io>2022-10-31 01:03:41 +0100
commit23977554d9694d025eada50a5547e99ee1be7838 (patch)
treee490da9902fe9c9e829a75bececca540ee9d78bc
parente3395cd90bed9b7b9fc319e79528fedcc0d947fe (diff)
downloaduhttpd2-23977554d9694d025eada50a5547e99ee1be7838.tar.gz
client: fix incorrectly emitting HTTP 413 for certain content lengths
The existing logic for checking overlong request headers did not take into account that when the request body content length is a multiple of 4096, the request handling state might transition directly from CLIENT_STATE_HEADER or CLIENT_STATE_DATA to CLIENT_STATE_DONE, in which case we must not emit a stray HTTP 413 error. Fixes: https://github.com/openwrt/luci/issues/2051 Signed-off-by: Liangbin Lian <jjm2473@gmail.com> [Change commit subject, add commit message, swap order of conditions] Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--client.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/client.c b/client.c
index 06336eb..c037cc7 100644
--- a/client.c
+++ b/client.c
@@ -532,7 +532,8 @@ void uh_client_read_cb(struct client *cl)
if (!read_cbs[cl->state](cl, str, len)) {
if (len == us->r.buffer_len &&
- cl->state != CLIENT_STATE_DATA)
+ cl->state != CLIENT_STATE_DATA &&
+ cl->state != CLIENT_STATE_DONE)
uh_header_error(cl, 413, "Request Entity Too Large");
break;
}