From ef6fff6341325d3c3569fbc4a1accab4cbf234fa Mon Sep 17 00:00:00 2001 From: dxbjavid Date: Fri, 22 May 2026 22:11:28 +0530 Subject: [PATCH] iperf_auth: check BIO_read return value in Base64Decode --- src/iperf_auth.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/iperf_auth.c b/src/iperf_auth.c index e41fe1863..ec6b1e8c5 100644 --- a/src/iperf_auth.c +++ b/src/iperf_auth.c @@ -144,21 +144,30 @@ size_t calcDecodeLength(const char* b64input) { //Calculates the length of a dec int Base64Decode(const char* b64message, unsigned char** buffer, size_t* length) { //Decodes a base64 encoded string BIO *bio, *b64; + int br; size_t decodeLen = calcDecodeLength(b64message); *buffer = (unsigned char*)malloc(decodeLen + 1); if (!*buffer) return -1; (*buffer)[decodeLen] = '\0'; + *length = 0; bio = BIO_new_mem_buf(b64message, -1); b64 = BIO_new(BIO_f_base64()); bio = BIO_push(b64, bio); BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Do not use newlines to flush buffer - *length = BIO_read(bio, *buffer, strlen(b64message)); + br = BIO_read(bio, *buffer, strlen(b64message)); BIO_free_all(bio); + if (br < 0) { + free(*buffer); + *buffer = NULL; + return -1; + } + *length = (size_t)br; + return (0); //success }