From 4abcba8d8f28b59f1512c042d2850372ed606174 Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Sat, 12 Oct 2024 15:59:46 -0700 Subject: [PATCH] Make redbean Fetch() support longer responses Fixes #1315 --- test/net/http/parsehttpmessage_test.c | 19 +++++++++++++++++++ tool/net/fetch.inc | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/test/net/http/parsehttpmessage_test.c b/test/net/http/parsehttpmessage_test.c index 5a8412614..9b63cd629 100644 --- a/test/net/http/parsehttpmessage_test.c +++ b/test/net/http/parsehttpmessage_test.c @@ -17,6 +17,7 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/errno.h" +#include "libc/intrin/kprintf.h" #include "libc/log/check.h" #include "libc/mem/gc.h" #include "libc/mem/mem.h" @@ -434,6 +435,24 @@ TEST(ParseHttpResponse, testHttp100) { EXPECT_EQ(10, req->version); } +TEST(ParseHttpMessage, issue1315) { + static const char m[] = "\ +HTTP/1.1 200 OK\r\n\ +padding: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n\ +Date: Sat, 12 Oct 2024 22:50:55 GMT\r\n\ +Server: redbean/3.0.0\r\n\ +Connection: close\r\n\ +Content-Type: text/html; charset=utf-8\r\n\ +Referrer-Policy: no-referrer-when-downgrade\r\n\ +Content-Length: 12\r\n\ +\r\n"; + InitHttpMessage(req, kHttpResponse); + EXPECT_EQ(0, ParseHttpMessage(req, m, strlen(m) - 1, strlen(m))); + EXPECT_EQ(200, req->status); +} + +//////////////////////////////////////////////////////////////////////////////// + void DoTiniestHttpRequest(void) { static const char m[] = "\ GET /\r\n\ diff --git a/tool/net/fetch.inc b/tool/net/fetch.inc index 16fa05a56..8be5775b0 100644 --- a/tool/net/fetch.inc +++ b/tool/net/fetch.inc @@ -378,7 +378,7 @@ static int LuaFetch(lua_State *L) { WARNF("(ftch) HTTP client %s error", "EOF headers"); goto TransportError; } - rc = ParseHttpMessage(&msg, inbuf.p, inbuf.n, inbuf.c); + rc = ParseHttpMessage(&msg, inbuf.p, inbuf.n, SHRT_MAX); if (rc == -1) { WARNF("(ftch) HTTP client %s error", "ParseHttpMessage"); goto TransportError;