Skip to content

Commit 54eb002

Browse files
fix(websocket): fix relying on asprintf() to NULL strp on failure
asprintf()'s return value: When successful, these functions return the number of bytes printed, just like sprintf(3). On error, -1 is returned, errno is set to indicate the error, and the contents of strp are undefined. Fixes the following: error: ignoring return value of ‘asprintf’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result]
1 parent 5ab7e83 commit 54eb002

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

components/esp_websocket_client/esp_websocket_client.c

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -727,10 +727,14 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
727727
ESP_WS_CLIENT_MEM_CHECK(TAG, client->config, goto _websocket_init_fail);
728728

729729
if (config->transport == WEBSOCKET_TRANSPORT_OVER_TCP) {
730-
asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME);
730+
if (asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME) < 0) {
731+
client->config->scheme = NULL;
732+
}
731733
ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail);
732734
} else if (config->transport == WEBSOCKET_TRANSPORT_OVER_SSL) {
733-
asprintf(&client->config->scheme, WS_OVER_TLS_SCHEME);
735+
if (asprintf(&client->config->scheme, WS_OVER_TLS_SCHEME) < 0) {
736+
client->config->scheme = NULL;
737+
}
734738
ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail);
735739
}
736740

@@ -775,7 +779,9 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
775779
}
776780

777781
if (client->config->scheme == NULL) {
778-
asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME);
782+
if (asprintf(&client->config->scheme, WS_OVER_TCP_SCHEME) < 0) {
783+
client->config->scheme = NULL;
784+
}
779785
ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail);
780786
}
781787

@@ -852,26 +858,34 @@ esp_err_t esp_websocket_client_set_uri(esp_websocket_client_handle_t client, con
852858
}
853859
if (puri.field_data[UF_SCHEMA].len) {
854860
free(client->config->scheme);
855-
asprintf(&client->config->scheme, "%.*s", puri.field_data[UF_SCHEMA].len, uri + puri.field_data[UF_SCHEMA].off);
861+
if (asprintf(&client->config->scheme, "%.*s", puri.field_data[UF_SCHEMA].len, uri + puri.field_data[UF_SCHEMA].off) < 0) {
862+
client->config->scheme = NULL;
863+
}
856864
ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, return ESP_ERR_NO_MEM);
857865
}
858866

859867
if (puri.field_data[UF_HOST].len) {
860868
free(client->config->host);
861-
asprintf(&client->config->host, "%.*s", puri.field_data[UF_HOST].len, uri + puri.field_data[UF_HOST].off);
869+
if (asprintf(&client->config->host, "%.*s", puri.field_data[UF_HOST].len, uri + puri.field_data[UF_HOST].off) < 0) {
870+
client->config->host = NULL;
871+
}
862872
ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->host, return ESP_ERR_NO_MEM);
863873
}
864874

865875

866876
if (puri.field_data[UF_PATH].len || puri.field_data[UF_QUERY].len) {
867877
free(client->config->path);
878+
int aret = -1;
868879
if (puri.field_data[UF_QUERY].len == 0) {
869-
asprintf(&client->config->path, "%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off);
880+
aret = asprintf(&client->config->path, "%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off);
870881
} else if (puri.field_data[UF_PATH].len == 0) {
871-
asprintf(&client->config->path, "/?%.*s", puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off);
882+
aret = asprintf(&client->config->path, "/?%.*s", puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off);
872883
} else {
873-
asprintf(&client->config->path, "%.*s?%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off,
874-
puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off);
884+
aret = asprintf(&client->config->path, "%.*s?%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].off,
885+
puri.field_data[UF_QUERY].len, uri + puri.field_data[UF_QUERY].off);
886+
}
887+
if (aret < 0) {
888+
client->config->path = NULL;
875889
}
876890
ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->path, return ESP_ERR_NO_MEM);
877891
}
@@ -881,7 +895,9 @@ esp_err_t esp_websocket_client_set_uri(esp_websocket_client_handle_t client, con
881895

882896
if (puri.field_data[UF_USERINFO].len) {
883897
char *user_info = NULL;
884-
asprintf(&user_info, "%.*s", puri.field_data[UF_USERINFO].len, uri + puri.field_data[UF_USERINFO].off);
898+
if (asprintf(&user_info, "%.*s", puri.field_data[UF_USERINFO].len, uri + puri.field_data[UF_USERINFO].off) < 0) {
899+
user_info = NULL;
900+
}
885901
if (user_info) {
886902
char *pass = strchr(user_info, ':');
887903
if (pass) {

0 commit comments

Comments
 (0)