Merge pull request #11290 from akallabeth/prerelease-cleanups

Prerelease cleanups
This commit is contained in:
akallabeth
2025-03-05 15:56:53 +01:00
committed by GitHub
10 changed files with 218 additions and 22 deletions

View File

@@ -27,7 +27,7 @@ jobs:
distro: ubuntu22.04
steps:
- uses: actions/checkout@v4
- uses: uraimo/run-on-arch-action@v2.8.1
- uses: uraimo/run-on-arch-action@v3.0.0
name: "Run tests"
id: build
with:

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
**/CMakeCache.txt
**/CMakeFiles
build
checker
abi-checker

View File

@@ -4493,7 +4493,9 @@ BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s, UINT16 pduSource, UINT16 le
if (!Stream_CheckAndLogRequiredLength(TAG, s, 4))
return FALSE;
const UINT32 SessionId = Stream_Get_UINT32(s); /* SessionId */
/* [MS-RDPBCGR] 2.2.1.13.1.1 Demand Active PDU Data (TS_DEMAND_ACTIVE_PDU)::sessionId
* is ignored by client */
Stream_Seek_UINT32(s); /* SessionId */
{
rdp_secondary_update_internal* secondary = secondary_update_cast(rdp->update->secondary);

View File

@@ -1210,7 +1210,6 @@ BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs)
do
{
UINT16 clientProductIdLen = 0;
if (blockLength < 2)
break;
@@ -1220,15 +1219,37 @@ BOOL gcc_read_client_core_data(wStream* s, rdpMcs* mcs)
if (blockLength < 2)
break;
Stream_Read_UINT16(s, clientProductIdLen); /* clientProductID (2 bytes) */
const UINT16 clientProductId = Stream_Get_UINT16(s); /* clientProductID (2 bytes) */
blockLength -= 2;
/* [MS-RDPBCGR] 2.2.1.3.2 Client Core Data (TS_UD_CS_CORE)::clientProductId (optional)
* should be initialized to 1
*/
if (clientProductId != 1)
{
WLog_WARN(TAG,
"[MS-RDPBCGR] 2.2.1.3.2 Client Core Data (TS_UD_CS_CORE)::clientProductId "
"(optional) expected 1, got %" PRIu32,
clientProductId);
}
if (blockLength < 4)
break;
Stream_Seek_UINT32(s); /* serialNumber (4 bytes) */
const UINT32 serialNumber = Stream_Get_UINT32(s); /* serialNumber (4 bytes) */
blockLength -= 4;
/* [MS-RDPBCGR] 2.2.1.3.2 Client Core Data (TS_UD_CS_CORE)::serialNumber (optional)
* should be initialized to 0
*/
if (serialNumber != 0)
{
WLog_WARN(TAG,
"[MS-RDPBCGR] 2.2.1.3.2 Client Core Data (TS_UD_CS_CORE)::serialNumber "
"(optional) expected 0, got %" PRIu32,
serialNumber);
}
if (blockLength < 2)
break;
@@ -1925,16 +1946,14 @@ BOOL gcc_write_client_network_data(wStream* s, const rdpMcs* mcs)
BOOL gcc_read_server_network_data(wStream* s, rdpMcs* mcs)
{
UINT16 channelId = 0;
UINT16 MCSChannelId = 0;
UINT16 channelCount = 0;
UINT32 parsedChannelCount = 0;
WINPR_ASSERT(s);
WINPR_ASSERT(mcs);
if (!Stream_CheckAndLogRequiredLength(TAG, s, 4))
return FALSE;
Stream_Read_UINT16(s, MCSChannelId); /* MCSChannelId */
Stream_Read_UINT16(s, channelCount); /* channelCount */
mcs->IOChannelId = Stream_Get_UINT16(s); /* MCSChannelId */
const uint16_t channelCount = Stream_Get_UINT16(s); /* channelCount */
parsedChannelCount = channelCount;
if (channelCount != mcs->channelCount)

View File

@@ -1950,7 +1950,6 @@ fail:
BOOL license_read_platform_challenge_packet(rdpLicense* license, wStream* s)
{
BYTE macData[LICENSING_ENCRYPTION_KEY_LENGTH] = { 0 };
UINT32 ConnectFlags = 0;
WINPR_ASSERT(license);
@@ -1959,7 +1958,9 @@ BOOL license_read_platform_challenge_packet(rdpLicense* license, wStream* s)
if (!license_check_stream_length(s, 4, "license platform challenge"))
return FALSE;
Stream_Read_UINT32(s, ConnectFlags); /* ConnectFlags, Reserved (4 bytes) */
/* [MS-RDPELE] 2.2.2.4 Server Platform Challenge (SERVER_PLATFORM_CHALLENGE)
* reserved field */
Stream_Seek_UINT32(s); /* ConnectFlags, Reserved (4 bytes) */
/* EncryptedPlatformChallenge */
license->EncryptedPlatformChallenge->type = BB_ANY_BLOB;

View File

@@ -131,6 +131,7 @@ struct rdp_mcs
UINT16 userId;
UINT16 baseChannelId;
UINT16 IOChannelId;
UINT16 messageChannelId;
UINT32 flags;

View File

@@ -643,7 +643,8 @@ BOOL rdp_read_header(rdpRdp* rdp, wStream* s, UINT16* length, UINT16* channelId)
if (!per_read_integer16(s, channelId, 0)) /* channelId */
return FALSE;
const uint8_t byte = Stream_Get_UINT8(s); /* dataPriority + Segmentation (0x70) */
const uint8_t dataPriority = Stream_Get_UINT8(s); /* dataPriority + Segmentation (0x70) */
WLog_Print(rdp->log, WLOG_TRACE, "dataPriority=%" PRIu8, dataPriority);
if (!per_read_length(s, length)) /* userData (OCTET_STRING) */
return FALSE;
@@ -991,27 +992,37 @@ static BOOL rdp_recv_server_set_keyboard_indicators_pdu(rdpRdp* rdp, wStream* s)
return FALSE;
const uint16_t unitId = Stream_Get_UINT16(s); /* unitId (2 bytes) */
if (unitId != 0)
{
WLog_Print(rdp->log, WLOG_WARN,
"[MS-RDPBCGR] 2.2.8.2.1.1 Set Keyboard Indicators PDU Data "
"(TS_SET_KEYBOARD_INDICATORS_PDU)::unitId should be 0, is %" PRIu8,
unitId);
}
const UINT16 ledFlags = Stream_Get_UINT16(s); /* ledFlags (2 bytes) */
return IFCALLRESULT(TRUE, context->update->SetKeyboardIndicators, context, ledFlags);
}
static BOOL rdp_recv_server_set_keyboard_ime_status_pdu(rdpRdp* rdp, wStream* s)
{
UINT16 unitId = 0;
UINT32 imeState = 0;
UINT32 imeConvMode = 0;
if (!rdp || !rdp->input)
return FALSE;
if (!Stream_CheckAndLogRequiredLengthWLog(rdp->log, s, 10))
return FALSE;
Stream_Read_UINT16(s, unitId); /* unitId (2 bytes) */
Stream_Read_UINT32(s, imeState); /* imeState (4 bytes) */
Stream_Read_UINT32(s, imeConvMode); /* imeConvMode (4 bytes) */
IFCALL(rdp->update->SetKeyboardImeStatus, rdp->context, unitId, imeState, imeConvMode);
return TRUE;
const uint16_t unitId = Stream_Get_UINT16(s); /* unitId (2 bytes) */
if (unitId != 0)
{
WLog_Print(rdp->log, WLOG_WARN,
"[MS-RDPBCGR] 2.2.8.2.2.1 Set Keyboard IME Status PDU Data "
"(TS_SET_KEYBOARD_IME_STATUS_PDU)::unitId should be 0, is %" PRIu8,
unitId);
}
const uint32_t imeState = Stream_Get_UINT32(s); /* imeState (4 bytes) */
const uint32_t imeConvMode = Stream_Get_UINT32(s); /* imeConvMode (4 bytes) */
return IFCALLRESULT(TRUE, rdp->update->SetKeyboardImeStatus, rdp->context, unitId, imeState,
imeConvMode);
}
static BOOL rdp_recv_set_error_info_data_pdu(rdpRdp* rdp, wStream* s)

View File

@@ -248,6 +248,7 @@ static DWORD get_random(DWORD offset)
return x;
}
#if defined(WITH_FREERDP_3x_DEPRECATED)
static BOOL test_scancode_cnv(void)
{
for (DWORD x = 0; x < UINT8_MAX; x++)
@@ -283,6 +284,7 @@ static BOOL test_scancode_cnv(void)
}
return TRUE;
}
#endif
static BOOL test_codepages(void)
{
@@ -325,6 +327,7 @@ static BOOL test_codepages(void)
static BOOL test_init(void)
{
#if defined(WITH_FREERDP_3x_DEPRECATED)
const DWORD kbd = freerdp_keyboard_init(0);
if (kbd == 0)
{
@@ -352,6 +355,7 @@ static BOOL test_init(void)
// TODO: Test with valid remap list
// TODO: Test with invalid remap list
// TODO: Test with defaults != 0
#endif
return TRUE;
}
@@ -382,8 +386,10 @@ int TestLocaleKeyboard(int argc, char* argv[])
~(RDP_KEYBOARD_LAYOUT_TYPE_STANDARD | RDP_KEYBOARD_LAYOUT_TYPE_VARIANT |
RDP_KEYBOARD_LAYOUT_TYPE_IME)))
return -1;
#if defined(WITH_FREERDP_3x_DEPRECATED)
if (!test_scancode_cnv())
return -1;
#endif
if (!test_codepages())
return -1;
if (!test_init())

View File

@@ -1498,150 +1498,294 @@ static const char* CommIoCtlToStr(unsigned long int io)
switch (io)
{
#if defined(WINPR_HAVE_SERIAL_SUPPORT)
#if defined(TCGETS)
case TCGETS:
return "TCGETS";
#endif
#if defined(TCSETS)
case TCSETS:
return "TCSETS";
#endif
#if defined(TCSETSW)
case TCSETSW:
return "TCSETSW";
#endif
#if defined(TCSETSF)
case TCSETSF:
return "TCSETSF";
#endif
#if defined(TCGETA)
case TCGETA:
return "TCGETA";
#endif
#if defined(TCSETA)
case TCSETA:
return "TCSETA";
#endif
#if defined(TCSETAW)
case TCSETAW:
return "TCSETAW";
#endif
#if defined(TCSETAF)
case TCSETAF:
return "TCSETAF";
#endif
#if defined(TCSBRK)
case TCSBRK:
return "TCSBRK";
#endif
#if defined(TCXONC)
case TCXONC:
return "TCXONC";
#endif
#if defined(TCFLSH)
case TCFLSH:
return "TCFLSH";
#endif
#if defined(TIOCEXCL)
case TIOCEXCL:
return "TIOCEXCL";
#endif
#if defined(TIOCNXCL)
case TIOCNXCL:
return "TIOCNXCL";
#endif
#if defined(TIOCSCTTY)
case TIOCSCTTY:
return "TIOCSCTTY";
#endif
#if defined(TIOCGPGRP)
case TIOCGPGRP:
return "TIOCGPGRP";
#endif
#if defined(TIOCSPGRP)
case TIOCSPGRP:
return "TIOCSPGRP";
#endif
#if defined(TIOCOUTQ)
case TIOCOUTQ:
return "TIOCOUTQ";
#endif
#if defined(TIOCSTI)
case TIOCSTI:
return "TIOCSTI";
#endif
#if defined(TIOCGWINSZ)
case TIOCGWINSZ:
return "TIOCGWINSZ";
#endif
#if defined(TIOCSWINSZ)
case TIOCSWINSZ:
return "TIOCSWINSZ";
#endif
#if defined(TIOCMGET)
case TIOCMGET:
return "TIOCMGET";
#endif
#if defined(TIOCMBIS)
case TIOCMBIS:
return "TIOCMBIS";
#endif
#if defined(TIOCMBIC)
case TIOCMBIC:
return "TIOCMBIC";
#endif
#if defined(TIOCMSET)
case TIOCMSET:
return "TIOCMSET";
#endif
#if defined(TIOCGSOFTCAR)
case TIOCGSOFTCAR:
return "TIOCGSOFTCAR";
#endif
#if defined(TIOCSSOFTCAR)
case TIOCSSOFTCAR:
return "TIOCSSOFTCAR";
#endif
#if defined(FIONREAD)
case FIONREAD:
return "FIONREAD/TIOCINQ";
#endif
#if defined(TIOCLINUX)
case TIOCLINUX:
return "TIOCLINUX";
#endif
#if defined(TIOCCONS)
case TIOCCONS:
return "TIOCCONS";
#endif
#if defined(TIOCGSERIAL)
case TIOCGSERIAL:
return "TIOCGSERIAL";
#endif
#if defined(TIOCSSERIAL)
case TIOCSSERIAL:
return "TIOCSSERIAL";
#endif
#if defined(TIOCPKT)
case TIOCPKT:
return "TIOCPKT";
#endif
#if defined(FIONBIO)
case FIONBIO:
return "FIONBIO";
#endif
#if defined(TIOCNOTTY)
case TIOCNOTTY:
return "TIOCNOTTY";
#endif
#if defined(TIOCSETD)
case TIOCSETD:
return "TIOCSETD";
#endif
#if defined(TIOCGETD)
case TIOCGETD:
return "TIOCGETD";
#endif
#if defined(TCSBRKP)
case TCSBRKP:
return "TCSBRKP";
#endif
#if defined(TIOCSBRK)
case TIOCSBRK:
return "TIOCSBRK";
#endif
#if defined(TIOCCBRK)
case TIOCCBRK:
return "TIOCCBRK";
#endif
#if defined(TIOCGSID)
case TIOCGSID:
return "TIOCGSID";
#endif
#if defined(TIOCGRS485)
case TIOCGRS485:
return "TIOCGRS485";
#endif
#if defined(TIOCSRS485)
case TIOCSRS485:
return "TIOCSRS485";
#endif
#if defined(TIOCSPTLCK)
case TIOCSPTLCK:
return "TIOCSPTLCK";
#endif
#if defined(TCGETX)
case TCGETX:
return "TCGETX";
#endif
#if defined(TCSETX)
case TCSETX:
return "TCSETX";
#endif
#if defined(TCSETXF)
case TCSETXF:
return "TCSETXF";
#endif
#if defined(TCSETXW)
case TCSETXW:
return "TCSETXW";
#endif
#if defined(TIOCSIG)
case TIOCSIG:
return "TIOCSIG";
#endif
#if defined(TIOCVHANGUP)
case TIOCVHANGUP:
return "TIOCVHANGUP";
#endif
#if defined(TIOCGPTPEER)
case TIOCGPTPEER:
return "TIOCGPTPEER";
#endif
#if defined(FIONCLEX)
case FIONCLEX:
return "FIONCLEX";
#endif
#if defined(FIOCLEX)
case FIOCLEX:
return "FIOCLEX";
#endif
#if defined(FIOASYNC)
case FIOASYNC:
return "FIOASYNC";
#endif
#if defined(TIOCSERCONFIG)
case TIOCSERCONFIG:
return "TIOCSERCONFIG";
#endif
#if defined(TIOCSERGWILD)
case TIOCSERGWILD:
return "TIOCSERGWILD";
#endif
#if defined(TIOCSERSWILD)
case TIOCSERSWILD:
return "TIOCSERSWILD";
#endif
#if defined(TIOCGLCKTRMIOS)
case TIOCGLCKTRMIOS:
return "TIOCGLCKTRMIOS";
#endif
#if defined(TIOCSLCKTRMIOS)
case TIOCSLCKTRMIOS:
return "TIOCSLCKTRMIOS";
#endif
#if defined(TIOCSERGSTRUCT)
case TIOCSERGSTRUCT:
return "TIOCSERGSTRUCT";
#endif
#if defined(TIOCSERGETLSR)
case TIOCSERGETLSR:
return "TIOCSERGETLSR";
#endif
#if defined(TIOCSERGETMULTI)
case TIOCSERGETMULTI:
return "TIOCSERGETMULTI";
#endif
#if defined(TIOCSERSETMULTI)
case TIOCSERSETMULTI:
return "TIOCSERSETMULTI";
#endif
#if defined(TIOCMIWAIT)
case TIOCMIWAIT:
return "TIOCMIWAIT";
#endif
#if defined(TIOCGICOUNT)
case TIOCGICOUNT:
return "TIOCGICOUNT";
#endif
#if defined(FIOQSIZE)
case FIOQSIZE:
return "FIOQSIZE";
#endif
#if defined(TIOCPKT_DATA)
case TIOCPKT_DATA:
return "TIOCPKT_DATA";
#endif
#if defined(TIOCPKT_FLUSHWRITE)
case TIOCPKT_FLUSHWRITE:
return "TIOCPKT_FLUSHWRITE";
#endif
#if defined(TIOCPKT_STOP)
case TIOCPKT_STOP:
return "TIOCPKT_STOP";
#endif
#if defined(TIOCPKT_START)
case TIOCPKT_START:
return "TIOCPKT_START";
#endif
#if defined(TIOCPKT_NOSTOP)
case TIOCPKT_NOSTOP:
return "TIOCPKT_NOSTOP";
#endif
#if defined(TIOCPKT_DOSTOP)
case TIOCPKT_DOSTOP:
return "TIOCPKT_DOSTOP";
#endif
#if defined(TIOCPKT_IOCTL)
case TIOCPKT_IOCTL:
return "TIOCPKT_IOCTL";
#endif
#endif
default:
return "UNKNOWN";

View File

@@ -23,8 +23,10 @@ static BOOL test_crypto_cipher_aes_128_cbc(BOOL ex)
if (ex)
ctx = winpr_Cipher_NewEx(WINPR_CIPHER_AES_128_CBC, WINPR_ENCRYPT, key, sizeof(key), iv,
sizeof(iv));
#if defined(WITH_FREERDP_3x_DEPRECATED)
else
ctx = winpr_Cipher_New(WINPR_CIPHER_AES_128_CBC, WINPR_ENCRYPT, key, iv);
#endif
if (!ctx)
{
(void)fprintf(stderr, "%s: winpr_Cipher_New (encrypt) failed\n", __func__);
@@ -60,10 +62,19 @@ static BOOL test_crypto_cipher_aes_128_cbc(BOOL ex)
}
winpr_Cipher_Free(ctx);
ctx = NULL;
/* decrypt */
if (!(ctx = winpr_Cipher_New(WINPR_CIPHER_AES_128_CBC, WINPR_DECRYPT, key, iv)))
if (ex)
ctx = winpr_Cipher_NewEx(WINPR_CIPHER_AES_128_CBC, WINPR_DECRYPT, key, sizeof(key), iv,
sizeof(iv));
#if defined(WITH_FREERDP_3x_DEPRECATED)
else
ctx = winpr_Cipher_New(WINPR_CIPHER_AES_128_CBC, WINPR_DECRYPT, key, iv);
#endif
if (!ctx)
{
(void)fprintf(stderr, "%s: winpr_Cipher_New (decrypt) failed\n", __func__);
return FALSE;