mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[warnings,api] fix -Wunused-result
With marking publid API [[nodiscard]] some problematic error checks in the core library were uncovered. This commit addresses these shortcomings.
This commit is contained in:
@@ -784,14 +784,14 @@ static inline int progressive_rfx_dwt_2d_decode(PROGRESSIVE_CONTEXT* WINPR_RESTR
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void progressive_rfx_decode_block(const primitives_t* prims,
|
||||
static inline BOOL progressive_rfx_decode_block(const primitives_t* prims,
|
||||
INT16* WINPR_RESTRICT buffer, UINT32 length,
|
||||
UINT32 shift)
|
||||
{
|
||||
if (!shift)
|
||||
return;
|
||||
if (shift == 0)
|
||||
return TRUE;
|
||||
|
||||
(void)prims->lShiftC_16s_inplace(buffer, shift, length);
|
||||
return prims->lShiftC_16s_inplace(buffer, shift, length) == PRIMITIVES_SUCCESS;
|
||||
}
|
||||
|
||||
static inline int
|
||||
@@ -814,30 +814,50 @@ progressive_rfx_decode_component(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive
|
||||
if (!extrapolate)
|
||||
{
|
||||
rfx_differential_decode(buffer + 4032, 64);
|
||||
progressive_rfx_decode_block(prims, &buffer[0], 1024, shift->HL1); /* HL1 */
|
||||
progressive_rfx_decode_block(prims, &buffer[1024], 1024, shift->LH1); /* LH1 */
|
||||
progressive_rfx_decode_block(prims, &buffer[2048], 1024, shift->HH1); /* HH1 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3072], 256, shift->HL2); /* HL2 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3328], 256, shift->LH2); /* LH2 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3584], 256, shift->HH2); /* HH2 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3840], 64, shift->HL3); /* HL3 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3904], 64, shift->LH3); /* LH3 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3968], 64, shift->HH3); /* HH3 */
|
||||
progressive_rfx_decode_block(prims, &buffer[4032], 64, shift->LL3); /* LL3 */
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[0], 1024, shift->HL1)) /* HL1 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[1024], 1024, shift->LH1)) /* LH1 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[2048], 1024, shift->HH1)) /* HH1 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3072], 256, shift->HL2)) /* HL2 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3328], 256, shift->LH2)) /* LH2 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3584], 256, shift->HH2)) /* HH2 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3840], 64, shift->HL3)) /* HL3 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3904], 64, shift->LH3)) /* LH3 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3968], 64, shift->HH3)) /* HH3 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[4032], 64, shift->LL3)) /* LL3 */
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
progressive_rfx_decode_block(prims, &buffer[0], 1023, shift->HL1); /* HL1 */
|
||||
progressive_rfx_decode_block(prims, &buffer[1023], 1023, shift->LH1); /* LH1 */
|
||||
progressive_rfx_decode_block(prims, &buffer[2046], 961, shift->HH1); /* HH1 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3007], 272, shift->HL2); /* HL2 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3279], 272, shift->LH2); /* LH2 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3551], 256, shift->HH2); /* HH2 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3807], 72, shift->HL3); /* HL3 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3879], 72, shift->LH3); /* LH3 */
|
||||
progressive_rfx_decode_block(prims, &buffer[3951], 64, shift->HH3); /* HH3 */
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[0], 1023, shift->HL1)) /* HL1 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[1023], 1023, shift->LH1)) /* LH1 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[2046], 961, shift->HH1)) /* HH1 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3007], 272, shift->HL2)) /* HL2 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3279], 272, shift->LH2)) /* LH2 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3551], 256, shift->HH2)) /* HH2 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3807], 72, shift->HL3)) /* HL3 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3879], 72, shift->LH3)) /* LH3 */
|
||||
return -1;
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[3951], 64, shift->HH3)) /* HH3 */
|
||||
return -1;
|
||||
rfx_differential_decode(&buffer[4015], 81); /* LL3 */
|
||||
progressive_rfx_decode_block(prims, &buffer[4015], 81, shift->LL3); /* LL3 */
|
||||
if (!progressive_rfx_decode_block(prims, &buffer[4015], 81, shift->LL3)) /* LL3 */
|
||||
return -1;
|
||||
}
|
||||
return progressive_rfx_dwt_2d_decode(progressive, buffer, current, coeffDiff, extrapolate,
|
||||
FALSE);
|
||||
@@ -2273,7 +2293,11 @@ static inline BOOL update_tiles(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive,
|
||||
clippingRect.top = (UINT16)nYDst + rect->y;
|
||||
clippingRect.right = clippingRect.left + rect->width;
|
||||
clippingRect.bottom = clippingRect.top + rect->height;
|
||||
region16_union_rect(&clippingRects, &clippingRects, &clippingRect);
|
||||
if (!region16_union_rect(&clippingRects, &clippingRects, &clippingRect))
|
||||
{
|
||||
region16_uninit(&clippingRects);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
for (UINT32 i = 0; i < surface->numUpdatedTiles; i++)
|
||||
@@ -2299,7 +2323,11 @@ static inline BOOL update_tiles(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive,
|
||||
|
||||
REGION16 updateRegion = { 0 };
|
||||
region16_init(&updateRegion);
|
||||
region16_intersect_rect(&updateRegion, &clippingRects, &updateRect);
|
||||
if (!region16_intersect_rect(&updateRegion, &clippingRects, &updateRect))
|
||||
{
|
||||
region16_uninit(&updateRegion);
|
||||
goto fail;
|
||||
}
|
||||
updateRects = region16_rects(&updateRegion, &nbUpdateRects);
|
||||
|
||||
for (UINT32 j = 0; j < nbUpdateRects; j++)
|
||||
@@ -2324,7 +2352,13 @@ static inline BOOL update_tiles(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive,
|
||||
break;
|
||||
|
||||
if (invalidRegion)
|
||||
region16_union_rect(invalidRegion, invalidRegion, rect);
|
||||
{
|
||||
if (!region16_union_rect(invalidRegion, invalidRegion, rect))
|
||||
{
|
||||
region16_uninit(&updateRegion);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
region16_uninit(&updateRegion);
|
||||
|
||||
@@ -293,7 +293,8 @@ RFX_CONTEXT* rfx_context_new_ex(BOOL encoder, UINT32 ThreadingFlags)
|
||||
/* Call primitives_get here in order to avoid race conditions when using primitives_get */
|
||||
/* from multiple threads. This call will initialize all function pointers correctly */
|
||||
/* before any decoding threads are started */
|
||||
primitives_get();
|
||||
if (!primitives_get())
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* initialize the default pixel format */
|
||||
@@ -1289,7 +1290,12 @@ BOOL rfx_process_message(RFX_CONTEXT* WINPR_RESTRICT context, const BYTE* WINPR_
|
||||
const uint16_t bottom = WINPR_ASSERTING_INT_CAST(UINT16, MIN(rh, dstHeight));
|
||||
clippingRect.right = right;
|
||||
clippingRect.bottom = bottom;
|
||||
region16_union_rect(&clippingRects, &clippingRects, &clippingRect);
|
||||
if (!region16_union_rect(&clippingRects, &clippingRects, &clippingRect))
|
||||
{
|
||||
region16_uninit(&updateRegion);
|
||||
region16_uninit(&clippingRects);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
for (UINT32 i = 0; i < message->numTiles; i++)
|
||||
@@ -1305,7 +1311,12 @@ BOOL rfx_process_message(RFX_CONTEXT* WINPR_RESTRICT context, const BYTE* WINPR_
|
||||
updateRect.right = updateRect.left + 64;
|
||||
updateRect.bottom = updateRect.top + 64;
|
||||
region16_init(&updateRegion);
|
||||
region16_intersect_rect(&updateRegion, &clippingRects, &updateRect);
|
||||
if (!region16_intersect_rect(&updateRegion, &clippingRects, &updateRect))
|
||||
{
|
||||
region16_uninit(&updateRegion);
|
||||
region16_uninit(&clippingRects);
|
||||
return FALSE;
|
||||
}
|
||||
updateRects = region16_rects(&updateRegion, &nbUpdateRects);
|
||||
|
||||
for (UINT32 j = 0; j < nbUpdateRects; j++)
|
||||
@@ -1332,7 +1343,14 @@ BOOL rfx_process_message(RFX_CONTEXT* WINPR_RESTRICT context, const BYTE* WINPR_
|
||||
}
|
||||
|
||||
if (invalidRegion)
|
||||
region16_union_rect(invalidRegion, invalidRegion, cur);
|
||||
{
|
||||
if (!region16_union_rect(invalidRegion, invalidRegion, cur))
|
||||
{
|
||||
region16_uninit(&updateRegion);
|
||||
region16_uninit(&clippingRects);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
region16_uninit(&updateRegion);
|
||||
|
||||
@@ -44,14 +44,14 @@
|
||||
* LL3 4032 8x8 64
|
||||
*/
|
||||
|
||||
static inline void rfx_quantization_decode_block(const primitives_t* WINPR_RESTRICT prims,
|
||||
static inline BOOL rfx_quantization_decode_block(const primitives_t* WINPR_RESTRICT prims,
|
||||
INT16* WINPR_RESTRICT buffer, UINT32 buffer_size,
|
||||
UINT32 factor)
|
||||
{
|
||||
if (factor == 0)
|
||||
return;
|
||||
return TRUE;
|
||||
|
||||
(void)prims->lShiftC_16s_inplace(buffer, factor, buffer_size);
|
||||
return prims->lShiftC_16s_inplace(buffer, factor, buffer_size) == PRIMITIVES_SUCCESS;
|
||||
}
|
||||
|
||||
void rfx_quantization_decode(INT16* WINPR_RESTRICT buffer, const UINT32* WINPR_RESTRICT quantVals)
|
||||
|
||||
@@ -225,14 +225,15 @@ fail:
|
||||
|
||||
YUV_CONTEXT* yuv_context_new(BOOL encoder, UINT32 ThreadingFlags)
|
||||
{
|
||||
SYSTEM_INFO sysInfos;
|
||||
SYSTEM_INFO sysInfos = { 0 };
|
||||
/** do it here to avoid a race condition between threads */
|
||||
if (!primitives_get())
|
||||
return NULL;
|
||||
|
||||
YUV_CONTEXT* ret = winpr_aligned_calloc(1, sizeof(*ret), 32);
|
||||
if (!ret)
|
||||
return NULL;
|
||||
|
||||
/** do it here to avoid a race condition between threads */
|
||||
primitives_get();
|
||||
|
||||
ret->encoder = encoder;
|
||||
if (!(ThreadingFlags & THREADING_FLAGS_DISABLE_THREADS))
|
||||
{
|
||||
|
||||
@@ -548,14 +548,14 @@ void freerdp_device_collection_free(rdpSettings* settings)
|
||||
if (settings->DeviceArray)
|
||||
{
|
||||
for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
|
||||
(void)freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, NULL);
|
||||
freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, NULL);
|
||||
}
|
||||
|
||||
free((void*)settings->DeviceArray);
|
||||
|
||||
(void)freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, NULL);
|
||||
(void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0);
|
||||
(void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0);
|
||||
freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, NULL);
|
||||
freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0);
|
||||
freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0);
|
||||
}
|
||||
|
||||
BOOL freerdp_static_channel_collection_del(rdpSettings* settings, const char* name)
|
||||
@@ -659,9 +659,9 @@ void freerdp_static_channel_collection_free(rdpSettings* settings)
|
||||
}
|
||||
|
||||
free((void*)settings->StaticChannelArray);
|
||||
(void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0);
|
||||
freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0);
|
||||
settings->StaticChannelArray = NULL;
|
||||
(void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0);
|
||||
freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0);
|
||||
}
|
||||
|
||||
BOOL freerdp_dynamic_channel_collection_del(rdpSettings* settings, const char* name)
|
||||
@@ -821,9 +821,9 @@ void freerdp_dynamic_channel_collection_free(rdpSettings* settings)
|
||||
}
|
||||
|
||||
free((void*)settings->DynamicChannelArray);
|
||||
(void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0);
|
||||
freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0);
|
||||
settings->DynamicChannelArray = NULL;
|
||||
(void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0);
|
||||
freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0);
|
||||
}
|
||||
|
||||
static void freerdp_capability_data_free(rdpSettings* settings, size_t offset, BOOL full)
|
||||
@@ -1082,41 +1082,37 @@ void freerdp_performance_flags_make(rdpSettings* settings)
|
||||
|
||||
if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
|
||||
PerformanceFlags |= PERF_DISABLE_THEMING;
|
||||
(void)freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags);
|
||||
freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags);
|
||||
}
|
||||
|
||||
void freerdp_performance_flags_split(rdpSettings* settings)
|
||||
{
|
||||
(void)freerdp_settings_set_bool(
|
||||
settings, FreeRDP_AllowFontSmoothing,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_ENABLE_FONT_SMOOTHING)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
(void)freerdp_settings_set_bool(
|
||||
settings, FreeRDP_AllowDesktopComposition,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_ENABLE_DESKTOP_COMPOSITION)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
(void)freerdp_settings_set_bool(
|
||||
freerdp_settings_set_bool(settings, FreeRDP_AllowFontSmoothing,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_ENABLE_FONT_SMOOTHING)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
freerdp_settings_set_bool(settings, FreeRDP_AllowDesktopComposition,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_ENABLE_DESKTOP_COMPOSITION)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
freerdp_settings_set_bool(
|
||||
settings, FreeRDP_DisableWallpaper,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_WALLPAPER)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
(void)freerdp_settings_set_bool(
|
||||
settings, FreeRDP_DisableFullWindowDrag,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_DISABLE_FULLWINDOWDRAG)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
(void)freerdp_settings_set_bool(
|
||||
settings, FreeRDP_DisableMenuAnims,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_DISABLE_MENUANIMATIONS)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
(void)freerdp_settings_set_bool(
|
||||
freerdp_settings_set_bool(settings, FreeRDP_DisableFullWindowDrag,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_DISABLE_FULLWINDOWDRAG)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
freerdp_settings_set_bool(settings, FreeRDP_DisableMenuAnims,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
|
||||
PERF_DISABLE_MENUANIMATIONS)
|
||||
? TRUE
|
||||
: FALSE);
|
||||
freerdp_settings_set_bool(
|
||||
settings, FreeRDP_DisableThemes,
|
||||
(freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_THEMING)
|
||||
? TRUE
|
||||
|
||||
@@ -335,12 +335,12 @@ void freerdp_settings_free_keys(rdpSettings* dst, BOOL cleanup)
|
||||
switch (cur->type)
|
||||
{
|
||||
case FREERDP_SETTINGS_TYPE_STRING: /* strings */
|
||||
(void)freerdp_settings_set_string_copy_(dst, (FreeRDP_Settings_Keys_String)cur->id,
|
||||
NULL, 0, cleanup);
|
||||
freerdp_settings_set_string_copy_(dst, (FreeRDP_Settings_Keys_String)cur->id, NULL,
|
||||
0, cleanup);
|
||||
break;
|
||||
case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */
|
||||
(void)freerdp_settings_set_pointer_len(dst, (FreeRDP_Settings_Keys_Pointer)cur->id,
|
||||
NULL, 0);
|
||||
freerdp_settings_set_pointer_len(dst, (FreeRDP_Settings_Keys_Pointer)cur->id, NULL,
|
||||
0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -864,7 +864,7 @@ UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
|
||||
if (!channels->connected)
|
||||
return 0;
|
||||
|
||||
(void)freerdp_channels_check_fds(channels, instance);
|
||||
freerdp_channels_check_fds(channels, instance);
|
||||
|
||||
/* tell all libraries we are shutting down */
|
||||
for (int index = 0; index < channels->clientDataCount; index++)
|
||||
@@ -894,7 +894,7 @@ UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
|
||||
channels->connected = FALSE;
|
||||
|
||||
/* Flush pending messages */
|
||||
(void)freerdp_channels_check_fds(channels, instance);
|
||||
freerdp_channels_check_fds(channels, instance);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -907,7 +907,7 @@ void freerdp_channels_close(rdpChannels* channels, freerdp* instance)
|
||||
WINPR_ASSERT(instance);
|
||||
|
||||
MessageQueue_PostQuit(channels->queue, 0);
|
||||
(void)freerdp_channels_check_fds(channels, instance);
|
||||
freerdp_channels_check_fds(channels, instance);
|
||||
|
||||
/* tell all libraries we are shutting down */
|
||||
for (int index = 0; index < channels->clientDataCount; index++)
|
||||
|
||||
@@ -113,7 +113,8 @@ static int freerdp_connect_begin(freerdp* instance)
|
||||
if (!freerdp_settings_set_default_order_support(settings))
|
||||
return -1;
|
||||
|
||||
freerdp_add_signal_cleanup_handler(instance->context, sig_abort_connect);
|
||||
if (!freerdp_add_signal_cleanup_handler(instance->context, sig_abort_connect))
|
||||
return -1;
|
||||
|
||||
IFCALLRET(instance->PreConnect, status, instance);
|
||||
instance->ConnectionCallbackState = CLIENT_STATE_PRECONNECT_PASSED;
|
||||
|
||||
@@ -1791,8 +1791,8 @@ BOOL gcc_read_server_security_data(wStream* s, rdpMcs* mcs)
|
||||
}
|
||||
return TRUE;
|
||||
fail:
|
||||
(void)freerdp_settings_set_pointer_len(settings, FreeRDP_ServerRandom, NULL, 0);
|
||||
(void)freerdp_settings_set_pointer_len(settings, FreeRDP_ServerCertificate, NULL, 0);
|
||||
freerdp_settings_set_pointer_len(settings, FreeRDP_ServerRandom, NULL, 0);
|
||||
freerdp_settings_set_pointer_len(settings, FreeRDP_ServerCertificate, NULL, 0);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -644,7 +644,7 @@ static BOOL rdp_read_info_string(rdpSettings* settings, FreeRDP_Settings_Keys_St
|
||||
if (terminator.w != L'\0')
|
||||
{
|
||||
WLog_ERR(TAG, "protocol error: Domain must be null terminated");
|
||||
(void)freerdp_settings_set_string(settings, id, NULL);
|
||||
freerdp_settings_set_string(settings, id, NULL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -449,13 +449,13 @@ static BOOL mcs_read_domain_parameters(wStream* s, DomainParameters* domainParam
|
||||
|
||||
static BOOL mcs_write_domain_parameters(wLog* log, wStream* s, DomainParameters* domainParameters)
|
||||
{
|
||||
BOOL rc = FALSE;
|
||||
size_t length = 0;
|
||||
wStream* tmps = NULL;
|
||||
|
||||
if (!s || !domainParameters)
|
||||
return FALSE;
|
||||
|
||||
tmps = Stream_New(NULL, Stream_Capacity(s));
|
||||
wStream* tmps = Stream_New(NULL, Stream_Capacity(s));
|
||||
|
||||
if (!tmps)
|
||||
{
|
||||
@@ -463,19 +463,31 @@ static BOOL mcs_write_domain_parameters(wLog* log, wStream* s, DomainParameters*
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ber_write_integer(tmps, domainParameters->maxChannelIds);
|
||||
ber_write_integer(tmps, domainParameters->maxUserIds);
|
||||
ber_write_integer(tmps, domainParameters->maxTokenIds);
|
||||
ber_write_integer(tmps, domainParameters->numPriorities);
|
||||
ber_write_integer(tmps, domainParameters->minThroughput);
|
||||
ber_write_integer(tmps, domainParameters->maxHeight);
|
||||
ber_write_integer(tmps, domainParameters->maxMCSPDUsize);
|
||||
ber_write_integer(tmps, domainParameters->protocolVersion);
|
||||
if (!ber_write_integer(tmps, domainParameters->maxChannelIds))
|
||||
goto fail;
|
||||
if (!ber_write_integer(tmps, domainParameters->maxUserIds))
|
||||
goto fail;
|
||||
if (!ber_write_integer(tmps, domainParameters->maxTokenIds))
|
||||
goto fail;
|
||||
if (!ber_write_integer(tmps, domainParameters->numPriorities))
|
||||
goto fail;
|
||||
if (!ber_write_integer(tmps, domainParameters->minThroughput))
|
||||
goto fail;
|
||||
if (!ber_write_integer(tmps, domainParameters->maxHeight))
|
||||
goto fail;
|
||||
if (!ber_write_integer(tmps, domainParameters->maxMCSPDUsize))
|
||||
goto fail;
|
||||
if (!ber_write_integer(tmps, domainParameters->protocolVersion))
|
||||
goto fail;
|
||||
length = Stream_GetPosition(tmps);
|
||||
ber_write_sequence_tag(s, length);
|
||||
if (!ber_write_sequence_tag(s, length))
|
||||
goto fail;
|
||||
Stream_Write(s, Stream_Buffer(tmps), length);
|
||||
|
||||
rc = TRUE;
|
||||
fail:
|
||||
Stream_Free(tmps, TRUE);
|
||||
return TRUE;
|
||||
return rc;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_MCS
|
||||
@@ -738,9 +750,11 @@ BOOL mcs_write_connect_initial(wStream* s, rdpMcs* mcs, wStream* userData)
|
||||
}
|
||||
|
||||
/* callingDomainSelector (OCTET_STRING) */
|
||||
ber_write_octet_string(tmps, callingDomainSelector, sizeof(callingDomainSelector));
|
||||
if (!ber_write_octet_string(tmps, callingDomainSelector, sizeof(callingDomainSelector)))
|
||||
goto out;
|
||||
/* calledDomainSelector (OCTET_STRING) */
|
||||
ber_write_octet_string(tmps, calledDomainSelector, sizeof(calledDomainSelector));
|
||||
if (!ber_write_octet_string(tmps, calledDomainSelector, sizeof(calledDomainSelector)))
|
||||
goto out;
|
||||
/* upwardFlag (BOOLEAN) */
|
||||
ber_write_BOOL(tmps, TRUE);
|
||||
|
||||
@@ -757,7 +771,8 @@ BOOL mcs_write_connect_initial(wStream* s, rdpMcs* mcs, wStream* userData)
|
||||
goto out;
|
||||
|
||||
/* userData (OCTET_STRING) */
|
||||
ber_write_octet_string(tmps, Stream_Buffer(userData), Stream_GetPosition(userData));
|
||||
if (!ber_write_octet_string(tmps, Stream_Buffer(userData), Stream_GetPosition(userData)))
|
||||
goto out;
|
||||
length = Stream_GetPosition(tmps);
|
||||
/* Connect-Initial (APPLICATION 101, IMPLICIT SEQUENCE) */
|
||||
ber_write_application_tag(s, MCS_TYPE_CONNECT_INITIAL, length);
|
||||
@@ -796,13 +811,15 @@ BOOL mcs_write_connect_response(wStream* s, rdpMcs* mcs, wStream* userData)
|
||||
}
|
||||
|
||||
ber_write_enumerated(tmps, 0, MCS_Result_enum_length);
|
||||
ber_write_integer(tmps, 0); /* calledConnectId */
|
||||
if (!ber_write_integer(tmps, 0)) /* calledConnectId */
|
||||
goto out;
|
||||
|
||||
if (!mcs_write_domain_parameters(mcs->log, tmps, &(mcs->domainParameters)))
|
||||
goto out;
|
||||
|
||||
/* userData (OCTET_STRING) */
|
||||
ber_write_octet_string(tmps, Stream_Buffer(userData), Stream_GetPosition(userData));
|
||||
if (!ber_write_octet_string(tmps, Stream_Buffer(userData), Stream_GetPosition(userData)))
|
||||
goto out;
|
||||
length = Stream_GetPosition(tmps);
|
||||
ber_write_application_tag(s, MCS_TYPE_CONNECT_RESPONSE, length);
|
||||
Stream_Write(s, Stream_Buffer(tmps), length);
|
||||
@@ -1048,6 +1065,7 @@ BOOL mcs_recv_erect_domain_request(rdpMcs* mcs, wStream* s)
|
||||
|
||||
BOOL mcs_send_erect_domain_request(rdpMcs* mcs)
|
||||
{
|
||||
int status = -1;
|
||||
UINT16 length = 12;
|
||||
|
||||
if (!mcs)
|
||||
@@ -1062,12 +1080,15 @@ BOOL mcs_send_erect_domain_request(rdpMcs* mcs)
|
||||
}
|
||||
|
||||
mcs_write_domain_mcspdu_header(s, DomainMCSPDU_ErectDomainRequest, length, 0);
|
||||
per_write_integer(s, 0); /* subHeight (INTEGER) */
|
||||
per_write_integer(s, 0); /* subInterval (INTEGER) */
|
||||
if (!per_write_integer(s, 0)) /* subHeight (INTEGER) */
|
||||
goto out;
|
||||
if (!per_write_integer(s, 0)) /* subInterval (INTEGER) */
|
||||
goto out;
|
||||
Stream_SealLength(s);
|
||||
|
||||
rdpTransport* transport = freerdp_get_transport(mcs->context);
|
||||
const int status = transport_write(transport, s);
|
||||
status = transport_write(transport, s);
|
||||
out:
|
||||
Stream_Free(s, TRUE);
|
||||
return (status < 0) ? FALSE : TRUE;
|
||||
}
|
||||
@@ -1152,6 +1173,7 @@ BOOL mcs_recv_attach_user_confirm(rdpMcs* mcs, wStream* s)
|
||||
|
||||
BOOL mcs_send_attach_user_confirm(rdpMcs* mcs)
|
||||
{
|
||||
int status = -1;
|
||||
UINT16 length = 11;
|
||||
|
||||
if (!mcs)
|
||||
@@ -1166,13 +1188,17 @@ BOOL mcs_send_attach_user_confirm(rdpMcs* mcs)
|
||||
}
|
||||
|
||||
mcs->userId = mcs->baseChannelId++;
|
||||
mcs_write_domain_mcspdu_header(s, DomainMCSPDU_AttachUserConfirm, length, 2);
|
||||
per_write_enumerated(s, 0, MCS_Result_enum_length); /* result */
|
||||
per_write_integer16(s, mcs->userId, MCS_BASE_CHANNEL_ID); /* initiator (UserId) */
|
||||
if (!mcs_write_domain_mcspdu_header(s, DomainMCSPDU_AttachUserConfirm, length, 2))
|
||||
goto out;
|
||||
if (!per_write_enumerated(s, 0, MCS_Result_enum_length)) /* result */
|
||||
goto out;
|
||||
if (!per_write_integer16(s, mcs->userId, MCS_BASE_CHANNEL_ID)) /* initiator (UserId) */
|
||||
goto out;
|
||||
Stream_SealLength(s);
|
||||
|
||||
rdpTransport* transport = freerdp_get_transport(mcs->context);
|
||||
const int status = transport_write(transport, s);
|
||||
status = transport_write(transport, s);
|
||||
out:
|
||||
Stream_Free(s, TRUE);
|
||||
return (status < 0) ? FALSE : TRUE;
|
||||
}
|
||||
@@ -1223,6 +1249,7 @@ BOOL mcs_recv_channel_join_request(rdpMcs* mcs, const rdpSettings* settings, wSt
|
||||
|
||||
BOOL mcs_send_channel_join_request(rdpMcs* mcs, UINT16 channelId)
|
||||
{
|
||||
int status = -1;
|
||||
UINT16 length = 12;
|
||||
|
||||
WINPR_ASSERT(mcs);
|
||||
@@ -1235,13 +1262,18 @@ BOOL mcs_send_channel_join_request(rdpMcs* mcs, UINT16 channelId)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mcs_write_domain_mcspdu_header(s, DomainMCSPDU_ChannelJoinRequest, length, 0);
|
||||
per_write_integer16(s, mcs->userId, MCS_BASE_CHANNEL_ID);
|
||||
per_write_integer16(s, channelId, 0);
|
||||
if (!mcs_write_domain_mcspdu_header(s, DomainMCSPDU_ChannelJoinRequest, length, 0))
|
||||
goto out;
|
||||
if (!per_write_integer16(s, mcs->userId, MCS_BASE_CHANNEL_ID))
|
||||
goto out;
|
||||
if (!per_write_integer16(s, channelId, 0))
|
||||
goto out;
|
||||
Stream_SealLength(s);
|
||||
|
||||
rdpTransport* transport = freerdp_get_transport(mcs->context);
|
||||
const int status = transport_write(transport, s);
|
||||
status = transport_write(transport, s);
|
||||
|
||||
out:
|
||||
Stream_Free(s, TRUE);
|
||||
return (status < 0) ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
@@ -328,14 +328,16 @@ const char* utils_is_vsock(const char* hostname)
|
||||
|
||||
static BOOL remove_rdpdr_type(rdpSettings* settings, UINT32 type)
|
||||
{
|
||||
BOOL rc = TRUE;
|
||||
RDPDR_DEVICE* printer = NULL;
|
||||
do
|
||||
{
|
||||
printer = freerdp_device_collection_find_type(settings, type);
|
||||
freerdp_device_collection_del(settings, printer);
|
||||
if (!freerdp_device_collection_del(settings, printer))
|
||||
rc = FALSE;
|
||||
freerdp_device_free(printer);
|
||||
} while (printer);
|
||||
return TRUE;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static BOOL disable_clipboard(rdpSettings* settings)
|
||||
|
||||
@@ -513,8 +513,10 @@ BOOL ber_read_octet_string(wStream* s, BYTE** content, size_t* length)
|
||||
|
||||
size_t ber_write_octet_string_tag(wStream* s, size_t length)
|
||||
{
|
||||
ber_write_universal_tag(s, BER_TAG_OCTET_STRING, FALSE);
|
||||
ber_write_length(s, length);
|
||||
if (ber_write_universal_tag(s, BER_TAG_OCTET_STRING, FALSE) == 0)
|
||||
return 0;
|
||||
if (ber_write_length(s, length) == 0)
|
||||
return 0;
|
||||
return 1 + _ber_sizeof_length(length);
|
||||
}
|
||||
|
||||
@@ -640,24 +642,30 @@ size_t ber_write_integer(wStream* s, UINT32 value)
|
||||
|
||||
if (value < 0x80)
|
||||
{
|
||||
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
|
||||
ber_write_length(s, 1);
|
||||
if (ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE) == 0)
|
||||
return 0;
|
||||
if (ber_write_length(s, 1) == 0)
|
||||
return 0;
|
||||
|
||||
Stream_Write_UINT8(s, WINPR_ASSERTING_INT_CAST(UINT8, value));
|
||||
return 3;
|
||||
}
|
||||
else if (value < 0x8000)
|
||||
{
|
||||
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
|
||||
ber_write_length(s, 2);
|
||||
if (ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE) == 0)
|
||||
return 0;
|
||||
if (ber_write_length(s, 2) == 0)
|
||||
return 0;
|
||||
|
||||
Stream_Write_UINT16_BE(s, WINPR_ASSERTING_INT_CAST(UINT16, value));
|
||||
return 4;
|
||||
}
|
||||
else if (value < 0x800000)
|
||||
{
|
||||
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
|
||||
ber_write_length(s, 3);
|
||||
if (ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE) == 0)
|
||||
return 0;
|
||||
if (ber_write_length(s, 3) == 0)
|
||||
return 0;
|
||||
|
||||
Stream_Write_UINT8(s, WINPR_ASSERTING_INT_CAST(UINT8, value >> 16));
|
||||
Stream_Write_UINT16_BE(s, WINPR_ASSERTING_INT_CAST(UINT16, value));
|
||||
@@ -665,8 +673,10 @@ size_t ber_write_integer(wStream* s, UINT32 value)
|
||||
}
|
||||
else if (value < 0x80000000)
|
||||
{
|
||||
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
|
||||
ber_write_length(s, 4);
|
||||
if (ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE) == 0)
|
||||
return 0;
|
||||
if (ber_write_length(s, 4) == 0)
|
||||
return 0;
|
||||
|
||||
Stream_Write_UINT32_BE(s, value);
|
||||
return 6;
|
||||
@@ -674,8 +684,10 @@ size_t ber_write_integer(wStream* s, UINT32 value)
|
||||
else
|
||||
{
|
||||
/* treat as signed integer i.e. NT/HRESULT error codes */
|
||||
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
|
||||
ber_write_length(s, 4);
|
||||
if (ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE) == 0)
|
||||
return 0;
|
||||
if (ber_write_length(s, 4) == 0)
|
||||
return 0;
|
||||
|
||||
Stream_Write_UINT32_BE(s, value);
|
||||
return 6;
|
||||
@@ -691,7 +703,8 @@ size_t ber_write_contextual_integer(wStream* s, BYTE tag, UINT32 value)
|
||||
WINPR_ASSERT(Stream_EnsureRemainingCapacity(s, len + 5));
|
||||
|
||||
len += ber_write_contextual_tag(s, tag, len, TRUE);
|
||||
ber_write_integer(s, value);
|
||||
if (ber_write_integer(s, value) == 0)
|
||||
return 0;
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
@@ -1394,8 +1394,8 @@ static BOOL is_accepted(rdpTls* tls, const rdpCertificate* cert)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
(void)freerdp_settings_set_string(settings, keyAccepted, NULL);
|
||||
(void)freerdp_settings_set_uint32(settings, keyLength, 0);
|
||||
freerdp_settings_set_string(settings, keyAccepted, NULL);
|
||||
freerdp_settings_set_uint32(settings, keyLength, 0);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -77,10 +77,9 @@ BOOL gdi_SetNullClipRgn(HGDI_DC hdc)
|
||||
|
||||
BOOL gdi_ClipCoords(HGDI_DC hdc, INT32* x, INT32* y, INT32* w, INT32* h, INT32* srcx, INT32* srcy)
|
||||
{
|
||||
GDI_RECT bmp;
|
||||
GDI_RECT clip;
|
||||
GDI_RECT coords;
|
||||
HGDI_BITMAP hBmp = NULL;
|
||||
GDI_RECT bmp = { 0 };
|
||||
GDI_RECT clip = { 0 };
|
||||
GDI_RECT coords = { 0 };
|
||||
int dx = 0;
|
||||
int dy = 0;
|
||||
BOOL draw = TRUE;
|
||||
@@ -88,18 +87,21 @@ BOOL gdi_ClipCoords(HGDI_DC hdc, INT32* x, INT32* y, INT32* w, INT32* h, INT32*
|
||||
if (hdc == NULL)
|
||||
return FALSE;
|
||||
|
||||
hBmp = (HGDI_BITMAP)hdc->selectedObject;
|
||||
HGDI_BITMAP hBmp = (HGDI_BITMAP)hdc->selectedObject;
|
||||
|
||||
if (hBmp != NULL)
|
||||
{
|
||||
if (hdc->clip->null)
|
||||
{
|
||||
gdi_CRgnToRect(0, 0, hBmp->width, hBmp->height, &clip);
|
||||
if (!gdi_CRgnToRect(0, 0, hBmp->width, hBmp->height, &clip))
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gdi_RgnToRect(hdc->clip, &clip);
|
||||
gdi_CRgnToRect(0, 0, hBmp->width, hBmp->height, &bmp);
|
||||
if (!gdi_RgnToRect(hdc->clip, &clip))
|
||||
return TRUE;
|
||||
if (!gdi_CRgnToRect(0, 0, hBmp->width, hBmp->height, &bmp))
|
||||
return FALSE;
|
||||
|
||||
if (clip.left < bmp.left)
|
||||
clip.left = bmp.left;
|
||||
@@ -116,10 +118,12 @@ BOOL gdi_ClipCoords(HGDI_DC hdc, INT32* x, INT32* y, INT32* w, INT32* h, INT32*
|
||||
}
|
||||
else
|
||||
{
|
||||
gdi_RgnToRect(hdc->clip, &clip);
|
||||
if (!gdi_RgnToRect(hdc->clip, &clip))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gdi_CRgnToRect(*x, *y, *w, *h, &coords);
|
||||
if (!gdi_CRgnToRect(*x, *y, *w, *h, &coords))
|
||||
return FALSE;
|
||||
|
||||
if (coords.right >= clip.left && coords.left <= clip.right && coords.bottom >= clip.top &&
|
||||
coords.top <= clip.bottom)
|
||||
@@ -159,6 +163,7 @@ BOOL gdi_ClipCoords(HGDI_DC hdc, INT32* x, INT32* y, INT32* w, INT32* h, INT32*
|
||||
if (srcy != NULL)
|
||||
*srcy += dy;
|
||||
|
||||
gdi_RectToCRgn(&coords, x, y, w, h);
|
||||
if (!gdi_RectToCRgn(&coords, x, y, w, h))
|
||||
return FALSE;
|
||||
return draw;
|
||||
}
|
||||
|
||||
@@ -732,7 +732,8 @@ static BOOL gdi_opaque_rect(rdpContext* context, const OPAQUE_RECT_ORDER* opaque
|
||||
if (!gdi || !gdi->drawing)
|
||||
return FALSE;
|
||||
|
||||
gdi_CRgnToRect(x, y, w, h, &rect);
|
||||
if (!gdi_CRgnToRect(x, y, w, h, &rect))
|
||||
return TRUE;
|
||||
|
||||
if (!gdi_decode_color(gdi, opaque_rect->color, &brush_color, NULL))
|
||||
return FALSE;
|
||||
@@ -775,7 +776,9 @@ static BOOL gdi_multi_opaque_rect(rdpContext* context,
|
||||
const INT32 w = rectangle->width;
|
||||
const INT32 h = rectangle->height;
|
||||
|
||||
gdi_CRgnToRect(x, y, w, h, &rect);
|
||||
ret = FALSE;
|
||||
if (!gdi_CRgnToRect(x, y, w, h, &rect))
|
||||
break;
|
||||
ret = gdi_FillRect(gdi->drawing->hdc, &rect, hBrush);
|
||||
|
||||
if (!ret)
|
||||
@@ -1152,7 +1155,8 @@ static BOOL gdi_surface_bits(rdpContext* context, const SURFACE_BITS_COMMAND* cm
|
||||
goto out;
|
||||
}
|
||||
|
||||
region16_union_rect(®ion, ®ion, &cmdRect);
|
||||
if (!region16_union_rect(®ion, ®ion, &cmdRect))
|
||||
goto out;
|
||||
break;
|
||||
|
||||
case RDP_CODEC_ID_NONE:
|
||||
@@ -1174,7 +1178,8 @@ static BOOL gdi_surface_bits(rdpContext* context, const SURFACE_BITS_COMMAND* cm
|
||||
goto out;
|
||||
}
|
||||
|
||||
region16_union_rect(®ion, ®ion, &cmdRect);
|
||||
if (!region16_union_rect(®ion, ®ion, &cmdRect))
|
||||
goto out;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -192,7 +192,10 @@ static UINT gdi_OutputUpdate(rdpGdi* gdi, gdiGfxSurface* surface)
|
||||
surfaceRect.top = 0;
|
||||
surfaceRect.right = (UINT16)MIN(UINT16_MAX, surface->mappedWidth);
|
||||
surfaceRect.bottom = (UINT16)MIN(UINT16_MAX, surface->mappedHeight);
|
||||
region16_intersect_rect(&(surface->invalidRegion), &(surface->invalidRegion), &surfaceRect);
|
||||
if (!region16_intersect_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&surfaceRect))
|
||||
goto fail;
|
||||
|
||||
const double sx = surface->outputTargetWidth / (double)surface->mappedWidth;
|
||||
const double sy = surface->outputTargetHeight / (double)surface->mappedHeight;
|
||||
|
||||
@@ -221,8 +224,9 @@ static UINT gdi_OutputUpdate(rdpGdi* gdi, gdiGfxSurface* surface)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
gdi_InvalidateRegion(gdi->primary->hdc, (INT32)nXDst, (INT32)nYDst, (INT32)dwidth,
|
||||
(INT32)dheight);
|
||||
if (!gdi_InvalidateRegion(gdi->primary->hdc, (INT32)nXDst, (INT32)nYDst, (INT32)dwidth,
|
||||
(INT32)dheight))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
rc = CHANNEL_RC_OK;
|
||||
@@ -389,7 +393,8 @@ static UINT gdi_SurfaceCommand_Uncompressed(rdpGdi* gdi, RdpgfxClientContext* co
|
||||
invalidRect.top = (UINT16)MIN(UINT16_MAX, cmd->top);
|
||||
invalidRect.right = (UINT16)MIN(UINT16_MAX, cmd->right);
|
||||
invalidRect.bottom = (UINT16)MIN(UINT16_MAX, cmd->bottom);
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect);
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect))
|
||||
goto fail;
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context, surface->surfaceId, 1,
|
||||
&invalidRect);
|
||||
|
||||
@@ -449,7 +454,10 @@ static UINT gdi_SurfaceCommand_RemoteFX(rdpGdi* gdi, RdpgfxClientContext* contex
|
||||
goto fail;
|
||||
|
||||
for (UINT32 x = 0; x < nrRects; x++)
|
||||
region16_union_rect(&surface->invalidRegion, &surface->invalidRegion, &rects[x]);
|
||||
{
|
||||
if (!region16_union_rect(&surface->invalidRegion, &surface->invalidRegion, &rects[x]))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
status = gdi_interFrameUpdate(gdi, context);
|
||||
|
||||
@@ -499,7 +507,8 @@ static UINT gdi_SurfaceCommand_ClearCodec(rdpGdi* gdi, RdpgfxClientContext* cont
|
||||
invalidRect.top = (UINT16)MIN(UINT16_MAX, cmd->top);
|
||||
invalidRect.right = (UINT16)MIN(UINT16_MAX, cmd->right);
|
||||
invalidRect.bottom = (UINT16)MIN(UINT16_MAX, cmd->bottom);
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect);
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect))
|
||||
goto fail;
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context, surface->surfaceId, 1,
|
||||
&invalidRect);
|
||||
|
||||
@@ -553,7 +562,8 @@ static UINT gdi_SurfaceCommand_Planar(rdpGdi* gdi, RdpgfxClientContext* context,
|
||||
invalidRect.top = (UINT16)MIN(UINT16_MAX, cmd->top);
|
||||
invalidRect.right = (UINT16)MIN(UINT16_MAX, cmd->right);
|
||||
invalidRect.bottom = (UINT16)MIN(UINT16_MAX, cmd->bottom);
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect);
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect))
|
||||
goto fail;
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context, surface->surfaceId, 1,
|
||||
&invalidRect);
|
||||
|
||||
@@ -629,8 +639,9 @@ static UINT gdi_SurfaceCommand_AVC420(rdpGdi* gdi, RdpgfxClientContext* context,
|
||||
|
||||
for (UINT32 i = 0; i < meta->numRegionRects; i++)
|
||||
{
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&(meta->regionRects[i]));
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&(meta->regionRects[i])))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context, surface->surfaceId,
|
||||
@@ -718,8 +729,9 @@ static UINT gdi_SurfaceCommand_AVC444(rdpGdi* gdi, RdpgfxClientContext* context,
|
||||
|
||||
for (UINT32 i = 0; i < meta1->numRegionRects; i++)
|
||||
{
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&(meta1->regionRects[i]));
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&(meta1->regionRects[i])))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context, surface->surfaceId,
|
||||
@@ -730,8 +742,9 @@ static UINT gdi_SurfaceCommand_AVC444(rdpGdi* gdi, RdpgfxClientContext* context,
|
||||
|
||||
for (UINT32 i = 0; i < meta2->numRegionRects; i++)
|
||||
{
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&(meta2->regionRects[i]));
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&(meta2->regionRects[i])))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context, surface->surfaceId,
|
||||
@@ -905,7 +918,8 @@ static UINT gdi_SurfaceCommand_Alpha(rdpGdi* gdi, RdpgfxClientContext* context,
|
||||
invalidRect.top = (UINT16)MIN(UINT16_MAX, cmd->top);
|
||||
invalidRect.right = (UINT16)MIN(UINT16_MAX, cmd->right);
|
||||
invalidRect.bottom = (UINT16)MIN(UINT16_MAX, cmd->bottom);
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect);
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect))
|
||||
goto fail;
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context, surface->surfaceId, 1,
|
||||
&invalidRect);
|
||||
|
||||
@@ -959,7 +973,7 @@ static UINT gdi_SurfaceCommand_Progressive(rdpGdi* gdi, RdpgfxClientContext* con
|
||||
const RDPGFX_SURFACE_COMMAND* cmd)
|
||||
{
|
||||
INT32 rc = 0;
|
||||
UINT status = CHANNEL_RC_OK;
|
||||
UINT status = ERROR_INTERNAL_ERROR;
|
||||
gdiGfxSurface* surface = NULL;
|
||||
REGION16 invalidRegion;
|
||||
const RECTANGLE_16* rects = NULL;
|
||||
@@ -1005,8 +1019,7 @@ static UINT gdi_SurfaceCommand_Progressive(rdpGdi* gdi, RdpgfxClientContext* con
|
||||
if (rc < 0)
|
||||
{
|
||||
WLog_ERR(TAG, "progressive_decompress failure: %" PRId32 "", rc);
|
||||
region16_uninit(&invalidRegion);
|
||||
return ERROR_INTERNAL_ERROR;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
rects = region16_rects(&invalidRegion, &nrRects);
|
||||
@@ -1016,14 +1029,18 @@ static UINT gdi_SurfaceCommand_Progressive(rdpGdi* gdi, RdpgfxClientContext* con
|
||||
if (status != CHANNEL_RC_OK)
|
||||
goto fail;
|
||||
|
||||
status = ERROR_INTERNAL_ERROR;
|
||||
for (UINT32 x = 0; x < nrRects; x++)
|
||||
region16_union_rect(&surface->invalidRegion, &surface->invalidRegion, &rects[x]);
|
||||
|
||||
region16_uninit(&invalidRegion);
|
||||
{
|
||||
if (!region16_union_rect(&surface->invalidRegion, &surface->invalidRegion, &rects[x]))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
status = gdi_interFrameUpdate(gdi, context);
|
||||
|
||||
fail:
|
||||
|
||||
region16_uninit(&invalidRegion);
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -1310,7 +1327,9 @@ static UINT gdi_SolidFill(RdpgfxClientContext* context, const RDPGFX_SOLID_FILL_
|
||||
invalidRect.left, invalidRect.top, nWidth, nHeight, color))
|
||||
goto fail;
|
||||
|
||||
region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion), &invalidRect);
|
||||
if (!region16_union_rect(&(surface->invalidRegion), &(surface->invalidRegion),
|
||||
&invalidRect))
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1385,8 +1404,9 @@ static UINT gdi_SurfaceToSurface(RdpgfxClientContext* context,
|
||||
goto fail;
|
||||
|
||||
invalidRect = rect;
|
||||
region16_union_rect(&surfaceDst->invalidRegion, &surfaceDst->invalidRegion,
|
||||
&invalidRect);
|
||||
if (!region16_union_rect(&surfaceDst->invalidRegion, &surfaceDst->invalidRegion,
|
||||
&invalidRect))
|
||||
goto fail;
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context,
|
||||
surfaceDst->surfaceId, 1, &invalidRect);
|
||||
|
||||
@@ -1537,7 +1557,8 @@ static UINT gdi_CacheToSurface(RdpgfxClientContext* context,
|
||||
goto fail;
|
||||
|
||||
invalidRect = rect;
|
||||
region16_union_rect(&surface->invalidRegion, &surface->invalidRegion, &invalidRect);
|
||||
if (!region16_union_rect(&surface->invalidRegion, &surface->invalidRegion, &invalidRect))
|
||||
goto fail;
|
||||
status = IFCALLRESULT(CHANNEL_RC_OK, context->UpdateSurfaceArea, context,
|
||||
surface->surfaceId, 1, &invalidRect);
|
||||
|
||||
|
||||
@@ -354,8 +354,10 @@ static BOOL gdi_Glyph_Draw(rdpContext* context, const rdpGlyph* glyph, INT32 x,
|
||||
if (!brush)
|
||||
return FALSE;
|
||||
|
||||
gdi_FillRect(gdi->drawing->hdc, &rect, brush);
|
||||
const BOOL res = gdi_FillRect(gdi->drawing->hdc, &rect, brush);
|
||||
gdi_DeleteObject((HGDIOBJECT)brush);
|
||||
if (!res)
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -414,7 +416,10 @@ static BOOL gdi_Glyph_BeginDraw(rdpContext* context, INT32 x, INT32 y, INT32 wid
|
||||
rect.bottom = y + height - 1;
|
||||
|
||||
if ((x + width > rect.left) && (y + height > rect.top))
|
||||
gdi_FillRect(gdi->drawing->hdc, &rect, brush);
|
||||
{
|
||||
if (!gdi_FillRect(gdi->drawing->hdc, &rect, brush))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gdi_DeleteObject((HGDIOBJECT)brush);
|
||||
}
|
||||
|
||||
@@ -445,8 +445,10 @@ inline BOOL gdi_CopyOverlap(INT32 x, INT32 y, INT32 width, INT32 height, INT32 s
|
||||
{
|
||||
GDI_RECT dst;
|
||||
GDI_RECT src;
|
||||
gdi_CRgnToRect(x, y, width, height, &dst);
|
||||
gdi_CRgnToRect(srcx, srcy, width, height, &src);
|
||||
if (!gdi_CRgnToRect(x, y, width, height, &dst))
|
||||
return FALSE;
|
||||
if (!gdi_CRgnToRect(srcx, srcy, width, height, &src))
|
||||
return FALSE;
|
||||
|
||||
if (dst.right < src.left)
|
||||
return FALSE;
|
||||
@@ -647,10 +649,12 @@ inline BOOL gdi_InvalidateRegion(HGDI_DC hdc, INT32 x, INT32 y, INT32 w, INT32 h
|
||||
cinvalid = new_rgn;
|
||||
}
|
||||
|
||||
gdi_SetRgn(&cinvalid[hdc->hwnd->ninvalid++], x, y, w, h);
|
||||
hdc->hwnd->cinvalid = cinvalid;
|
||||
invalid = hdc->hwnd->invalid;
|
||||
|
||||
if (!gdi_SetRgn(&cinvalid[hdc->hwnd->ninvalid++], x, y, w, h))
|
||||
return FALSE;
|
||||
|
||||
if (invalid->null)
|
||||
{
|
||||
invalid->x = x;
|
||||
@@ -661,8 +665,10 @@ inline BOOL gdi_InvalidateRegion(HGDI_DC hdc, INT32 x, INT32 y, INT32 w, INT32 h
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gdi_CRgnToRect(x, y, w, h, &rgn);
|
||||
gdi_RgnToRect(invalid, &inv);
|
||||
if (!gdi_CRgnToRect(x, y, w, h, &rgn))
|
||||
return FALSE;
|
||||
if (!gdi_RgnToRect(invalid, &inv))
|
||||
return FALSE;
|
||||
|
||||
if (rgn.left < inv.left)
|
||||
inv.left = rgn.left;
|
||||
@@ -676,6 +682,5 @@ inline BOOL gdi_InvalidateRegion(HGDI_DC hdc, INT32 x, INT32 y, INT32 w, INT32 h
|
||||
if (rgn.bottom > inv.bottom)
|
||||
inv.bottom = rgn.bottom;
|
||||
|
||||
gdi_RectToRgn(&inv, invalid);
|
||||
return TRUE;
|
||||
return gdi_RectToRgn(&inv, invalid);
|
||||
}
|
||||
|
||||
@@ -39,21 +39,15 @@
|
||||
|
||||
#define TAG FREERDP_TAG("gdi.shape")
|
||||
|
||||
static void Ellipse_Bresenham(HGDI_DC hdc, int x1, int y1, int x2, int y2)
|
||||
WINPR_ATTR_NODISCARD
|
||||
static BOOL Ellipse_Bresenham(HGDI_DC hdc, int x1, int y1, int x2, int y2)
|
||||
{
|
||||
INT32 e = 0;
|
||||
INT32 e2 = 0;
|
||||
INT32 dx = 0;
|
||||
INT32 dy = 0;
|
||||
INT32 a = 0;
|
||||
INT32 b = 0;
|
||||
INT32 c = 0;
|
||||
a = (x1 < x2) ? x2 - x1 : x1 - x2;
|
||||
b = (y1 < y2) ? y2 - y1 : y1 - y2;
|
||||
c = b & 1;
|
||||
dx = 4 * (1 - a) * b * b;
|
||||
dy = 4 * (c + 1) * a * a;
|
||||
e = dx + dy + c * a * a;
|
||||
INT32 a = (x1 < x2) ? x2 - x1 : x1 - x2;
|
||||
const INT32 b = (y1 < y2) ? y2 - y1 : y1 - y2;
|
||||
INT32 c = b & 1;
|
||||
INT32 dx = 4 * (1 - a) * b * b;
|
||||
INT32 dy = 4 * (c + 1) * a * a;
|
||||
INT32 e = dx + dy + c * a * a;
|
||||
|
||||
if (x1 > x2)
|
||||
{
|
||||
@@ -79,7 +73,8 @@ static void Ellipse_Bresenham(HGDI_DC hdc, int x1, int y1, int x2, int y2)
|
||||
WINPR_ASSERTING_INT_CAST(UINT32, y2), 0);
|
||||
gdi_SetPixel(hdc, WINPR_ASSERTING_INT_CAST(UINT32, x2),
|
||||
WINPR_ASSERTING_INT_CAST(UINT32, y2), 0);
|
||||
e2 = 2 * e;
|
||||
|
||||
const INT32 e2 = 2 * e;
|
||||
|
||||
if (e2 >= dx)
|
||||
{
|
||||
@@ -106,6 +101,7 @@ static void Ellipse_Bresenham(HGDI_DC hdc, int x1, int y1, int x2, int y2)
|
||||
gdi_SetPixel(hdc, WINPR_ASSERTING_INT_CAST(uint32_t, x1 - 1),
|
||||
WINPR_ASSERTING_INT_CAST(uint32_t, y2), 0);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -122,8 +118,7 @@ static void Ellipse_Bresenham(HGDI_DC hdc, int x1, int y1, int x2, int y2)
|
||||
*/
|
||||
BOOL gdi_Ellipse(HGDI_DC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
|
||||
{
|
||||
Ellipse_Bresenham(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||
return TRUE;
|
||||
return Ellipse_Bresenham(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,7 +143,8 @@ BOOL gdi_FillRect(HGDI_DC hdc, const GDI_RECT* rect, HGDI_BRUSH hbr)
|
||||
INT32 nHeight = 0;
|
||||
const BYTE* srcp = NULL;
|
||||
DWORD formatSize = 0;
|
||||
gdi_RectToCRgn(rect, &nXDest, &nYDest, &nWidth, &nHeight);
|
||||
if (!gdi_RectToCRgn(rect, &nXDest, &nYDest, &nWidth, &nHeight))
|
||||
return FALSE;
|
||||
|
||||
if (!hdc || !hbr)
|
||||
return FALSE;
|
||||
|
||||
@@ -80,7 +80,7 @@ static BOOL gdiVideoShowSurface(VideoClientContext* video, const VideoSurface* s
|
||||
|
||||
if ((gdi->width < 0) || (gdi->height < 0))
|
||||
goto fail;
|
||||
else
|
||||
|
||||
{
|
||||
const UINT32 nXSrc = surface->x;
|
||||
const UINT32 nYSrc = surface->y;
|
||||
@@ -106,11 +106,9 @@ static BOOL gdiVideoShowSurface(VideoClientContext* video, const VideoSurface* s
|
||||
(height > INT32_MAX))
|
||||
goto fail;
|
||||
|
||||
gdi_InvalidateRegion(gdi->primary->hdc, (INT32)nXDst, (INT32)nYDst, (INT32)width,
|
||||
(INT32)height);
|
||||
rc = gdi_InvalidateRegion(gdi->primary->hdc, (INT32)nXDst, (INT32)nYDst, (INT32)width,
|
||||
(INT32)height);
|
||||
}
|
||||
|
||||
rc = TRUE;
|
||||
fail:
|
||||
|
||||
if (!update_end_paint(update))
|
||||
|
||||
@@ -1825,7 +1825,9 @@ LONG smartcard_irp_device_control_call(scard_call_context* smartcard, wStream* o
|
||||
(ioControlCode != SCARD_IOCTL_RELEASETARTEDEVENT))
|
||||
{
|
||||
offset = (RDPDR_DEVICE_IO_RESPONSE_LENGTH + RDPDR_DEVICE_IO_CONTROL_RSP_HDR_LENGTH);
|
||||
smartcard_pack_write_size_align(out, Stream_GetPosition(out) - offset, 8);
|
||||
const LONG rc = smartcard_pack_write_size_align(out, Stream_GetPosition(out) - offset, 8);
|
||||
if (rc != SCARD_S_SUCCESS)
|
||||
result = rc;
|
||||
}
|
||||
|
||||
if ((result != SCARD_S_SUCCESS) && (result != SCARD_E_TIMEOUT) &&
|
||||
|
||||
Reference in New Issue
Block a user