diff --git a/chttp.c b/chttp.c index b663c71..7e28a56 100644 --- a/chttp.c +++ b/chttp.c @@ -3885,9 +3885,12 @@ void http_request_builder_url(HTTP_RequestBuilder builder, return; // TODO: set error memcpy(url_copy, url.ptr, url.len); - // Parse the copied URL (url.scheme.ptr will point to url_copy) - if (http_parse_url(url_copy, url.len, &conn->url) != 1) { - free(url_copy); + conn->url_buffer.ptr = url_copy; + conn->url_buffer.len = url.len; + + // Parse the copied URL (all url.* pointers will reference url_buffer) + if (http_parse_url(conn->url_buffer.ptr, conn->url_buffer.len, &conn->url) != 1) { + free(conn->url_buffer.ptr); return; // TODO: set error } @@ -4054,7 +4057,7 @@ int http_request_builder_send(HTTP_RequestBuilder builder) error: conn->state = HTTP_CLIENT_CONN_FREE; - free((void*)conn->url.scheme.ptr); + free(conn->url_buffer.ptr); byte_queue_free(&conn->input); byte_queue_free(&conn->output); client->num_conns--; @@ -4302,7 +4305,7 @@ void http_free_response(HTTP_Response *response) return; conn->state = HTTP_CLIENT_CONN_FREE; - free((void*)conn->url.scheme.ptr); + free(conn->url_buffer.ptr); byte_queue_free(&conn->input); byte_queue_free(&conn->output); client->num_conns--; diff --git a/chttp.h b/chttp.h index 4ece1a3..f1d71ff 100644 --- a/chttp.h +++ b/chttp.h @@ -894,8 +894,11 @@ typedef struct { // TODO: comment bool trace_bytes; + // Allocated copy of the URL string + HTTP_String url_buffer; + // Parsed URL for connection establishment - // url.scheme.ptr points to the allocated copy of the URL string + // All url.* pointers reference into url_buffer HTTP_URL url; // Data received from the server diff --git a/src/client.c b/src/client.c index 9bf5d84..43e9a66 100644 --- a/src/client.c +++ b/src/client.c @@ -224,9 +224,12 @@ void http_request_builder_url(HTTP_RequestBuilder builder, return; // TODO: set error memcpy(url_copy, url.ptr, url.len); - // Parse the copied URL (url.scheme.ptr will point to url_copy) - if (http_parse_url(url_copy, url.len, &conn->url) != 1) { - free(url_copy); + conn->url_buffer.ptr = url_copy; + conn->url_buffer.len = url.len; + + // Parse the copied URL (all url.* pointers will reference url_buffer) + if (http_parse_url(conn->url_buffer.ptr, conn->url_buffer.len, &conn->url) != 1) { + free(conn->url_buffer.ptr); return; // TODO: set error } @@ -393,7 +396,7 @@ int http_request_builder_send(HTTP_RequestBuilder builder) error: conn->state = HTTP_CLIENT_CONN_FREE; - free((void*)conn->url.scheme.ptr); + free(conn->url_buffer.ptr); byte_queue_free(&conn->input); byte_queue_free(&conn->output); client->num_conns--; @@ -641,7 +644,7 @@ void http_free_response(HTTP_Response *response) return; conn->state = HTTP_CLIENT_CONN_FREE; - free((void*)conn->url.scheme.ptr); + free(conn->url_buffer.ptr); byte_queue_free(&conn->input); byte_queue_free(&conn->output); client->num_conns--; diff --git a/src/client.h b/src/client.h index 6160bbe..167d7d2 100644 --- a/src/client.h +++ b/src/client.h @@ -75,8 +75,11 @@ typedef struct { // TODO: comment bool trace_bytes; + // Allocated copy of the URL string + HTTP_String url_buffer; + // Parsed URL for connection establishment - // url.scheme.ptr points to the allocated copy of the URL string + // All url.* pointers reference into url_buffer HTTP_URL url; // Data received from the server