--- a/src/server/proxy/httpclient.c Tue Feb 17 22:05:30 2026 +0100 +++ b/src/server/proxy/httpclient.c Wed Feb 18 10:53:55 2026 +0100 @@ -738,11 +738,6 @@ // because we are using chunked transfer encoding, the result buffer // (buf) should contain more than 128 bytes (additional chunk headers) CX_TEST_ASSERT(buf.pos > 128); - // check for chunk headers - // TODO - //CX_TEST_ASSERT(!cx_strcmp(cx_strn(buf.space, 4), "10\r\n")); - - size_t offset = buf.pos; // change chunk size to 128 req.max_reads = 9999; @@ -762,24 +757,30 @@ CX_TEST_ASSERT(req.cur_reads < req.max_reads); //CX_TEST_ASSERT(buf.size == 1084 + 5); - // TODO - /* - // check chunks - char testbuf[128]; - memset(testbuf, 'x', 128); - cxstring x1 = cx_strn(buf.space + 296, 128); - CX_TEST_ASSERT(!cx_strcmp(x1, cx_strn(testbuf, 128))); - cxstring x2 = cx_strn(buf.space + 560, 128); - CX_TEST_ASSERT(!cx_strcmp(x2, cx_strn(testbuf, 128))); - cxstring x3 = cx_strn(buf.space + 824, 128); - CX_TEST_ASSERT(!cx_strcmp(x3, cx_strn(testbuf, 128))); - memset(testbuf, 'y', 128); - cxstring y1 = cx_strn(buf.space + 164, 128); - CX_TEST_ASSERT(!cx_strcmp(y1, cx_strn(testbuf, 128))); - cxstring z1 = cx_strn(buf.space + 428, 128); - memset(testbuf, 'z', 128); - CX_TEST_ASSERT(!cx_strcmp(z1, cx_strn(testbuf, 128))); - */ + // verify chunks + char test_request_body[1024]; + memset(test_request_body, 0, 1024); + + int pos = 0; + int chunklen = 0; + char *str = buf.space; + while(str < buf.space + buf.size) { + cxstring chunkheader = cx_strn(str, 2); + if(!cx_strcmp(chunkheader, "0\r")) { + chunkheader.length = 1; + } + int ret = cx_strtoi(chunkheader, &chunklen, 16); + CX_TEST_ASSERT(ret == 0); + if(chunklen == 0) { + break; + } + + char *data = str + 4; + memcpy(test_request_body + pos, data, chunklen); + pos += chunklen; + str = data + chunklen; + } + CX_TEST_ASSERT(!memcmp(request_body, test_request_body, 1024)); // cleanup close(fds[0]);