[warnigns] fix Wshorten-64-to-32

This commit is contained in:
akallabeth
2024-10-14 15:50:38 +02:00
parent f88eda3f11
commit 78acedb40e
138 changed files with 1307 additions and 869 deletions

View File

@@ -174,7 +174,6 @@ static UINT remdesk_read_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* head
*/
static UINT remdesk_write_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* header)
{
UINT32 ChannelNameLen = 0;
WCHAR ChannelNameW[32] = { 0 };
WINPR_ASSERT(s);
@@ -185,8 +184,11 @@ static UINT remdesk_write_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* hea
ChannelNameW[index] = (WCHAR)header->ChannelName[index];
}
ChannelNameLen = (strnlen(header->ChannelName, sizeof(header->ChannelName)) + 1) * 2;
Stream_Write_UINT32(s, ChannelNameLen); /* ChannelNameLen (4 bytes) */
const size_t ChannelNameLen =
(strnlen(header->ChannelName, sizeof(header->ChannelName)) + 1) * 2;
WINPR_ASSERT(ChannelNameLen <= ARRAYSIZE(header->ChannelName));
Stream_Write_UINT32(s, (UINT32)ChannelNameLen); /* ChannelNameLen (4 bytes) */
Stream_Write_UINT32(s, header->DataLength); /* DataLen (4 bytes) */
Stream_Write(s, ChannelNameW, ChannelNameLen); /* ChannelName (variable) */
return CHANNEL_RC_OK;
@@ -202,7 +204,9 @@ static UINT remdesk_write_ctl_header(wStream* s, REMDESK_CTL_HEADER* ctlHeader)
WINPR_ASSERT(s);
WINPR_ASSERT(ctlHeader);
remdesk_write_channel_header(s, &ctlHeader->ch);
const UINT error = remdesk_write_channel_header(s, &ctlHeader->ch);
if (error)
return error;
Stream_Write_UINT32(s, ctlHeader->msgType); /* msgType (4 bytes) */
return CHANNEL_RC_OK;
}
@@ -213,14 +217,17 @@ static UINT remdesk_write_ctl_header(wStream* s, REMDESK_CTL_HEADER* ctlHeader)
* @return 0 on success, otherwise a Win32 error code
*/
static UINT remdesk_prepare_ctl_header(REMDESK_CTL_HEADER* ctlHeader, UINT32 msgType,
UINT32 msgSize)
size_t msgSize)
{
WINPR_ASSERT(ctlHeader);
if (msgSize > UINT32_MAX - 4)
return ERROR_INVALID_PARAMETER;
ctlHeader->msgType = msgType;
(void)sprintf_s(ctlHeader->ch.ChannelName, ARRAYSIZE(ctlHeader->ch.ChannelName),
REMDESK_CHANNEL_CTL_NAME);
ctlHeader->ch.DataLength = 4 + msgSize;
ctlHeader->ch.DataLength = (UINT32)(4UL + msgSize);
return CHANNEL_RC_OK;
}
@@ -277,16 +284,17 @@ static UINT remdesk_recv_ctl_version_info_pdu(remdeskPlugin* remdesk, wStream* s
*/
static UINT remdesk_send_ctl_version_info_pdu(remdeskPlugin* remdesk)
{
wStream* s = NULL;
REMDESK_CTL_VERSION_INFO_PDU pdu;
UINT error = 0;
REMDESK_CTL_VERSION_INFO_PDU pdu = { 0 };
WINPR_ASSERT(remdesk);
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERSIONINFO, 8);
UINT error = remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERSIONINFO, 8);
if (error)
return error;
pdu.versionMajor = 1;
pdu.versionMinor = 2;
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
wStream* s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
if (!s)
{
@@ -294,7 +302,12 @@ static UINT remdesk_send_ctl_version_info_pdu(remdeskPlugin* remdesk)
return CHANNEL_RC_NO_MEMORY;
}
remdesk_write_ctl_header(s, &(pdu.ctlHeader));
error = remdesk_write_ctl_header(s, &(pdu.ctlHeader));
if (error)
{
Stream_Free(s, TRUE);
return error;
}
Stream_Write_UINT32(s, pdu.versionMajor); /* versionMajor (4 bytes) */
Stream_Write_UINT32(s, pdu.versionMinor); /* versionMinor (4 bytes) */
Stream_SealLength(s);
@@ -347,7 +360,6 @@ static UINT remdesk_recv_ctl_result_pdu(remdeskPlugin* remdesk, wStream* s,
static UINT remdesk_send_ctl_authenticate_pdu(remdeskPlugin* remdesk)
{
UINT error = ERROR_INTERNAL_ERROR;
wStream* s = NULL;
size_t cbExpertBlobW = 0;
WCHAR* expertBlobW = NULL;
size_t cbRaConnectionStringW = 0;
@@ -378,13 +390,16 @@ static UINT remdesk_send_ctl_authenticate_pdu(remdeskPlugin* remdesk)
expertBlobW = ConvertUtf8ToWCharAlloc(expertBlob, &cbExpertBlobW);
if (!expertBlobW || (cbExpertBlobW > UINT32_MAX / sizeof(WCHAR)))
if (!expertBlobW)
goto out;
cbExpertBlobW = cbExpertBlobW * sizeof(WCHAR);
remdesk_prepare_ctl_header(&(ctlHeader), REMDESK_CTL_AUTHENTICATE,
cbRaConnectionStringW + cbExpertBlobW);
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + ctlHeader.ch.DataLength);
error = remdesk_prepare_ctl_header(&(ctlHeader), REMDESK_CTL_AUTHENTICATE,
cbRaConnectionStringW + cbExpertBlobW);
if (error)
goto out;
wStream* s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + ctlHeader.ch.DataLength);
if (!s)
{
@@ -393,12 +408,18 @@ static UINT remdesk_send_ctl_authenticate_pdu(remdeskPlugin* remdesk)
goto out;
}
remdesk_write_ctl_header(s, &(ctlHeader));
error = remdesk_write_ctl_header(s, &ctlHeader);
if (error)
{
Stream_Free(s, TRUE);
goto out;
}
Stream_Write(s, raConnectionStringW, cbRaConnectionStringW);
Stream_Write(s, expertBlobW, cbExpertBlobW);
Stream_SealLength(s);
if ((error = remdesk_virtual_channel_write(remdesk, s)))
error = remdesk_virtual_channel_write(remdesk, s);
if (error)
WLog_ERR(TAG, "remdesk_virtual_channel_write failed with error %" PRIu32 "!", error);
out:
@@ -432,8 +453,11 @@ static UINT remdesk_send_ctl_remote_control_desktop_pdu(remdeskPlugin* remdesk)
return ERROR_INTERNAL_ERROR;
REMDESK_CTL_HEADER ctlHeader = { 0 };
remdesk_prepare_ctl_header(&ctlHeader, REMDESK_CTL_REMOTE_CONTROL_DESKTOP,
cbRaConnectionStringW);
error = remdesk_prepare_ctl_header(&ctlHeader, REMDESK_CTL_REMOTE_CONTROL_DESKTOP,
cbRaConnectionStringW);
if (error != CHANNEL_RC_OK)
goto out;
wStream* s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + ctlHeader.ch.DataLength);
if (!s)
@@ -443,7 +467,12 @@ static UINT remdesk_send_ctl_remote_control_desktop_pdu(remdeskPlugin* remdesk)
goto out;
}
remdesk_write_ctl_header(s, &ctlHeader);
error = remdesk_write_ctl_header(s, &ctlHeader);
if (error)
{
Stream_Free(s, TRUE);
goto out;
}
Stream_Write(s, raConnectionStringW, cbRaConnectionStringW);
Stream_SealLength(s);
@@ -463,29 +492,31 @@ out:
*/
static UINT remdesk_send_ctl_verify_password_pdu(remdeskPlugin* remdesk)
{
UINT error = ERROR_INTERNAL_ERROR;
wStream* s = NULL;
size_t cbExpertBlobW = 0;
WCHAR* expertBlobW = NULL;
REMDESK_CTL_VERIFY_PASSWORD_PDU pdu = { 0 };
WINPR_ASSERT(remdesk);
if ((error = remdesk_generate_expert_blob(remdesk)))
UINT error = remdesk_generate_expert_blob(remdesk);
if (error)
{
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "!", error);
return error;
}
pdu.expertBlob = remdesk->ExpertBlob;
expertBlobW = ConvertUtf8ToWCharAlloc(pdu.expertBlob, &cbExpertBlobW);
WCHAR* expertBlobW = ConvertUtf8ToWCharAlloc(pdu.expertBlob, &cbExpertBlobW);
if (!expertBlobW || (cbExpertBlobW > UINT32_MAX / sizeof(WCHAR)))
if (!expertBlobW)
goto out;
cbExpertBlobW = cbExpertBlobW * sizeof(WCHAR);
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERIFY_PASSWORD, cbExpertBlobW);
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
error =
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_VERIFY_PASSWORD, cbExpertBlobW);
if (error)
goto out;
wStream* s = Stream_New(NULL, 1ULL * REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
if (!s)
{
@@ -494,11 +525,17 @@ static UINT remdesk_send_ctl_verify_password_pdu(remdeskPlugin* remdesk)
goto out;
}
remdesk_write_ctl_header(s, &(pdu.ctlHeader));
Stream_Write(s, (BYTE*)expertBlobW, cbExpertBlobW);
error = remdesk_write_ctl_header(s, &(pdu.ctlHeader));
if (error)
{
Stream_Free(s, TRUE);
goto out;
}
Stream_Write(s, expertBlobW, cbExpertBlobW);
Stream_SealLength(s);
if ((error = remdesk_virtual_channel_write(remdesk, s)))
error = remdesk_virtual_channel_write(remdesk, s);
if (error)
WLog_ERR(TAG, "remdesk_virtual_channel_write failed with error %" PRIu32 "!", error);
out:
@@ -514,23 +551,27 @@ out:
*/
static UINT remdesk_send_ctl_expert_on_vista_pdu(remdeskPlugin* remdesk)
{
UINT error = 0;
wStream* s = NULL;
REMDESK_CTL_EXPERT_ON_VISTA_PDU pdu;
REMDESK_CTL_EXPERT_ON_VISTA_PDU pdu = { 0 };
WINPR_ASSERT(remdesk);
if ((error = remdesk_generate_expert_blob(remdesk)))
UINT error = remdesk_generate_expert_blob(remdesk);
if (error)
{
WLog_ERR(TAG, "remdesk_generate_expert_blob failed with error %" PRIu32 "!", error);
return error;
}
if (remdesk->EncryptedPassStubSize > UINT32_MAX)
return ERROR_INTERNAL_ERROR;
pdu.EncryptedPasswordLength = remdesk->EncryptedPassStubSize;
pdu.EncryptedPasswordLength = (UINT32)remdesk->EncryptedPassStubSize;
pdu.EncryptedPassword = remdesk->EncryptedPassStub;
remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_EXPERT_ON_VISTA,
pdu.EncryptedPasswordLength);
s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
error = remdesk_prepare_ctl_header(&(pdu.ctlHeader), REMDESK_CTL_EXPERT_ON_VISTA,
pdu.EncryptedPasswordLength);
if (error)
return error;
wStream* s = Stream_New(NULL, REMDESK_CHANNEL_CTL_SIZE + pdu.ctlHeader.ch.DataLength);
if (!s)
{
@@ -538,7 +579,12 @@ static UINT remdesk_send_ctl_expert_on_vista_pdu(remdeskPlugin* remdesk)
return CHANNEL_RC_NO_MEMORY;
}
remdesk_write_ctl_header(s, &(pdu.ctlHeader));
error = remdesk_write_ctl_header(s, &(pdu.ctlHeader));
if (error)
{
Stream_Free(s, TRUE);
return error;
}
Stream_Write(s, pdu.EncryptedPassword, pdu.EncryptedPasswordLength);
Stream_SealLength(s);
return remdesk_virtual_channel_write(remdesk, s);

View File

@@ -36,10 +36,11 @@
*/
static UINT remdesk_virtual_channel_write(RemdeskServerContext* context, wStream* s)
{
BOOL status = 0;
const size_t len = Stream_Length(s);
WINPR_ASSERT(len <= UINT32_MAX);
ULONG BytesWritten = 0;
status = WTSVirtualChannelWrite(context->priv->ChannelHandle, Stream_BufferAs(s, char),
Stream_Length(s), &BytesWritten);
BOOL status = WTSVirtualChannelWrite(context->priv->ChannelHandle, Stream_BufferAs(s, char),
(UINT32)len, &BytesWritten);
return (status) ? CHANNEL_RC_OK : ERROR_INTERNAL_ERROR;
}
@@ -85,7 +86,6 @@ static UINT remdesk_read_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* head
*/
static UINT remdesk_write_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* header)
{
UINT32 ChannelNameLen = 0;
WCHAR ChannelNameW[32] = { 0 };
for (size_t index = 0; index < 32; index++)
@@ -93,8 +93,10 @@ static UINT remdesk_write_channel_header(wStream* s, REMDESK_CHANNEL_HEADER* hea
ChannelNameW[index] = (WCHAR)header->ChannelName[index];
}
ChannelNameLen = (strnlen(header->ChannelName, sizeof(header->ChannelName)) + 1) * 2;
Stream_Write_UINT32(s, ChannelNameLen); /* ChannelNameLen (4 bytes) */
const size_t ChannelNameLen =
(strnlen(header->ChannelName, sizeof(header->ChannelName)) + 1ULL) * sizeof(WCHAR);
WINPR_ASSERT(ChannelNameLen <= UINT32_MAX);
Stream_Write_UINT32(s, (UINT32)ChannelNameLen); /* ChannelNameLen (4 bytes) */
Stream_Write_UINT32(s, header->DataLength); /* DataLen (4 bytes) */
Stream_Write(s, ChannelNameW, ChannelNameLen); /* ChannelName (variable) */
return CHANNEL_RC_OK;
@@ -595,8 +597,14 @@ static DWORD WINAPI remdesk_server_thread(LPVOID arg)
break;
}
const size_t len = Stream_Capacity(s);
if (len > UINT32_MAX)
{
error = ERROR_INTERNAL_ERROR;
break;
}
if (WTSVirtualChannelRead(context->priv->ChannelHandle, 0, Stream_BufferAs(s, char),
Stream_Capacity(s), &BytesReturned))
(UINT32)len, &BytesReturned))
{
if (BytesReturned)
Stream_Seek(s, BytesReturned);