From 1859c432c8260cec21309291cbfee174bd09c1c1 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 21 Oct 2022 00:01:11 +0200 Subject: [PATCH] Fix chunked --- src/lib/fastcgi.c | 6 ++++-- src/lib/sock.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/lib/fastcgi.c b/src/lib/fastcgi.c index 9645f2b..e5a8dba 100644 --- a/src/lib/fastcgi.c +++ b/src/lib/fastcgi.c @@ -625,7 +625,7 @@ int fastcgi_receive_chunked(fastcgi_conn *conn, sock *client) { unsigned long next_len; char tmp[16]; - do { + while (1) { ret = sock_recv(client, tmp, sizeof(tmp), MSG_PEEK); if (ret < 0) return -2; next_len = strtol(tmp, NULL, 16); @@ -633,9 +633,11 @@ int fastcgi_receive_chunked(fastcgi_conn *conn, sock *client) { ret = sock_recv(client, tmp, ptr - tmp + 2, 0); if (ret < 0) return -2; + if (next_len <= 0) break; + ret = fastcgi_receive(conn, client, next_len); if (ret < 0) return ret; - } while (next_len > 0); + } return 0; } diff --git a/src/lib/sock.c b/src/lib/sock.c index 9b4ac84..e164680 100644 --- a/src/lib/sock.c +++ b/src/lib/sock.c @@ -109,7 +109,7 @@ long sock_splice_chunked(sock *dst, sock *src, void *buf, unsigned long buf_len) unsigned long next_len; char tmp[16]; - do { + while (1) { ret = sock_recv(src, tmp, sizeof(tmp), MSG_PEEK); if (ret < 0) return -2; next_len = strtol(tmp, NULL, 16); @@ -117,9 +117,11 @@ long sock_splice_chunked(sock *dst, sock *src, void *buf, unsigned long buf_len) ret = sock_recv(src, tmp, ptr - tmp + 2, 0); if (ret < 0) return -2; + if (next_len <= 0) break; + ret = sock_splice(dst, src, buf, buf_len, next_len); if (ret < 0) return ret; - } while (next_len > 0); + } return (long) send_len; }