mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[common,settings] force reallocation on caps copy
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user