mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 10:47:19 +02:00
Merge branch 'bugfix/http_cached_data_in_redirection_v5.0' into 'release/v5.0'
esp_http_client: free cached data in case connection gets closed for redirection (v5.0) See merge request espressif/esp-idf!20791
This commit is contained in:
@ -766,6 +766,17 @@ error:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void esp_http_client_cached_buf_cleanup(esp_http_buffer_t *res_buffer)
|
||||||
|
{
|
||||||
|
/* Free cached data if any, that was received during fetch header stage */
|
||||||
|
if (res_buffer && res_buffer->orig_raw_data) {
|
||||||
|
free(res_buffer->orig_raw_data);
|
||||||
|
res_buffer->orig_raw_data = NULL;
|
||||||
|
res_buffer->raw_data = NULL;
|
||||||
|
res_buffer->raw_len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
esp_err_t esp_http_client_cleanup(esp_http_client_handle_t client)
|
esp_err_t esp_http_client_cleanup(esp_http_client_handle_t client)
|
||||||
{
|
{
|
||||||
if (client == NULL) {
|
if (client == NULL) {
|
||||||
@ -787,11 +798,7 @@ esp_err_t esp_http_client_cleanup(esp_http_client_handle_t client)
|
|||||||
http_header_destroy(client->response->headers);
|
http_header_destroy(client->response->headers);
|
||||||
if (client->response->buffer) {
|
if (client->response->buffer) {
|
||||||
free(client->response->buffer->data);
|
free(client->response->buffer->data);
|
||||||
if (client->response->buffer->orig_raw_data) {
|
esp_http_client_cached_buf_cleanup(client->response->buffer);
|
||||||
free(client->response->buffer->orig_raw_data);
|
|
||||||
client->response->buffer->orig_raw_data = NULL;
|
|
||||||
client->response->buffer->raw_data = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
free(client->response->buffer);
|
free(client->response->buffer);
|
||||||
free(client->response);
|
free(client->response);
|
||||||
@ -888,6 +895,8 @@ esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *u
|
|||||||
free(old_host);
|
free(old_host);
|
||||||
return ESP_ERR_NO_MEM;
|
return ESP_ERR_NO_MEM;
|
||||||
}
|
}
|
||||||
|
/* Free cached data if any, as we are closing this connection */
|
||||||
|
esp_http_client_cached_buf_cleanup(client->response->buffer);
|
||||||
esp_http_client_close(client);
|
esp_http_client_close(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -912,6 +921,8 @@ esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *u
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (old_port != client->connection_info.port) {
|
if (old_port != client->connection_info.port) {
|
||||||
|
/* Free cached data if any, as we are closing this connection */
|
||||||
|
esp_http_client_cached_buf_cleanup(client->response->buffer);
|
||||||
esp_http_client_close(client);
|
esp_http_client_close(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1035,9 +1046,7 @@ int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len)
|
|||||||
res_buffer->raw_data += remain_len;
|
res_buffer->raw_data += remain_len;
|
||||||
ridx = remain_len;
|
ridx = remain_len;
|
||||||
if (res_buffer->raw_len == 0) {
|
if (res_buffer->raw_len == 0) {
|
||||||
free(res_buffer->orig_raw_data);
|
esp_http_client_cached_buf_cleanup(res_buffer);
|
||||||
res_buffer->orig_raw_data = NULL;
|
|
||||||
res_buffer->raw_data = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int need_read = len - ridx;
|
int need_read = len - ridx;
|
||||||
|
Reference in New Issue
Block a user