From 9aec055ac2953f092b9b1130f2a9bce627956586 Mon Sep 17 00:00:00 2001 From: Tuan PM Date: Tue, 31 Jul 2018 23:25:11 +0700 Subject: [PATCH] esp_http_client: Fixed exception on 401 without Www-Authenticate header Closes https://github.com/espressif/esp-idf/issues/2246 --- components/esp_http_client/esp_http_client.c | 11 +++++++---- components/esp_http_client/lib/http_utils.c | 10 ++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 02f6ebce24..9ca4939f1a 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -562,10 +562,10 @@ static esp_err_t esp_http_check_response(esp_http_client_handle_t client) break; case HttpStatus_Unauthorized: auth_header = client->auth_header; - http_utils_trim_whitespace(&auth_header); - ESP_LOGI(TAG, "UNAUTHORIZED: %s", auth_header); - client->redirect_counter ++; if (auth_header) { + http_utils_trim_whitespace(&auth_header); + ESP_LOGD(TAG, "UNAUTHORIZED: %s", auth_header); + client->redirect_counter ++; if (http_utils_str_starts_with(auth_header, "Digest") == 0) { ESP_LOGD(TAG, "type = Digest"); client->connection_info.auth_type = HTTP_AUTH_TYPE_DIGEST; @@ -574,7 +574,7 @@ static esp_err_t esp_http_check_response(esp_http_client_handle_t client) client->connection_info.auth_type = HTTP_AUTH_TYPE_BASIC; } else { client->connection_info.auth_type = HTTP_AUTH_TYPE_NONE; - ESP_LOGE(TAG, "Unsupport Auth Type"); + ESP_LOGE(TAG, "This authentication method is not supported: %s", auth_header); break; } @@ -589,6 +589,9 @@ static esp_err_t esp_http_check_response(esp_http_client_handle_t client) client->auth_data->nonce = http_utils_get_string_between(auth_header, "nonce=\"", "\""); client->auth_data->opaque = http_utils_get_string_between(auth_header, "opaque=\"", "\""); client->process_again = 1; + } else { + client->connection_info.auth_type = HTTP_AUTH_TYPE_NONE; + ESP_LOGW(TAG, "This request requires authentication, but does not provide header information for that"); } } return ESP_OK; diff --git a/components/esp_http_client/lib/http_utils.c b/components/esp_http_client/lib/http_utils.c index 2ccc501313..2e65888abc 100644 --- a/components/esp_http_client/lib/http_utils.c +++ b/components/esp_http_client/lib/http_utils.c @@ -63,8 +63,14 @@ char *http_utils_assign_string(char **str, const char *new_str, int len) void http_utils_trim_whitespace(char **str) { - char *end; - char *start = *str; + char *end, *start; + if (str == NULL) { + return; + } + start = *str; + if (start == NULL) { + return; + } // Trim leading space while (isspace((unsigned char)*start)) start ++;