From 35831303ea7bf992c331d2e1a0b2f48d14a8d3b2 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 2 Mar 2026 18:27:59 +0100 Subject: [PATCH] [various] add proper return checks --- libfreerdp/codec/nsc.c | 1 - libfreerdp/codec/rfx.c | 1 - libfreerdp/common/settings.c | 37 ++++++++++++++++++++--------------- libfreerdp/core/gateway/arm.c | 16 +++++++++------ libfreerdp/core/proxy.c | 3 ++- 5 files changed, 33 insertions(+), 25 deletions(-) diff --git a/libfreerdp/codec/nsc.c b/libfreerdp/codec/nsc.c index 55e797c69..ec9513ee8 100644 --- a/libfreerdp/codec/nsc.c +++ b/libfreerdp/codec/nsc.c @@ -351,7 +351,6 @@ NSC_CONTEXT* nsc_context_new(void) goto error; context->priv->log = WLog_Get("com.freerdp.codec.nsc"); - WLog_OpenAppender(context->priv->log); context->BitmapData = nullptr; context->decode = nsc_decode; context->encode = nsc_encode; diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c index 6caeb1623..b0c322c5d 100644 --- a/libfreerdp/codec/rfx.c +++ b/libfreerdp/codec/rfx.c @@ -220,7 +220,6 @@ RFX_CONTEXT* rfx_context_new_ex(BOOL encoder, UINT32 ThreadingFlags) goto fail; priv->log = WLog_Get("com.freerdp.codec.rfx"); - WLog_OpenAppender(priv->log); priv->TilePool = ObjectPool_New(TRUE); if (!priv->TilePool) diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index 60cf0ea5d..9f4ce9b40 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -81,13 +81,15 @@ BOOL freerdp_addin_argv_del_argument(ADDIN_ARGV* args, const char* argument) if (strcmp(argument, arg) == 0) { free(arg); - memmove_s((void*)&args->argv[x], - (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x)) * sizeof(char*), - (void*)&args->argv[x + 1], - (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x - 1)) * sizeof(char*)); + const BOOL res = + memmove_s((void*)&args->argv[x], + (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x)) * sizeof(char*), + (void*)&args->argv[x + 1], + (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x - 1)) * + sizeof(char*)) >= 0; args->argv[args->argc - 1] = nullptr; args->argc--; - return TRUE; + return res; } } return FALSE; @@ -571,15 +573,17 @@ BOOL freerdp_static_channel_collection_del(rdpSettings* settings, const char* na { if (strcmp(name, cur->argv[0]) == 0) { - memmove_s((void*)&settings->StaticChannelArray[x], - (count - x) * sizeof(ADDIN_ARGV*), - (void*)&settings->StaticChannelArray[x + 1], - (count - x - 1) * sizeof(ADDIN_ARGV*)); + const BOOL success = memmove_s((void*)&settings->StaticChannelArray[x], + (count - x) * sizeof(ADDIN_ARGV*), + (void*)&settings->StaticChannelArray[x + 1], + (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0; for (size_t y = count - 1; y < settings->StaticChannelArraySize; y++) settings->StaticChannelArray[y] = nullptr; freerdp_addin_argv_free(cur); - return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count - 1); + if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count - 1)) + return FALSE; + return success; } } } @@ -677,16 +681,17 @@ BOOL freerdp_dynamic_channel_collection_del(rdpSettings* settings, const char* n { if (strcmp(name, cur->argv[0]) == 0) { - memmove_s((void*)&settings->DynamicChannelArray[x], - (count - x) * sizeof(ADDIN_ARGV*), - (void*)&settings->DynamicChannelArray[x + 1], - (count - x - 1) * sizeof(ADDIN_ARGV*)); + const BOOL success = memmove_s((void*)&settings->DynamicChannelArray[x], + (count - x) * sizeof(ADDIN_ARGV*), + (void*)&settings->DynamicChannelArray[x + 1], + (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0; for (size_t y = count - 1; y < settings->DynamicChannelArraySize; y++) settings->DynamicChannelArray[y] = nullptr; freerdp_addin_argv_free(cur); - return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, - count - 1); + if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count - 1)) + return FALSE; + return success; } } } diff --git a/libfreerdp/core/gateway/arm.c b/libfreerdp/core/gateway/arm.c index fe335c52b..804d0c4f9 100644 --- a/libfreerdp/core/gateway/arm.c +++ b/libfreerdp/core/gateway/arm.c @@ -322,9 +322,10 @@ static char* arm_create_request_json(rdpArm* arm) WINPR_JSON* json = WINPR_JSON_CreateObject(); if (!json) goto arm_create_cleanup; - WINPR_JSON_AddStringToObject( - json, "application", - freerdp_settings_get_string(arm->context->settings, FreeRDP_RemoteApplicationProgram)); + if (!WINPR_JSON_AddStringToObject( + json, "application", + freerdp_settings_get_string(arm->context->settings, FreeRDP_RemoteApplicationProgram))) + goto arm_create_cleanup; lbi = calloc( freerdp_settings_get_uint32(arm->context->settings, FreeRDP_LoadBalanceInfoLength) + 1, @@ -339,9 +340,12 @@ static char* arm_create_request_json(rdpArm* arm) len); } - WINPR_JSON_AddStringToObject(json, "loadBalanceInfo", lbi); - WINPR_JSON_AddNullToObject(json, "LogonToken"); - WINPR_JSON_AddNullToObject(json, "gatewayLoadBalancerToken"); + if (!WINPR_JSON_AddStringToObject(json, "loadBalanceInfo", lbi)) + goto arm_create_cleanup; + if (!WINPR_JSON_AddNullToObject(json, "LogonToken")) + goto arm_create_cleanup; + if (!WINPR_JSON_AddNullToObject(json, "gatewayLoadBalancerToken")) + goto arm_create_cleanup; message = WINPR_JSON_PrintUnformatted(json); arm_create_cleanup: diff --git a/libfreerdp/core/proxy.c b/libfreerdp/core/proxy.c index 444541b74..b3f82cf66 100644 --- a/libfreerdp/core/proxy.c +++ b/libfreerdp/core/proxy.c @@ -593,7 +593,8 @@ static BOOL http_proxy_connect(rdpContext* context, BIO* bufferedBio, const char const UINT32 timeout = freerdp_settings_get_uint32(context->settings, FreeRDP_TcpConnectTimeout); - _itoa_s(port, port_str, sizeof(port_str), 10); + if (_itoa_s(port, port_str, sizeof(port_str), 10) < 0) + return FALSE; hostLen = strlen(hostname); portLen = strnlen(port_str, sizeof(port_str));