From ba41d5e532121a698b02b00981771802b4fec310 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Sun, 15 Sep 2024 08:43:31 +0200 Subject: [PATCH] [warnings] fix unchecked return --- client/Mac/cli/AppDelegate.m | 6 ++- client/Windows/wf_client.c | 12 +++-- client/Windows/wf_event.c | 13 +++-- client/common/client.c | 21 +++++--- client/common/cmdline.c | 12 +++-- client/iOS/Models/RDPSession.m | 6 +-- libfreerdp/codec/clear.c | 20 +++++--- libfreerdp/codec/progressive.c | 4 +- libfreerdp/common/settings.c | 54 +++++++++++---------- libfreerdp/common/settings_str.c | 8 ++-- libfreerdp/core/capabilities.c | 7 ++- libfreerdp/core/info.c | 2 +- libfreerdp/core/settings.c | 6 ++- libfreerdp/crypto/tls.c | 4 +- server/proxy/pf_client.c | 33 ++++++++----- server/shadow/Win/win_wds.c | 59 ++++++++++++----------- server/shadow/shadow_client.c | 82 ++++++++++++++++++++++---------- server/shadow/shadow_server.c | 3 +- 18 files changed, 216 insertions(+), 136 deletions(-) diff --git a/client/Mac/cli/AppDelegate.m b/client/Mac/cli/AppDelegate.m index 8c13e8569..18ef147f6 100644 --- a/client/Mac/cli/AppDelegate.m +++ b/client/Mac/cli/AppDelegate.m @@ -54,8 +54,10 @@ void mac_set_view_size(rdpContext *context, MRDPView *view); if (freerdp_settings_get_bool(settings, FreeRDP_Fullscreen)) { - freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, screenFrame.size.width); - freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, screenFrame.size.height); + (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, + screenFrame.size.width); + (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, + screenFrame.size.height); } PubSub_SubscribeConnectionResult(context->pubSub, AppDelegate_ConnectionResultEventHandler); diff --git a/client/Windows/wf_client.c b/client/Windows/wf_client.c index 68080b3d9..c7dbb2820 100644 --- a/client/Windows/wf_client.c +++ b/client/Windows/wf_client.c @@ -264,16 +264,19 @@ static BOOL wf_pre_connect(freerdp* instance) if (desktopWidth != freerdp_settings_get_uint32(settings, FreeRDP_DesktopWidth)) { - freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, desktopWidth); + if (!freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, desktopWidth)) + return FALSE; } if (desktopHeight != freerdp_settings_get_uint32(settings, FreeRDP_DesktopHeight)) { - freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, desktopHeight); + if (!freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, desktopHeight)) + return FALSE; } rc = freerdp_keyboard_init(freerdp_settings_get_uint32(settings, FreeRDP_KeyboardLayout)); - freerdp_settings_set_uint32(settings, FreeRDP_KeyboardLayout, rc); + if (!freerdp_settings_set_uint32(settings, FreeRDP_KeyboardLayout, rc)) + return FALSE; PubSub_SubscribeChannelConnected(instance->context->pubSub, wf_OnChannelConnectedEventHandler); PubSub_SubscribeChannelDisconnected(instance->context->pubSub, wf_OnChannelDisconnectedEventHandler); @@ -1338,7 +1341,8 @@ static BOOL wfreerdp_client_new(freerdp* instance, rdpContext* context) instance->AuthenticateEx = wf_authenticate_ex; #ifdef WITH_WINDOWS_CERT_STORE - freerdp_settings_set_bool(context->settings, FreeRDP_CertificateCallbackPreferPEM, TRUE); + if (!freerdp_settings_set_bool(context->settings, FreeRDP_CertificateCallbackPreferPEM, TRUE)) + return FALSE; #endif if (!wfc->isConsole) diff --git a/client/Windows/wf_event.c b/client/Windows/wf_event.c index 46cd40bc8..5ece73712 100644 --- a/client/Windows/wf_event.c +++ b/client/Windows/wf_event.c @@ -360,8 +360,9 @@ static void wf_send_resize(wfContext* wfc) { WLog_ERR("", "SendMonitorLayout failed."); } - freerdp_settings_set_uint32(settings, FreeRDP_SmartSizingWidth, targetWidth); - freerdp_settings_set_uint32(settings, FreeRDP_SmartSizingHeight, targetHeight); + (void)freerdp_settings_set_uint32(settings, FreeRDP_SmartSizingWidth, targetWidth); + (void)freerdp_settings_set_uint32(settings, FreeRDP_SmartSizingHeight, + targetHeight); } wfc->lastSentDate = GetTickCount64(); } @@ -725,7 +726,7 @@ LRESULT CALLBACK wf_event_proc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam { HMENU hMenu = GetSystemMenu(wfc->hwnd, FALSE); const BOOL rc = freerdp_settings_get_bool(settings, FreeRDP_SmartSizing); - freerdp_settings_set_bool(settings, FreeRDP_SmartSizing, !rc); + (void)freerdp_settings_set_bool(settings, FreeRDP_SmartSizing, !rc); CheckMenuItem(hMenu, SYSCOMMAND_ID_SMARTSIZING, freerdp_settings_get_bool(settings, FreeRDP_SmartSizing) ? MF_CHECKED @@ -778,7 +779,8 @@ LRESULT CALLBACK wf_event_proc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam case WM_SETFOCUS: DEBUG_KBD("getting focus %X", hWnd); - freerdp_settings_set_bool(wfc->common.context.settings, FreeRDP_SuspendInput, FALSE); + (void)freerdp_settings_set_bool(wfc->common.context.settings, FreeRDP_SuspendInput, + FALSE); if (alt_ctrl_down()) g_flipping_in = TRUE; @@ -788,7 +790,8 @@ LRESULT CALLBACK wf_event_proc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam break; case WM_KILLFOCUS: - freerdp_settings_set_bool(wfc->common.context.settings, FreeRDP_SuspendInput, TRUE); + (void)freerdp_settings_set_bool(wfc->common.context.settings, FreeRDP_SuspendInput, + TRUE); if (g_focus_hWnd == hWnd && wfc && !wfc->fullscreen) { diff --git a/client/common/client.c b/client/common/client.c index 02972bfd9..a1d011bb2 100644 --- a/client/common/client.c +++ b/client/common/client.c @@ -254,21 +254,28 @@ static BOOL freerdp_client_settings_post_process(rdpSettings* settings) * that the rdp file also triggers this functionality */ if (freerdp_settings_get_bool(settings, FreeRDP_SpanMonitors)) { - freerdp_settings_set_bool(settings, FreeRDP_UseMultimon, TRUE); - freerdp_settings_set_bool(settings, FreeRDP_Fullscreen, TRUE); + if (!freerdp_settings_set_bool(settings, FreeRDP_UseMultimon, TRUE)) + goto out_error; + if (!freerdp_settings_set_bool(settings, FreeRDP_Fullscreen, TRUE)) + goto out_error; } else if (freerdp_settings_get_bool(settings, FreeRDP_UseMultimon)) { - freerdp_settings_set_bool(settings, FreeRDP_Fullscreen, TRUE); + if (!freerdp_settings_set_bool(settings, FreeRDP_Fullscreen, TRUE)) + goto out_error; } /* deal with the smartcard / smartcard logon stuff */ if (freerdp_settings_get_bool(settings, FreeRDP_SmartcardLogon)) { - freerdp_settings_set_bool(settings, FreeRDP_TlsSecurity, TRUE); - freerdp_settings_set_bool(settings, FreeRDP_RedirectSmartCards, TRUE); - freerdp_settings_set_bool(settings, FreeRDP_DeviceRedirection, TRUE); - freerdp_settings_set_bool(settings, FreeRDP_PasswordIsSmartcardPin, TRUE); + if (!freerdp_settings_set_bool(settings, FreeRDP_TlsSecurity, TRUE)) + goto out_error; + if (!freerdp_settings_set_bool(settings, FreeRDP_RedirectSmartCards, TRUE)) + goto out_error; + if (!freerdp_settings_set_bool(settings, FreeRDP_DeviceRedirection, TRUE)) + goto out_error; + if (!freerdp_settings_set_bool(settings, FreeRDP_PasswordIsSmartcardPin, TRUE)) + goto out_error; } return TRUE; diff --git a/client/common/cmdline.c b/client/common/cmdline.c index d50cff5b1..cddb58f0d 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -4195,9 +4195,12 @@ static int freerdp_client_settings_parse_command_line_arguments_int( else compatibility = freerdp_client_detect_command_line(argc - 1, &argv[1], &flags); - freerdp_settings_set_string(settings, FreeRDP_ProxyHostname, NULL); - freerdp_settings_set_string(settings, FreeRDP_ProxyUsername, NULL); - freerdp_settings_set_string(settings, FreeRDP_ProxyPassword, NULL); + if (!freerdp_settings_set_string(settings, FreeRDP_ProxyHostname, NULL)) + return -1; + if (!freerdp_settings_set_string(settings, FreeRDP_ProxyUsername, NULL)) + return -1; + if (!freerdp_settings_set_string(settings, FreeRDP_ProxyPassword, NULL)) + return -1; if (compatibility) { @@ -4644,7 +4647,8 @@ static int freerdp_client_settings_parse_command_line_arguments_int( } CommandLineSwitchCase(arg, "disable-output") { - freerdp_settings_set_bool(settings, FreeRDP_DeactivateClientDecoding, enable); + if (!freerdp_settings_set_bool(settings, FreeRDP_DeactivateClientDecoding, enable)) + return fail_at(arg, COMMAND_LINE_ERROR); } CommandLineSwitchCase(arg, "home-drive") { diff --git a/client/iOS/Models/RDPSession.m b/client/iOS/Models/RDPSession.m index 1092af2dc..964582414 100644 --- a/client/iOS/Models/RDPSession.m +++ b/client/iOS/Models/RDPSession.m @@ -309,8 +309,8 @@ out_free: { [_params setInt:size.width forKey:@"width"]; [_params setInt:size.height forKey:@"height"]; - freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, size.width); - freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, size.height); + (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, size.width); + (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, size.height); } } @@ -320,7 +320,7 @@ out_free: if (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth) <= 16) { const UINT32 w = freerdp_settings_get_uint32(settings, FreeRDP_DesktopWidth) & (~1); - freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, w); + (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, w); } [self performSelectorInBackground:@selector(runSession) withObject:nil]; diff --git a/libfreerdp/codec/clear.c b/libfreerdp/codec/clear.c index bab38d203..b0813937d 100644 --- a/libfreerdp/codec/clear.c +++ b/libfreerdp/codec/clear.c @@ -793,10 +793,13 @@ static BOOL clear_decompress_bands_data(CLEAR_CONTEXT* WINPR_RESTRICT clear, if ((y + count) > vBarPixelCount) count = (vBarPixelCount > y) ? (vBarPixelCount - y) : 0; - while (count--) + if (count > 0) { - FreeRDPWriteColor(dstBuffer, clear->format, colorBkg); - dstBuffer += FreeRDPGetBytesPerPixel(clear->format); + while (count--) + { + FreeRDPWriteColor(dstBuffer, clear->format, colorBkg); + dstBuffer += FreeRDPGetBytesPerPixel(clear->format); + } } /* @@ -836,12 +839,15 @@ static BOOL clear_decompress_bands_data(CLEAR_CONTEXT* WINPR_RESTRICT clear, y = vBarYOn + vBarShortPixelCount; count = (vBarPixelCount > y) ? (vBarPixelCount - y) : 0; - while (count--) + if (count > 0) { - if (!FreeRDPWriteColor(dstBuffer, clear->format, colorBkg)) - return FALSE; + while (count--) + { + if (!FreeRDPWriteColor(dstBuffer, clear->format, colorBkg)) + return FALSE; - dstBuffer += FreeRDPGetBytesPerPixel(clear->format); + dstBuffer += FreeRDPGetBytesPerPixel(clear->format); + } } vBarEntry->count = vBarPixelCount; diff --git a/libfreerdp/codec/progressive.c b/libfreerdp/codec/progressive.c index 275f87ca0..04038d526 100644 --- a/libfreerdp/codec/progressive.c +++ b/libfreerdp/codec/progressive.c @@ -1141,7 +1141,9 @@ static INLINE INT16 progressive_rfx_srl_read(RFX_PROGRESSIVE_UPGRADE_STATE* WINP mag++; } - return sign ? -1 * mag : mag; + if (mag > INT16_MAX) + mag = INT16_MAX; + return (INT16)(sign ? -1 * mag : mag); } static INLINE int diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index 327ad2efb..9995dd8eb 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -833,9 +833,9 @@ void freerdp_dynamic_channel_collection_free(rdpSettings* settings) } free(settings->DynamicChannelArray); - freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0); + (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0); settings->DynamicChannelArray = NULL; - freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0); + (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0); } void freerdp_capability_buffer_free(rdpSettings* settings) @@ -968,37 +968,41 @@ void freerdp_performance_flags_make(rdpSettings* settings) if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes)) PerformanceFlags |= PERF_DISABLE_THEMING; - freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags); + (void)freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags); } void freerdp_performance_flags_split(rdpSettings* settings) { - 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( + (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( settings, FreeRDP_DisableWallpaper, (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_WALLPAPER) ? TRUE : FALSE); - 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( + (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( settings, FreeRDP_DisableThemes, (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_THEMING) ? TRUE diff --git a/libfreerdp/common/settings_str.c b/libfreerdp/common/settings_str.c index 507295142..4841049e1 100644 --- a/libfreerdp/common/settings_str.c +++ b/libfreerdp/common/settings_str.c @@ -326,12 +326,12 @@ void freerdp_settings_free_keys(rdpSettings* dst, BOOL cleanup) switch (cur->type) { case FREERDP_SETTINGS_TYPE_STRING: /* strings */ - freerdp_settings_set_string_copy_(dst, (FreeRDP_Settings_Keys_String)cur->id, NULL, - 0, cleanup); + (void)freerdp_settings_set_string_copy_(dst, (FreeRDP_Settings_Keys_String)cur->id, + NULL, 0, cleanup); break; case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */ - freerdp_settings_set_pointer_len(dst, (FreeRDP_Settings_Keys_Pointer)cur->id, NULL, - 0); + (void)freerdp_settings_set_pointer_len(dst, (FreeRDP_Settings_Keys_Pointer)cur->id, + NULL, 0); break; } } diff --git a/libfreerdp/core/capabilities.c b/libfreerdp/core/capabilities.c index c446a7698..1152989a8 100644 --- a/libfreerdp/core/capabilities.c +++ b/libfreerdp/core/capabilities.c @@ -362,8 +362,11 @@ static BOOL rdp_apply_bitmap_capability_set(rdpSettings* settings, const rdpSett WINPR_ASSERT(src); if (!settings->ServerMode) - freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, - freerdp_settings_get_uint32(src, FreeRDP_ColorDepth)); + { + if (!freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, + freerdp_settings_get_uint32(src, FreeRDP_ColorDepth))) + return FALSE; + } if (!src->DesktopResize) settings->DesktopResize = FALSE; diff --git a/libfreerdp/core/info.c b/libfreerdp/core/info.c index 9d20a6eca..ccdb7bbf6 100644 --- a/libfreerdp/core/info.c +++ b/libfreerdp/core/info.c @@ -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"); - freerdp_settings_set_string(settings, id, NULL); + (void)freerdp_settings_set_string(settings, id, NULL); return FALSE; } diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index bed0abbb9..f140e8b8d 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -800,8 +800,10 @@ rdpSettings* freerdp_settings_new(DWORD flags) goto out_fail; settings->OrderSupport = calloc(1, 32); - freerdp_settings_set_uint16(settings, FreeRDP_TLSMinVersion, TLS1_VERSION); - freerdp_settings_set_uint16(settings, FreeRDP_TLSMaxVersion, 0); + if (!freerdp_settings_set_uint16(settings, FreeRDP_TLSMinVersion, TLS1_VERSION)) + goto out_fail; + if (!freerdp_settings_set_uint16(settings, FreeRDP_TLSMaxVersion, 0)) + goto out_fail; if (!settings->OrderSupport) goto out_fail; diff --git a/libfreerdp/crypto/tls.c b/libfreerdp/crypto/tls.c index 18c3b40e3..ef3182882 100644 --- a/libfreerdp/crypto/tls.c +++ b/libfreerdp/crypto/tls.c @@ -1353,8 +1353,8 @@ static BOOL is_accepted(rdpTls* tls, const rdpCertificate* cert) return TRUE; } - freerdp_settings_set_string(settings, keyAccepted, NULL); - freerdp_settings_set_uint32(settings, keyLength, 0); + (void)freerdp_settings_set_string(settings, keyAccepted, NULL); + (void)freerdp_settings_set_uint32(settings, keyLength, 0); return FALSE; } diff --git a/server/proxy/pf_client.c b/server/proxy/pf_client.c index 3e53b1b68..cd6729ec1 100644 --- a/server/proxy/pf_client.c +++ b/server/proxy/pf_client.c @@ -702,31 +702,36 @@ static BOOL pf_client_should_retry_without_nla(pClientContext* pc) return config->ClientTlsSecurity || config->ClientRdpSecurity; } -static void pf_client_set_security_settings(pClientContext* pc) +static BOOL pf_client_set_security_settings(pClientContext* pc) { - rdpSettings* settings = NULL; - const proxyConfig* config = NULL; - WINPR_ASSERT(pc); WINPR_ASSERT(pc->pdata); - settings = pc->context.settings; + rdpSettings* settings = pc->context.settings; WINPR_ASSERT(settings); - config = pc->pdata->config; + const proxyConfig* config = pc->pdata->config; WINPR_ASSERT(config); - freerdp_settings_set_bool(settings, FreeRDP_RdpSecurity, config->ClientRdpSecurity); - freerdp_settings_set_bool(settings, FreeRDP_TlsSecurity, config->ClientTlsSecurity); - freerdp_settings_set_bool(settings, FreeRDP_NlaSecurity, config->ClientNlaSecurity); + if (!freerdp_settings_set_bool(settings, FreeRDP_RdpSecurity, config->ClientRdpSecurity)) + return FALSE; + if (!freerdp_settings_set_bool(settings, FreeRDP_TlsSecurity, config->ClientTlsSecurity)) + return FALSE; + if (!freerdp_settings_set_bool(settings, FreeRDP_NlaSecurity, config->ClientNlaSecurity)) + return FALSE; if (pf_client_use_proxy_smartcard_auth(settings)) { /* Smartcard authentication requires smartcard redirection to be enabled */ - freerdp_settings_set_bool(settings, FreeRDP_RedirectSmartCards, TRUE); + if (!freerdp_settings_set_bool(settings, FreeRDP_RedirectSmartCards, TRUE)) + return FALSE; /* Reset username/domain, we will get that info later from the sc cert */ - freerdp_settings_set_string(settings, FreeRDP_Username, NULL); - freerdp_settings_set_string(settings, FreeRDP_Domain, NULL); + if (!freerdp_settings_set_string(settings, FreeRDP_Username, NULL)) + return FALSE; + if (!freerdp_settings_set_string(settings, FreeRDP_Domain, NULL)) + return FALSE; } + + return TRUE; } static BOOL pf_client_connect_without_nla(pClientContext* pc) @@ -774,7 +779,9 @@ static BOOL pf_client_connect(freerdp* instance) freerdp_settings_get_string(settings, FreeRDP_Username), freerdp_settings_get_string(settings, FreeRDP_Domain)); - pf_client_set_security_settings(pc); + if (!pf_client_set_security_settings(pc)) + return FALSE; + if (pf_client_should_retry_without_nla(pc)) retry = pc->allow_next_conn_failure = TRUE; diff --git a/server/shadow/Win/win_wds.c b/server/shadow/Win/win_wds.c index 197e61fb7..aaddcb1d8 100644 --- a/server/shadow/Win/win_wds.c +++ b/server/shadow/Win/win_wds.c @@ -515,24 +515,23 @@ int win_shadow_wds_wnd_init(winShadowSubsystem* subsystem) int win_shadow_wds_init(winShadowSubsystem* subsystem) { - int status; - HRESULT hr; - DWORD dwCookie; - long left, top; - long right, bottom; - long width, height; - IUnknown* pUnknown; - rdpSettings* settings; - BSTR bstrAuthString; - BSTR bstrGroupName; - BSTR bstrPassword; - BSTR bstrPropertyName; + int status = -1; + + long left = 0; + long top = 0; + long right = 0; + long bottom = 0; + BSTR bstrAuthString = NULL; + BSTR bstrGroupName = NULL; + BSTR bstrPassword = NULL; + BSTR bstrPropertyName = NULL; VARIANT varPropertyValue; - rdpAssistanceFile* file; - IConnectionPoint* pCP; - IConnectionPointContainer* pCPC; + rdpAssistanceFile* file = NULL; + IConnectionPoint* pCP = NULL; + IConnectionPointContainer* pCPC = NULL; + win_shadow_wds_wnd_init(subsystem); - hr = OleInitialize(NULL); + HRESULT hr = OleInitialize(NULL); if (FAILED(hr)) { @@ -557,7 +556,7 @@ int win_shadow_wds_init(winShadowSubsystem* subsystem) return -1; } - pUnknown = (IUnknown*)subsystem->pSharingSession; + IUnknown* pUnknown = (IUnknown*)subsystem->pSharingSession; hr = pUnknown->lpVtbl->QueryInterface(pUnknown, &IID_IConnectionPointContainer, (void**)&pCPC); if (FAILED(hr)) @@ -577,7 +576,7 @@ int win_shadow_wds_init(winShadowSubsystem* subsystem) return -1; } - dwCookie = 0; + DWORD dwCookie = 0; subsystem->pSessionEvents = &Shadow_IRDPSessionEvents; subsystem->pSessionEvents->lpVtbl->AddRef(subsystem->pSessionEvents); hr = pCP->lpVtbl->Advise(pCP, (IUnknown*)subsystem->pSessionEvents, &dwCookie); @@ -605,8 +604,8 @@ int win_shadow_wds_init(winShadowSubsystem* subsystem) return -1; } - width = right - left; - height = bottom - top; + long width = right - left; + long height = bottom - top; WLog_INFO( TAG, "GetDesktopSharedRect(): left: %ld top: %ld right: %ld bottom: %ld width: %ld height: %ld", @@ -765,13 +764,19 @@ int win_shadow_wds_init(winShadowSubsystem* subsystem) return status; } - settings = subsystem->shw->settings; - status = freerdp_assistance_populate_settings_from_assistance_file(file, settings); - freerdp_settings_set_string(settings, FreeRDP_Domain, "RDP"); - freerdp_settings_set_string(settings, FreeRDP_Username, "Shadow"); - freerdp_settings_set_bool(settings, FreeRDP_AutoLogonEnabled, TRUE); - freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, width); - freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, height); + rdpSetting* settings = subsystem->shw->settings; + if (!freerdp_assistance_populate_settings_from_assistance_file(file, settings)) + return -1; + if (!freerdp_settings_set_string(settings, FreeRDP_Domain, "RDP")) + return -1; + if (!freerdp_settings_set_string(settings, FreeRDP_Username, "Shadow")) + return -1; + if (!freerdp_settings_set_bool(settings, FreeRDP_AutoLogonEnabled, TRUE)) + return -1; + if (!freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, width)) + return -1; + if (!freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, height)) + return -1; status = win_shadow_rdp_start(subsystem); if (status < 0) diff --git a/server/shadow/shadow_client.c b/server/shadow/shadow_client.c index 20d88806c..60f0e06e2 100644 --- a/server/shadow/shadow_client.c +++ b/server/shadow/shadow_client.c @@ -746,14 +746,21 @@ static BOOL shadow_client_logon(freerdp_peer* peer, const SEC_WINNT_AUTH_IDENTIT goto fail; if (user) - freerdp_settings_set_string(settings, FreeRDP_Username, user); + { + if (!freerdp_settings_set_string(settings, FreeRDP_Username, user)) + goto fail; + } if (domain) - freerdp_settings_set_string(settings, FreeRDP_Domain, domain); - + { + if (!freerdp_settings_set_string(settings, FreeRDP_Domain, domain)) + goto fail; + } if (password) - freerdp_settings_set_string(settings, FreeRDP_Password, password); - + { + if (!freerdp_settings_set_string(settings, FreeRDP_Password, password)) + goto fail; + } rc = TRUE; fail: free(user); @@ -959,9 +966,12 @@ static UINT shadow_client_rdpgfx_caps_advertise(RdpgfxServerContext* context, h264 = (shadow_encoder_prepare(client->encoder, FREERDP_CODEC_AVC420 | FREERDP_CODEC_AVC444) >= 0); #else - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444v2, FALSE); - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444, FALSE); - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE); + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444v2, FALSE)) + return rc; + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444, FALSE)) + return rc; + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE)) + return rc; #endif /* Request full screen update for new gfx channel */ @@ -1019,25 +1029,38 @@ static UINT shadow_client_rdpgfx_caps_advertise(RdpgfxServerContext* context, flags = pdu.capsSet->flags; - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444v2, FALSE); - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444, FALSE); + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444v2, FALSE)) + return rc; + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444, FALSE)) + return rc; - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxThinClient, - (flags & RDPGFX_CAPS_FLAG_THINCLIENT) ? TRUE : FALSE); - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxSmallCache, - (flags & RDPGFX_CAPS_FLAG_SMALL_CACHE) ? TRUE : FALSE); + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxThinClient, + (flags & RDPGFX_CAPS_FLAG_THINCLIENT) ? TRUE + : FALSE)) + return rc; + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxSmallCache, + (flags & RDPGFX_CAPS_FLAG_SMALL_CACHE) ? TRUE + : FALSE)) + return rc; #ifndef WITH_GFX_H264 - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE); + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE)) + return rc; pdu.capsSet->flags &= ~RDPGFX_CAPS_FLAG_AVC420_ENABLED; #else if (h264) - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, - (flags & RDPGFX_CAPS_FLAG_AVC420_ENABLED) ? TRUE - : FALSE); + { + if (!freerdp_settings_set_bool( + clientSettings, FreeRDP_GfxH264, + (flags & RDPGFX_CAPS_FLAG_AVC420_ENABLED) ? TRUE : FALSE)) + return rc; + } else - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE); + { + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE)) + return rc; + } #endif return shadow_client_send_caps_confirm(context, client, &pdu); @@ -1058,14 +1081,21 @@ static UINT shadow_client_rdpgfx_caps_advertise(RdpgfxServerContext* context, pdu.capsSet = ∩︀ flags = pdu.capsSet->flags; - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444v2, FALSE); - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444, FALSE); - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE); + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444v2, FALSE)) + return rc; + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxAVC444, FALSE)) + return rc; + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxH264, FALSE)) + return rc; - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxThinClient, - (flags & RDPGFX_CAPS_FLAG_THINCLIENT) ? TRUE : FALSE); - freerdp_settings_set_bool(clientSettings, FreeRDP_GfxSmallCache, - (flags & RDPGFX_CAPS_FLAG_SMALL_CACHE) ? TRUE : FALSE); + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxThinClient, + (flags & RDPGFX_CAPS_FLAG_THINCLIENT) ? TRUE + : FALSE)) + return rc; + if (!freerdp_settings_set_bool(clientSettings, FreeRDP_GfxSmallCache, + (flags & RDPGFX_CAPS_FLAG_SMALL_CACHE) ? TRUE + : FALSE)) + return rc; return shadow_client_send_caps_confirm(context, client, &pdu); } diff --git a/server/shadow/shadow_server.c b/server/shadow/shadow_server.c index 5377dbc23..96990e6aa 100644 --- a/server/shadow/shadow_server.c +++ b/server/shadow/shadow_server.c @@ -399,7 +399,8 @@ int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** a } CommandLineSwitchCase(arg, "sam-file") { - freerdp_settings_set_string(settings, FreeRDP_NtlmSamFile, arg->Value); + if (!freerdp_settings_set_string(settings, FreeRDP_NtlmSamFile, arg->Value)) + return COMMAND_LINE_ERROR; } CommandLineSwitchCase(arg, "log-level") {