[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:
Armin Novak
2026-02-16 10:57:57 +01:00
parent 20a24fe36e
commit df64d00a97
44 changed files with 479 additions and 291 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

View File

@@ -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))
{

View File

@@ -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

View File

@@ -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;

View File

@@ -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++)

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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(&region, &region, &cmdRect);
if (!region16_union_rect(&region, &region, &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(&region, &region, &cmdRect);
if (!region16_union_rect(&region, &region, &cmdRect))
goto out;
break;
default:

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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))

View File

@@ -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) &&