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]
This commit is contained in:
Richard Allen
2025-10-03 08:30:30 -05:00
parent 5ab7e8327e
commit 54eb002758

View File

@@ -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); ESP_WS_CLIENT_MEM_CHECK(TAG, client->config, goto _websocket_init_fail);
if (config->transport == WEBSOCKET_TRANSPORT_OVER_TCP) { 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); ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail);
} else if (config->transport == WEBSOCKET_TRANSPORT_OVER_SSL) { } 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); 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) { 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); ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, goto _websocket_init_fail);
} }
@@ -852,27 +858,35 @@ esp_err_t esp_websocket_client_set_uri(esp_websocket_client_handle_t client, con
} }
if (puri.field_data[UF_SCHEMA].len) { if (puri.field_data[UF_SCHEMA].len) {
free(client->config->scheme); 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); ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->scheme, return ESP_ERR_NO_MEM);
} }
if (puri.field_data[UF_HOST].len) { if (puri.field_data[UF_HOST].len) {
free(client->config->host); 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); 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) { if (puri.field_data[UF_PATH].len || puri.field_data[UF_QUERY].len) {
free(client->config->path); free(client->config->path);
int aret = -1;
if (puri.field_data[UF_QUERY].len == 0) { 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) { } 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 { } else {
asprintf(&client->config->path, "%.*s?%.*s", puri.field_data[UF_PATH].len, uri + puri.field_data[UF_PATH].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); 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); ESP_WS_CLIENT_MEM_CHECK(TAG, client->config->path, return ESP_ERR_NO_MEM);
} }
if (puri.field_data[UF_PORT].off) { if (puri.field_data[UF_PORT].off) {
@@ -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) { if (puri.field_data[UF_USERINFO].len) {
char *user_info = NULL; 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) { if (user_info) {
char *pass = strchr(user_info, ':'); char *pass = strchr(user_info, ':');
if (pass) { if (pass) {