mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
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 <vikram.dattu@espressif.com>
This commit is contained in:
parent
225bc0f80a
commit
344cb99d34
@ -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);
|
ESP_LOGE(TAG, "Error parse url %s", url);
|
||||||
return ESP_ERR_INVALID_ARG;
|
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;
|
old_port = client->connection_info.port;
|
||||||
|
|
||||||
if (purl.field_data[UF_HOST].len) {
|
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) {
|
&& strcasecmp(old_host, (const void *)client->connection_info.host) != 0) {
|
||||||
ESP_LOGD(TAG, "New host assign = %s", client->connection_info.host);
|
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) {
|
if (esp_http_client_set_header(client, "Host", client->connection_info.host) != ESP_OK) {
|
||||||
|
free(old_host);
|
||||||
return ESP_ERR_NO_MEM;
|
return ESP_ERR_NO_MEM;
|
||||||
}
|
}
|
||||||
esp_http_client_close(client);
|
esp_http_client_close(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (old_host) {
|
||||||
|
free(old_host);
|
||||||
|
old_host = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (purl.field_data[UF_SCHEMA].len) {
|
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_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);
|
HTTP_MEM_CHECK(TAG, client->connection_info.scheme, return ESP_ERR_NO_MEM);
|
||||||
|
Loading…
Reference in New Issue
Block a user