]> granicus.if.org Git - esp-idf/commitdiff
esp_http_client: Fixed exception on 401 without Www-Authenticate header
authorTuan PM <tuanpm@live.com>
Tue, 31 Jul 2018 16:25:11 +0000 (23:25 +0700)
committerbot <bot@espressif.com>
Sun, 5 Aug 2018 06:24:53 +0000 (06:24 +0000)
Closes https://github.com/espressif/esp-idf/issues/2246

components/esp_http_client/esp_http_client.c
components/esp_http_client/lib/http_utils.c

index 02f6ebce24686fd97af46b3193e1a63542a6e9f6..9ca4939f1a2bf8f6d2f27d9e175b23677457394e 100644 (file)
@@ -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;
index 2ccc5013133a8ca9fa6a3cd66ba0339070139d8f..2e65888abcd06da96b4d6d445ecbe402ac2afeca 100644 (file)
@@ -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 ++;