Skip to content

Commit a4b28d8

Browse files
authored
Merge pull request FreeRDP#11468 from akallabeth/order-flags
[core,settings] enforce OrderSupportFlags
2 parents b9bb4f5 + 87dbdae commit a4b28d8

File tree

5 files changed

+52
-5
lines changed

5 files changed

+52
-5
lines changed

libfreerdp/core/capabilities.c

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -653,14 +653,39 @@ static BOOL rdp_write_order_capability_set(wLog* log, wStream* s, const rdpSetti
653653

654654
if (settings->BitmapCacheV3Enabled)
655655
{
656-
orderSupportExFlags |= CACHE_BITMAP_V3_SUPPORT;
657-
orderFlags |= ORDER_FLAGS_EXTRA_SUPPORT;
656+
if ((orderSupportExFlags & CACHE_BITMAP_V3_SUPPORT) == 0)
657+
{
658+
WLog_Print(log, WLOG_ERROR,
659+
"rdpSettings::BitmapCacheV3Enabled=TRUE, but CACHE_BITMAP_V3_SUPPORT not "
660+
"set in rdpSettings::OrderSupportEx, aborting.");
661+
return FALSE;
662+
}
663+
if ((orderFlags & ORDER_FLAGS_EXTRA_SUPPORT) == 0)
664+
{
665+
WLog_Print(log, WLOG_ERROR,
666+
"rdpSettings::BitmapCacheV3Enabled=TRUE, but ORDER_FLAGS_EXTRA_SUPPORT not "
667+
"set in rdpSettings::OrderSupport, aborting.");
668+
return FALSE;
669+
}
658670
}
659671

660672
if (settings->FrameMarkerCommandEnabled)
661673
{
662-
orderSupportExFlags |= ALTSEC_FRAME_MARKER_SUPPORT;
663-
orderFlags |= ORDER_FLAGS_EXTRA_SUPPORT;
674+
if ((orderSupportExFlags & ALTSEC_FRAME_MARKER_SUPPORT) == 0)
675+
{
676+
WLog_Print(
677+
log, WLOG_ERROR,
678+
"rdpSettings::FrameMarkerCommandEnabled=TRUE, but "
679+
"ALTSEC_FRAME_MARKER_SUPPORT not set in rdpSettings::OrderSupportEx, aborting.");
680+
return FALSE;
681+
}
682+
if ((orderFlags & ORDER_FLAGS_EXTRA_SUPPORT) == 0)
683+
{
684+
WLog_Print(log, WLOG_ERROR,
685+
"rdpSettings::FrameMarkerCommandEnabled=TRUE, but ORDER_FLAGS_EXTRA_SUPPORT "
686+
"not set in rdpSettings::OrderSupport, aborting.");
687+
return FALSE;
688+
}
664689
}
665690

666691
const char* dsc = freerdp_settings_get_string(settings, FreeRDP_TerminalDescriptor);

libfreerdp/core/freerdp.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ static int freerdp_connect_begin(freerdp* instance)
121121
if (status)
122122
status = freerdp_settings_enforce_monitor_exists(settings);
123123

124+
if (status)
125+
status = freerdp_settings_enforce_consistency(settings);
126+
124127
if (status)
125128
status = freerdp_settings_check_client_after_preconnect(settings);
126129

libfreerdp/core/peer.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,9 @@ static state_run_t peer_recv_callback_internal(WINPR_ATTR_UNUSED rdpTransport* t
806806
switch (rdp_get_state(rdp))
807807
{
808808
case CONNECTION_STATE_INITIAL:
809-
if (rdp_server_transition_to_state(rdp, CONNECTION_STATE_NEGO))
809+
if (!freerdp_settings_enforce_consistency(settings))
810+
ret = STATE_RUN_FAILED;
811+
else if (rdp_server_transition_to_state(rdp, CONNECTION_STATE_NEGO))
810812
ret = STATE_RUN_CONTINUE;
811813
break;
812814

libfreerdp/core/settings.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1764,3 +1764,19 @@ BOOL freerdp_settings_enforce_monitor_exists(rdpSettings* settings)
17641764

17651765
return TRUE;
17661766
}
1767+
1768+
BOOL freerdp_settings_enforce_consistency(rdpSettings* settings)
1769+
{
1770+
if (freerdp_settings_get_bool(settings, FreeRDP_BitmapCacheV3Enabled))
1771+
{
1772+
settings->OrderSupportFlagsEx |= CACHE_BITMAP_V3_SUPPORT;
1773+
settings->OrderSupportFlags |= ORDER_FLAGS_EXTRA_SUPPORT;
1774+
}
1775+
1776+
if (settings->FrameMarkerCommandEnabled)
1777+
{
1778+
settings->OrderSupportFlagsEx |= ALTSEC_FRAME_MARKER_SUPPORT;
1779+
settings->OrderSupportFlags |= ORDER_FLAGS_EXTRA_SUPPORT;
1780+
}
1781+
return TRUE;
1782+
}

libfreerdp/core/settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
#include <string.h>
3737

38+
FREERDP_LOCAL BOOL freerdp_settings_enforce_consistency(rdpSettings* settings);
3839
FREERDP_LOCAL BOOL freerdp_settings_enforce_monitor_exists(rdpSettings* settings);
3940
FREERDP_LOCAL void freerdp_settings_print_warnings(const rdpSettings* settings);
4041
FREERDP_LOCAL BOOL freerdp_settings_check_client_after_preconnect(const rdpSettings* settings);

0 commit comments

Comments
 (0)