From a1ba364d47eb49bd0053db0e123102206929951b Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 4 Dec 2024 09:52:05 +0100 Subject: [PATCH] [core,tcp] check arguments transport_bio_buffered_write arguments require more detailed checks. --- libfreerdp/core/tcp.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libfreerdp/core/tcp.c b/libfreerdp/core/tcp.c index ee597c049..53e3a412f 100644 --- a/libfreerdp/core/tcp.c +++ b/libfreerdp/core/tcp.c @@ -478,6 +478,8 @@ static int transport_bio_buffered_write(BIO* bio, const char* buf, int num) WINPR_ASSERT(bio); WINPR_ASSERT(ptr); + if (num < 0) + return num; ptr->writeBlocked = FALSE; BIO_clear_flags(bio, BIO_FLAGS_WRITE); @@ -485,7 +487,7 @@ static int transport_bio_buffered_write(BIO* bio, const char* buf, int num) /* we directly append extra bytes in the xmit buffer, this could be prevented * but for now it makes the code more simple. */ - if (buf && num && !ringbuffer_write(&ptr->xmitBuffer, (const BYTE*)buf, num)) + if (buf && (num > 0) && !ringbuffer_write(&ptr->xmitBuffer, (const BYTE*)buf, (size_t)num)) { WLog_ERR(TAG, "an error occurred when writing (num: %d)", num); return -1;