diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 4a82a50e3..fda2bed91 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -639,7 +639,9 @@ esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *u ESP_LOGE(TAG, "Error parse url %s", url); return ESP_ERR_INVALID_ARG; } - old_host = client->connection_info.host; + if (client->connection_info.host) { + old_host = strdup(client->connection_info.host); + } old_port = client->connection_info.port; if (purl.field_data[UF_HOST].len) { @@ -651,11 +653,17 @@ esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *u && strcasecmp(old_host, (const void *)client->connection_info.host) != 0) { ESP_LOGD(TAG, "New host assign = %s", client->connection_info.host); if (esp_http_client_set_header(client, "Host", client->connection_info.host) != ESP_OK) { + free(old_host); return ESP_ERR_NO_MEM; } esp_http_client_close(client); } + if (old_host) { + free(old_host); + old_host = NULL; + } + if (purl.field_data[UF_SCHEMA].len) { http_utils_assign_string(&client->connection_info.scheme, url + purl.field_data[UF_SCHEMA].off, purl.field_data[UF_SCHEMA].len); HTTP_MEM_CHECK(TAG, client->connection_info.scheme, return ESP_ERR_NO_MEM);