naett.c

Tiny cross-platform HTTP / HTTPS client library in C.
git clone git://git.finwo.net/lib/naett.c
Log | Files | Refs | README | LICENSE

commit f7dd37bb45bff33f0a14833b74b8e5b4d30791d2
parent 1e8ce8525227056d979829289a8495fadc13cf37
Author: Erik Agsjö <erik.agsjo@gmail.com>
Date:   Sun, 12 Dec 2021 16:19:26 +0100

No more double (triple) free

Diffstat:
Msrc/naett_core.c | 32+++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/src/naett_core.c b/src/naett_core.c @@ -229,6 +229,8 @@ void setupDefaultRW(InternalRequest* req) { } naettReq* naettRequest_va(const char* url, int numArgs, ...) { + assert(url != NULL); + va_list args; InternalOption* option; naettAlloc(InternalRequest, req); @@ -253,6 +255,9 @@ naettReq* naettRequest_va(const char* url, int numArgs, ...) { } naettReq* naettRequestWithOptions(const char* url, int numOptions, const naettOption** options) { + assert(url != NULL); + assert(numOptions == 0 || options != NULL); + naettAlloc(InternalRequest, req); initRequest(req, url); @@ -274,6 +279,8 @@ naettReq* naettRequestWithOptions(const char* url, int numOptions, const naettOp naettRes* naettMake(naettReq* request) { assert(initialized); + assert(request != NULL); + InternalRequest* req = (InternalRequest*)request; naettAlloc(InternalResponse, res); res->request = req; @@ -287,12 +294,18 @@ naettRes* naettMake(naettReq* request) { } const void* naettGetBody(naettRes* response, int* size) { + assert(response != NULL); + assert(size != NULL); + InternalResponse* res = (InternalResponse*)response; *size = res->body.size; return res->body.data; } const char* naettGetHeader(naettRes* response, const char* name) { + assert(response != NULL); + assert(name != NULL); + InternalResponse* res = (InternalResponse*)response; KVLink* node = res->headers; while (node) { @@ -305,6 +318,9 @@ const char* naettGetHeader(naettRes* response, const char* name) { } void naettListHeaders(naettRes* response, naettHeaderLister lister, void* userData) { + assert(response != NULL); + assert(lister != NULL); + InternalResponse* res = (InternalResponse*)response; KVLink* node = res->headers; while (node) { @@ -316,16 +332,19 @@ void naettListHeaders(naettRes* response, naettHeaderLister lister, void* userDa } naettReq* naettGetRequest(naettRes* response) { + assert(response != NULL); InternalResponse* res = (InternalResponse*)response; return (naettReq*) res->request; } int naettComplete(const naettRes* response) { + assert(response != NULL); InternalResponse* res = (InternalResponse*)response; return res->complete; } int naettGetStatus(const naettRes* response) { + assert(response != NULL); InternalResponse* res = (InternalResponse*)response; return res->code; } @@ -341,27 +360,22 @@ static void freeKVList(KVLink* node) { } void naettFree(naettReq* request) { + assert(request != NULL); + InternalRequest* req = (InternalRequest*)request; naettPlatformFreeRequest(req); - if (req->options.body.data != NULL) { - free(req->options.body.data); - } KVLink* node = req->options.headers; freeKVList(node); - if (req->options.body.data != NULL) { - free(req->options.body.data); - } free((void*)req->url); free(request); } void naettClose(naettRes* response) { + assert(response != NULL); + InternalResponse* res = (InternalResponse*)response; res->request = NULL; naettPlatformCloseResponse(res); - if (res->body.data != NULL) { - free(res->body.data); - } KVLink* node = res->headers; freeKVList(node); free(response);