From 123d3ef5dbdc3755999e6a71dd1b79e5877b82c4 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 19 Apr 2024 09:32:23 +0200 Subject: [PATCH] mqtt: when Curl_xfer_recv returns error, don't use nread A returned error code makes other return value unreliable, and in this case potentially uninitialized. On error, do not read other return values like the nread counter. Spotted by CodeSonar Closes #13418 --- lib/mqtt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mqtt.c b/lib/mqtt.c index 35458648da..6f150cee45 100644 --- a/lib/mqtt.c +++ b/lib/mqtt.c @@ -777,12 +777,12 @@ static CURLcode mqtt_doing(struct Curl_easy *data, bool *done) case MQTT_REMAINING_LENGTH: do { result = Curl_xfer_recv(data, (char *)&byte, 1, &nread); - if(!nread) + if(result || !nread) break; Curl_debug(data, CURLINFO_HEADER_IN, (char *)&byte, 1); mq->pkt_hd[mq->npacket++] = byte; } while((byte & 0x80) && (mq->npacket < 4)); - if(nread && (byte & 0x80)) + if(!result && nread && (byte & 0x80)) /* MQTT supports up to 127 * 128^0 + 127 * 128^1 + 127 * 128^2 + 127 * 128^3 bytes. server tried to send more */ result = CURLE_WEIRD_SERVER_REPLY; -- 2.47.3