diff --git a/components/esp_websocket_client/esp_websocket_client.c b/components/esp_websocket_client/esp_websocket_client.c index f3f940f596..87c3a7e6fa 100644 --- a/components/esp_websocket_client/esp_websocket_client.c +++ b/components/esp_websocket_client/esp_websocket_client.c @@ -727,10 +727,14 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie ESP_WS_CLIENT_MEM_CHECK(TAG, client->config, goto _websocket_init_fail); if (config->transport == WEBSOCKET_TRANSPORT_OVER_TCP) { - asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME); + if (asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME) < 0) { + client->config->scheme = NULL; + } ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail); } else if (config->transport == WEBSOCKET_TRANSPORT_OVER_SSL) { - asprintf(&client->config->scheme, WS_OVER_TLS_SCHEME); + if (asprintf(&client->config->scheme, WS_OVER_TLS_SCHEME) < 0) { + client->config->scheme = NULL; + } ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail); } @@ -775,7 +779,9 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie } if (client->config->scheme == NULL) { - asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME); + if (asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME) < 0) { + client->config->scheme = NULL; + } ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail); } @@ -852,26 +858,34 @@ esp_err_t esp_websocket_client_set_uri(esp_websocket_client_handle_t client, con } if (puri.field_data[UF_SCHEMA].len) { free(client->config->scheme); - asprintf(&client->config->scheme, "%.*s", puri.field_data[UF_SCHEMA].len, uri + puri.field_data[UF_SCHEMA].off); + if (asprintf(&client->config->scheme, "%.*s", puri.field_data[UF_SCHEMA].len, uri + puri.field_data[UF_SCHEMA].off) < 0) { + client->config->scheme = NULL; + } ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, return ESP_ERR_NO_MEM); } if (puri.field_data[UF_HOST].len) { free(client->config->host); - asprintf(&client->config->host, "%.*s", puri.field_data[UF_HOST].len, uri + puri.field_data[UF_HOST].off); + if (asprintf(&client->config->host, "%.*s", puri.field_data[UF_HOST].len, uri + puri.field_data[UF_HOST].off) < 0) { + client->config->host = NULL; + } ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->host, return ESP_ERR_NO_MEM); } if (puri.field_data[UF_PATH].len || puri.field_data[UF_QUERY].len) { free(client->config->path); + int aret = -1; if (puri.field_data[UF_QUERY].len == 0) { - asprintf(&client->config->path, "%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off); + aret = asprintf(&client->config->path, "%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off); } else if (puri.field_data[UF_PATH].len == 0) { - asprintf(&client->config->path, "/?%.*s", puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off); + aret = asprintf(&client->config->path, "/?%.*s", puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off); } else { - asprintf(&client->config->path, "%.*s?%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off, - puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off); + aret = asprintf(&client->config->path, "%.*s?%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off, + puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off); + } + if (aret < 0) { + client->config->path = NULL; } ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->path, return ESP_ERR_NO_MEM); } @@ -881,7 +895,9 @@ esp_err_t esp_websocket_client_set_uri(esp_websocket_client_handle_t client, con if (puri.field_data[UF_USERINFO].len) { char *user_info = NULL; - asprintf(&user_info, "%.*s", puri.field_data[UF_USERINFO].len, uri + puri.field_data[UF_USERINFO].off); + if (asprintf(&user_info, "%.*s", puri.field_data[UF_USERINFO].len, uri + puri.field_data[UF_USERINFO].off) < 0) { + user_info = NULL; + } if (user_info) { char *pass = strchr(user_info, ':'); if (pass) {