From 769b22527823aeb863e605825c833e7cc21f1d3f Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 18 Sep 2024 11:34:20 +0200 Subject: [PATCH] [utils,smartcard] fix size checks --- libfreerdp/utils/smartcard_call.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libfreerdp/utils/smartcard_call.c b/libfreerdp/utils/smartcard_call.c index a00ee43ef..6940a6a21 100644 --- a/libfreerdp/utils/smartcard_call.c +++ b/libfreerdp/utils/smartcard_call.c @@ -227,7 +227,10 @@ static LONG smartcard_ListReaderGroupsW_Call(scard_call_context* smartcard, wStr return SCARD_F_UNKNOWN_ERROR; ret.msz = (BYTE*)mszGroups; - ret.cBytes = cchGroups * sizeof(WCHAR); + + const size_t blen = sizeof(WCHAR) * cchGroups; + WINPR_ASSERT(blen <= UINT32_MAX); + ret.cBytes = (UINT32)blen; if (status != SCARD_S_SUCCESS) return status; @@ -1303,7 +1306,9 @@ static LONG smartcard_StatusW_Call(scard_call_context* smartcard, wStream* out, /* SCardStatusW returns number of characters, we need number of bytes */ WINPR_ASSERT(ret.cBytes != SCARD_AUTOALLOCATE); - ret.cBytes *= sizeof(WCHAR); + const size_t blen = sizeof(WCHAR) * ret.cBytes; + WINPR_ASSERT(blen <= UINT32_MAX); + ret.cBytes = (UINT32)blen; status = smartcard_pack_status_return(out, &ret, TRUE); if (status != SCARD_S_SUCCESS)