From e92f0170e49ff0095a76e79d2444ec899a3e3d83 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Tue, 15 Apr 2025 16:09:09 +0200 Subject: [PATCH] [core,settings] handle empty OrderSupport and received capabilities --- libfreerdp/common/settings.c | 3 +++ libfreerdp/core/settings.c | 25 +++++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index 24c6e994c..9119893e2 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -882,6 +882,9 @@ BOOL freerdp_capability_buffer_copy(rdpSettings* settings, const rdpSettings* sr WINPR_ASSERT(settings); WINPR_ASSERT(src); + if (src->ReceivedCapabilitiesSize == 0) + return TRUE; + if (!freerdp_capability_buffer_allocate(settings, src->ReceivedCapabilitiesSize)) return FALSE; diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index 43cf81db7..f8ba69340 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -1356,7 +1356,7 @@ static BOOL freerdp_settings_int_buffer_copy(rdpSettings* _settings, const rdpSe if (!freerdp_server_license_issuers_copy(_settings, settings->ServerLicenseProductIssuers, settings->ServerLicenseProductIssuersCount)) - return FALSE; + goto out_fail; if (settings->RdpServerCertificate) { @@ -1390,13 +1390,17 @@ static BOOL freerdp_settings_int_buffer_copy(rdpSettings* _settings, const rdpSe freerdp_settings_get_uint32(settings, FreeRDP_ChannelCount))) goto out_fail; - _settings->OrderSupport = malloc(32); - if (!_settings->OrderSupport) - goto out_fail; + if (settings->OrderSupport) + { + _settings->OrderSupport = calloc(32, sizeof(BYTE)); + if (!_settings->OrderSupport) + goto out_fail; - if (!freerdp_capability_buffer_copy(_settings, settings)) - goto out_fail; - CopyMemory(_settings->OrderSupport, settings->OrderSupport, 32); + if (!freerdp_capability_buffer_copy(_settings, settings)) + goto out_fail; + + CopyMemory(_settings->OrderSupport, settings->OrderSupport, 32); + } const UINT32 glyphCacheCount = 10; const GLYPH_CACHE_DEFINITION* glyphCache = @@ -1427,7 +1431,8 @@ static BOOL freerdp_settings_int_buffer_copy(rdpSettings* _settings, const rdpSe const UINT32 nrports = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount); if (!freerdp_target_net_adresses_reset(_settings, nrports)) - return FALSE; + goto out_fail; + ; for (UINT32 i = 0; i < nrports; i++) { @@ -1436,9 +1441,9 @@ static BOOL freerdp_settings_int_buffer_copy(rdpSettings* _settings, const rdpSe const UINT32* port = freerdp_settings_get_pointer_array(settings, FreeRDP_TargetNetPorts, i); if (!freerdp_settings_set_pointer_array(_settings, FreeRDP_TargetNetAddresses, i, address)) - return FALSE; + goto out_fail; if (!freerdp_settings_set_pointer_array(_settings, FreeRDP_TargetNetPorts, i, port)) - return FALSE; + goto out_fail; } {