]> granicus.if.org Git - esp-idf/commitdiff
esp_http_client: Resolve some bugs from the github community
authorTuan PM <tuanpm@live.com>
Mon, 23 Jul 2018 01:59:49 +0000 (08:59 +0700)
committerTuan PM <tuanpm@live.com>
Mon, 23 Jul 2018 05:22:19 +0000 (12:22 +0700)
- Closes https://github.com/espressif/esp-idf/issues/2135
- Closes https://github.com/espressif/esp-idf/issues/2208
- Closes https://github.com/espressif/esp-idf/issues/2213

components/esp_http_client/esp_http_client.c
components/esp_http_client/lib/http_auth.c
examples/protocols/esp_http_client/main/esp_http_client_example.c

index 9597021cb755f704e5dc24b3524cad650b1183e3..f504ba1d211114aebf84a4d69c910929ff67b2e7 100644 (file)
@@ -759,6 +759,9 @@ int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len)
 esp_err_t esp_http_client_perform(esp_http_client_handle_t client)
 {
     esp_err_t err;
+    if (client == NULL) {
+        return ESP_ERR_INVALID_ARG;
+    }
     do {
         if ((err = esp_http_client_open(client, client->post_len)) != ESP_OK) {
             return err;
@@ -849,6 +852,11 @@ esp_err_t esp_http_client_open(esp_http_client_handle_t client, int write_len)
         client->transport = transport_list_get_transport(client->transport_list, client->connection_info.scheme);
         if (client->transport == NULL) {
             ESP_LOGE(TAG, "No transport found");
+#ifndef CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS
+            if (strcasecmp(client->connection_info.scheme, "https") == 0) {
+                ESP_LOGE(TAG, "Please enable HTTPS at menuconfig to allow requesting via https");
+            }
+#endif
             return ESP_ERR_HTTP_INVALID_TRANSPORT;
         }
         if (transport_connect(client->transport, client->connection_info.host, client->connection_info.port, client->timeout_ms) < 0) {
index cd1d4ef721eb7cfd62aabf869ba7a77b2585f787..c406937c965c399629563fe1108e6d2648cb5012 100644 (file)
@@ -136,15 +136,15 @@ char *http_auth_basic(const char *username, const char *password)
 {
     int out;
     char *user_info = NULL;
-    char *digest = calloc(1, MD5_MAX_LEN + 7);
-    HTTP_MEM_CHECK(TAG, digest, goto _basic_exit);
+    char *digest = NULL;
+    size_t n = 0;
     asprintf(&user_info, "%s:%s", username, password);
-    HTTP_MEM_CHECK(TAG, user_info, goto _basic_exit);
-    if (user_info == NULL) {
-        goto _basic_exit;
-    }
+    HTTP_MEM_CHECK(TAG, user_info, return NULL);
+    mbedtls_base64_encode(NULL, 0, &n, (const unsigned char *)user_info, strlen(user_info));
+    digest = calloc(1, 6 + n + 1);
+    HTTP_MEM_CHECK(TAG, digest, goto _basic_exit);
     strcpy(digest, "Basic ");
-    mbedtls_base64_encode((unsigned char *)digest + 6, MD5_MAX_LEN, (size_t *)&out, (const unsigned char *)user_info, strlen(user_info));
+    mbedtls_base64_encode((unsigned char *)digest + 6, n, (size_t *)&out, (const unsigned char *)user_info, strlen(user_info));
 _basic_exit:
     free(user_info);
     return digest;
index 66abb86d8898a366ff2cda3c1730847674f8a3a1..4a489080b9190a62197816f0a9bcc4066c5ce8fc 100644 (file)
@@ -296,7 +296,7 @@ static void http_download_chunk()
 
 static void http_perform_as_stream_reader()
 {
-    char *buffer = malloc(MAX_HTTP_RECV_BUFFER);
+    char *buffer = malloc(MAX_HTTP_RECV_BUFFER + 1);
     if (buffer == NULL) {
         ESP_LOGE(TAG, "Cannot malloc http receive buffer");
         return;