diff options
author | Jo-Philipp Wich <jo@mein.io> | 2022-10-31 00:53:29 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2022-10-31 01:03:41 +0100 |
commit | 23977554d9694d025eada50a5547e99ee1be7838 (patch) | |
tree | e490da9902fe9c9e829a75bececca540ee9d78bc | |
parent | e3395cd90bed9b7b9fc319e79528fedcc0d947fe (diff) | |
download | uhttpd2-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.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -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; } |