mqtt: eliminate size_t cast

Use new curlx_sotouz_fits() instead.

Closes #19622
This commit is contained in:
Stefan Eissing 2025-11-20 11:40:23 +01:00 committed by Daniel Stenberg
parent d9e9dd7f20
commit b812be567a
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
3 changed files with 25 additions and 4 deletions

View file

@ -317,6 +317,22 @@ bool curlx_sztouz(ssize_t sznum, size_t *puznum)
return TRUE;
}
bool curlx_sotouz_fits(curl_off_t sonum, size_t *puznum)
{
if(sonum < 0) {
*puznum = 0;
return FALSE;
}
#if SIZEOF_CURL_OFF_T > SIZEOF_SIZE_T
if(sonum > SIZE_MAX) {
*puznum = 0;
return FALSE;
}
#endif
*puznum = (size_t)sonum;
return TRUE;
}
curl_off_t curlx_uztoso(size_t uznum)
{
#if SIZEOF_SIZE_T >= SIZEOF_CURL_OFF_T

View file

@ -69,6 +69,10 @@ curl_off_t curlx_uztoso(size_t uznum);
/* Convert a ssize_t to size_t, return FALSE if negative and set 0 */
bool curlx_sztouz(ssize_t sznum, size_t *puznum);
/* Convert a curl_off_t to size_t, return FALSE if negative or
* too large and set 0 */
bool curlx_sotouz_fits(curl_off_t sonum, size_t *puznum);
#ifdef _WIN32
#undef read
#define read(fd, buf, count) (ssize_t)_read(fd, buf, curlx_uztoui(count))

View file

@ -192,7 +192,7 @@ static CURLcode mqtt_send(struct Curl_easy *data,
if(result)
return result;
mq->lastTime = curlx_now();
Curl_debug(data, CURLINFO_HEADER_OUT, buf, (size_t)n);
Curl_debug(data, CURLINFO_HEADER_OUT, buf, n);
if(len != n) {
size_t nsend = len - n;
if(curlx_dyn_len(&mq->sendbuf)) {
@ -602,10 +602,11 @@ static CURLcode mqtt_publish(struct Curl_easy *data)
DEBUGF(infof(data, "mqtt_publish without payload, return bad arg"));
return CURLE_BAD_FUNCTION_ARGUMENT;
}
if(postfieldsize < 0)
if(!curlx_sotouz_fits(postfieldsize, &payloadlen)) {
if(postfieldsize > 0) /* off_t does not fit into size_t */
return CURLE_BAD_FUNCTION_ARGUMENT;
payloadlen = strlen(payload);
else
payloadlen = (size_t)postfieldsize;
}
result = mqtt_get_topic(data, &topic, &topiclen);
if(result)