From: Vikram Dattu Date: Tue, 26 Mar 2019 08:45:46 +0000 (+0800) Subject: Fix url redirection issue. X-Git-Tag: v4.0-beta1~422^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8755055467f3e6ab44dd802f0254ed0281059cc;p=esp-idf Fix url redirection issue. Operation: In `esp_http_client_set_url`, we check for if old_host is same as new_host. Delete and open new connection if host is different. Issue: We just pointed `client->connection_info.host` to `old_host` and reassigned it. This made old_host and new_host always point to same location and hence, using old_host with new request. Fix: Made a separate copy for old_host using strdup. Closes https://github.com/espressif/esp-idf/issues/2631 Signed-off-by: Vikram Dattu --- diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 400bfa6259..faf0c20fd5 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -661,7 +661,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) { @@ -673,11 +675,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);