Fixed rdp_capability_set_start checks
This commit is contained in:
parent
56e6b40f3d
commit
bf8a01cb63
@ -127,6 +127,8 @@ static void rdp_write_capability_set_header(wStream* s, UINT16 length, UINT16 ty
|
|||||||
static size_t rdp_capability_set_start(wStream* s)
|
static size_t rdp_capability_set_start(wStream* s)
|
||||||
{
|
{
|
||||||
size_t header = Stream_GetPosition(s);
|
size_t header = Stream_GetPosition(s);
|
||||||
|
if (Stream_GetRemainingCapacity(s) < CAPSET_HEADER_LENGTH)
|
||||||
|
return SIZE_MAX;
|
||||||
Stream_Zero(s, CAPSET_HEADER_LENGTH);
|
Stream_Zero(s, CAPSET_HEADER_LENGTH);
|
||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
@ -1853,6 +1855,8 @@ static BOOL rdp_write_bitmap_cache_v2_capability_set(wStream* s, const rdpSettin
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
cacheFlags = ALLOW_CACHE_WAITING_LIST_FLAG;
|
cacheFlags = ALLOW_CACHE_WAITING_LIST_FLAG;
|
||||||
|
|
||||||
if (settings->BitmapCachePersistEnabled)
|
if (settings->BitmapCachePersistEnabled)
|
||||||
@ -1963,6 +1967,8 @@ static BOOL rdp_write_virtual_channel_capability_set(wStream* s, const rdpSettin
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
flags = VCCAPS_NO_COMPR;
|
flags = VCCAPS_NO_COMPR;
|
||||||
Stream_Write_UINT32(s, flags); /* flags (4 bytes) */
|
Stream_Write_UINT32(s, flags); /* flags (4 bytes) */
|
||||||
Stream_Write_UINT32(s, settings->VirtualChannelChunkSize); /* VCChunkSize (4 bytes) */
|
Stream_Write_UINT32(s, settings->VirtualChannelChunkSize); /* VCChunkSize (4 bytes) */
|
||||||
@ -2036,6 +2042,8 @@ static BOOL rdp_write_draw_nine_grid_cache_capability_set(wStream* s, const rdpS
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
drawNineGridSupportLevel =
|
drawNineGridSupportLevel =
|
||||||
(settings->DrawNineGridEnabled) ? DRAW_NINEGRID_SUPPORTED_V2 : DRAW_NINEGRID_NO_SUPPORT;
|
(settings->DrawNineGridEnabled) ? DRAW_NINEGRID_SUPPORTED_V2 : DRAW_NINEGRID_NO_SUPPORT;
|
||||||
Stream_Write_UINT32(s, drawNineGridSupportLevel); /* drawNineGridSupportLevel (4 bytes) */
|
Stream_Write_UINT32(s, drawNineGridSupportLevel); /* drawNineGridSupportLevel (4 bytes) */
|
||||||
@ -2140,6 +2148,8 @@ static BOOL rdp_write_draw_gdiplus_cache_capability_set(wStream* s, const rdpSet
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
drawGDIPlusSupportLevel =
|
drawGDIPlusSupportLevel =
|
||||||
(settings->DrawGdiPlusEnabled) ? DRAW_GDIPLUS_SUPPORTED : DRAW_GDIPLUS_DEFAULT;
|
(settings->DrawGdiPlusEnabled) ? DRAW_GDIPLUS_SUPPORTED : DRAW_GDIPLUS_DEFAULT;
|
||||||
drawGdiplusCacheLevel = (settings->DrawGdiPlusEnabled) ? DRAW_GDIPLUS_CACHE_LEVEL_ONE
|
drawGdiplusCacheLevel = (settings->DrawGdiPlusEnabled) ? DRAW_GDIPLUS_CACHE_LEVEL_ONE
|
||||||
@ -2229,6 +2239,8 @@ static BOOL rdp_write_remote_programs_capability_set(wStream* s, const rdpSettin
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
railSupportLevel = RAIL_LEVEL_SUPPORTED;
|
railSupportLevel = RAIL_LEVEL_SUPPORTED;
|
||||||
|
|
||||||
if (settings->RemoteApplicationSupportLevel & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
|
if (settings->RemoteApplicationSupportLevel & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
|
||||||
@ -2300,6 +2312,8 @@ static BOOL rdp_write_window_list_capability_set(wStream* s, const rdpSettings*
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
Stream_Write_UINT32(s, settings->RemoteWndSupportLevel); /* wndSupportLevel (4 bytes) */
|
Stream_Write_UINT32(s, settings->RemoteWndSupportLevel); /* wndSupportLevel (4 bytes) */
|
||||||
Stream_Write_UINT8(s, settings->RemoteAppNumIconCaches); /* numIconCaches (1 byte) */
|
Stream_Write_UINT8(s, settings->RemoteAppNumIconCaches); /* numIconCaches (1 byte) */
|
||||||
Stream_Write_UINT16(s,
|
Stream_Write_UINT16(s,
|
||||||
@ -2362,6 +2376,8 @@ static BOOL rdp_write_desktop_composition_capability_set(wStream* s, const rdpSe
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
compDeskSupportLevel =
|
compDeskSupportLevel =
|
||||||
(settings->AllowDesktopComposition) ? COMPDESK_SUPPORTED : COMPDESK_NOT_SUPPORTED;
|
(settings->AllowDesktopComposition) ? COMPDESK_SUPPORTED : COMPDESK_NOT_SUPPORTED;
|
||||||
Stream_Write_UINT16(s, compDeskSupportLevel); /* compDeskSupportLevel (2 bytes) */
|
Stream_Write_UINT16(s, compDeskSupportLevel); /* compDeskSupportLevel (2 bytes) */
|
||||||
@ -2465,9 +2481,6 @@ static BOOL rdp_write_multifragment_update_capability_set(wStream* s, rdpSetting
|
|||||||
{
|
{
|
||||||
size_t header;
|
size_t header;
|
||||||
|
|
||||||
if (!Stream_EnsureRemainingCapacity(s, 32))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (settings->ServerMode && settings->MultifragMaxRequestSize == 0)
|
if (settings->ServerMode && settings->MultifragMaxRequestSize == 0)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -2488,7 +2501,11 @@ static BOOL rdp_write_multifragment_update_capability_set(wStream* s, rdpSetting
|
|||||||
settings->MultifragMaxRequestSize += 16384;
|
settings->MultifragMaxRequestSize += 16384;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Stream_EnsureRemainingCapacity(s, 32))
|
||||||
|
return FALSE;
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
Stream_Write_UINT32(s, settings->MultifragMaxRequestSize); /* MaxRequestSize (4 bytes) */
|
Stream_Write_UINT32(s, settings->MultifragMaxRequestSize); /* MaxRequestSize (4 bytes) */
|
||||||
return rdp_capability_set_finish(s, header, CAPSET_TYPE_MULTI_FRAGMENT_UPDATE);
|
return rdp_capability_set_finish(s, header, CAPSET_TYPE_MULTI_FRAGMENT_UPDATE);
|
||||||
}
|
}
|
||||||
@ -2553,6 +2570,8 @@ static BOOL rdp_write_large_pointer_capability_set(wStream* s, const rdpSettings
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
largePointerSupportFlags =
|
largePointerSupportFlags =
|
||||||
settings->LargePointerFlag & (LARGE_POINTER_FLAG_96x96 | LARGE_POINTER_FLAG_384x384);
|
settings->LargePointerFlag & (LARGE_POINTER_FLAG_96x96 | LARGE_POINTER_FLAG_384x384);
|
||||||
Stream_Write_UINT16(s, largePointerSupportFlags); /* largePointerSupportFlags (2 bytes) */
|
Stream_Write_UINT16(s, largePointerSupportFlags); /* largePointerSupportFlags (2 bytes) */
|
||||||
@ -2612,6 +2631,8 @@ static BOOL rdp_write_surface_commands_capability_set(wStream* s, const rdpSetti
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
cmdFlags = SURFCMDS_SET_SURFACE_BITS | SURFCMDS_STREAM_SURFACE_BITS;
|
cmdFlags = SURFCMDS_SET_SURFACE_BITS | SURFCMDS_STREAM_SURFACE_BITS;
|
||||||
|
|
||||||
if (settings->SurfaceFrameMarkerEnabled)
|
if (settings->SurfaceFrameMarkerEnabled)
|
||||||
@ -3073,6 +3094,8 @@ static BOOL rdp_write_bitmap_codecs_capability_set(wStream* s, const rdpSettings
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
header = rdp_capability_set_start(s);
|
header = rdp_capability_set_start(s);
|
||||||
|
if (header > UINT16_MAX)
|
||||||
|
return FALSE;
|
||||||
bitmapCodecCount = 0;
|
bitmapCodecCount = 0;
|
||||||
|
|
||||||
if (settings->RemoteFxCodec)
|
if (settings->RemoteFxCodec)
|
||||||
|
Loading…
Reference in New Issue
Block a user