From 90a9c8706facf1ee2a5b253bbbb5ddc1bf0a63da Mon Sep 17 00:00:00 2001 From: amelia squires Date: Mon, 8 Sep 2025 21:18:33 -0500 Subject: allow empty headers + tests --- src/net.c | 7 ++++--- tests/units/net-query.lua | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 tests/units/net-query.lua diff --git a/src/net.c b/src/net.c index 53a5ceb..ba7a134 100644 --- a/src/net.c +++ b/src/net.c @@ -565,6 +565,7 @@ int _request(lua_State* L, struct request_state* state){ char* request = calloc(cont_len + header->len + strlen(host) + strlen(path) + 512, sizeof * request); sprintf(request, "%s %s HTTP/1.1\r\nHost: %s\r\nConnection: Close%s\r\n\r\n%s", action, path, host, header->c, cont); + str_free(header); int s = _request_write(state, request, strlen(request)); @@ -597,7 +598,7 @@ int _request(lua_State* L, struct request_state* state){ parray_t* owo = NULL; //handle errors - int err = parse_header(a->c, header_eof - a->c, &owo); + int err = parse_header(a->c, header_eof - a->c + 2, &owo); assert(err == 0); for(int i = 0; i != owo->len; i++){ @@ -669,7 +670,7 @@ void path_parse(struct net_path_t* path, str* raw){ str** reading = &path->path; - for(int i = 0; i <= raw->len; i++){ + for(int i = 0; i <= raw->len - 1; i++){ if(raw->len - i > 1){ switch(raw->c[i]){ case '&': @@ -720,7 +721,7 @@ void* handle_client(void *_arg){ parray_t* table; //checks for a valid header - int val = parse_header(buffer, header_eof, &table); + int val = parse_header(buffer, header_eof + 2, &table); if(val == -2) net_error(client_fd, 414); diff --git a/tests/units/net-query.lua b/tests/units/net-query.lua new file mode 100644 index 0000000..4115172 --- /dev/null +++ b/tests/units/net-query.lua @@ -0,0 +1,25 @@ +PORT = 5552 +local a = 255 +local b = 992 + +local net = llby.thread.async(function(tres) + local c = 943 + llby.net.listen(function(server) + server:GET("/", function(res, req) + res:send(tostring(tonumber(req.query.t1) * a + tonumber(req.query.t2) * b + tonumber(req.query.t3) * c)) + end) + end, PORT) +end) + +local t1 = 293 +local t2 = 928 +local t3 = 777 + +--should wait for the server to start +os.execute("sleep 0.1") + +local s = llby.net.request(string.format("localhost:%i/?t1=%i&t2=%i&t3=%i", PORT, t1, t2, t3)) +local num = s.content:read() + +net:close() +return tonumber(num) == (t1 * a + t2 * b + t3 * 943) -- cgit v1.2.3