[common,settings] force reallocation on caps copy

This commit is contained in:
akallabeth
2025-06-30 21:13:13 +02:00
parent b1f0b2b00f
commit ec8f2b5dde
4 changed files with 15 additions and 11 deletions

View File

@@ -878,13 +878,16 @@ static BOOL resize_setting(rdpSettings* settings, FreeRDP_Settings_Keys_Pointer
return freerdp_settings_set_pointer(settings, id, ptr);
}
BOOL freerdp_capability_buffer_resize(rdpSettings* settings, size_t count)
BOOL freerdp_capability_buffer_resize(rdpSettings* settings, size_t count, BOOL force)
{
WINPR_ASSERT(settings);
const uint32_t len = settings->ReceivedCapabilitiesSize;
if (len == count)
return TRUE;
if (!force)
{
if (len == count)
return TRUE;
}
freerdp_capability_data_free(settings, count, FALSE);
@@ -894,7 +897,7 @@ BOOL freerdp_capability_buffer_resize(rdpSettings* settings, size_t count)
return TRUE;
}
const size_t oldsize = settings->ReceivedCapabilitiesSize;
const size_t oldsize = force ? 0 : settings->ReceivedCapabilitiesSize;
if (!resize_setting(settings, FreeRDP_ReceivedCapabilityDataSizes, oldsize, count,
sizeof(uint32_t)))
return FALSE;
@@ -915,7 +918,7 @@ BOOL freerdp_capability_buffer_copy(rdpSettings* settings, const rdpSettings* sr
if (src->ReceivedCapabilitiesSize == 0)
return TRUE;
if (!freerdp_capability_buffer_resize(settings, src->ReceivedCapabilitiesSize))
if (!freerdp_capability_buffer_resize(settings, src->ReceivedCapabilitiesSize, TRUE))
return FALSE;
for (UINT32 x = 0; x < src->ReceivedCapabilitiesSize; x++)
@@ -1576,7 +1579,7 @@ BOOL freerdp_settings_set_pointer_len(rdpSettings* settings, FreeRDP_Settings_Ke
return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DynamicChannelArraySize,
data, len, sizeof(ADDIN_ARGV*));
case FreeRDP_ReceivedCapabilityData:
if (!freerdp_capability_buffer_resize(settings, len))
if (!freerdp_capability_buffer_resize(settings, len, FALSE))
return FALSE;
if (data == NULL)
{
@@ -1584,7 +1587,7 @@ BOOL freerdp_settings_set_pointer_len(rdpSettings* settings, FreeRDP_Settings_Ke
}
return TRUE;
case FreeRDP_ReceivedCapabilities:
if (!freerdp_capability_buffer_resize(settings, len))
if (!freerdp_capability_buffer_resize(settings, len, FALSE))
return FALSE;
if (data == NULL)
{
@@ -1603,7 +1606,7 @@ BOOL freerdp_settings_set_pointer_len(rdpSettings* settings, FreeRDP_Settings_Ke
sizeof(UINT32));
case FreeRDP_ReceivedCapabilityDataSizes:
if (!freerdp_capability_buffer_resize(settings, len))
if (!freerdp_capability_buffer_resize(settings, len, FALSE))
return FALSE;
if (data == NULL)
{

View File

@@ -2373,7 +2373,7 @@ BOOL freerdp_settings_set_uint32(WINPR_ATTR_UNUSED rdpSettings* settings,
break;
case FreeRDP_ReceivedCapabilitiesSize:
return freerdp_capability_buffer_resize(settings, cnv.c);
return freerdp_capability_buffer_resize(settings, cnv.c, FALSE);
case FreeRDP_RedirectedSessionId:
settings->RedirectedSessionId = cnv.c;