mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[warnings] fix integer casting
* use asserting casts to detect overflows or sign conversions * code cleanup for issues uncovered by casts
This commit is contained in:
@@ -453,7 +453,7 @@ static BOOL freerdp_assistance_parse_attr(const char** opt, size_t* plength, con
|
||||
key);
|
||||
return FALSE;
|
||||
}
|
||||
const size_t length = q - p;
|
||||
const size_t length = WINPR_ASSERTING_INT_CAST(size_t, q - p);
|
||||
*opt = p;
|
||||
*plength = length;
|
||||
|
||||
@@ -498,13 +498,15 @@ static BOOL freerdp_assistance_parse_attr_uint32(UINT32* opt, const char* key, c
|
||||
return FALSE;
|
||||
|
||||
char buffer[64] = { 0 };
|
||||
if (size >= sizeof(buffer))
|
||||
if ((!copt && (size > 0)) || (size >= sizeof(buffer)))
|
||||
{
|
||||
WLog_WARN(TAG, "Invalid UINT32 string '%s' [%" PRIuz "]", copt, size);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
strncpy(buffer, copt, size);
|
||||
if (size > 0)
|
||||
strncpy(buffer, copt, size);
|
||||
|
||||
errno = 0;
|
||||
unsigned long val = strtoul(buffer, NULL, 0);
|
||||
|
||||
@@ -573,7 +575,7 @@ static char* freerdp_assistance_contains_element(char* input, size_t ilen, const
|
||||
WINPR_ASSERT((size_t)erc < sizeof(ekey));
|
||||
if ((erc <= 0) || ((size_t)erc >= sizeof(ekey)))
|
||||
return NULL;
|
||||
const size_t offset = start - tag;
|
||||
const size_t offset = WINPR_ASSERTING_INT_CAST(size_t, start - tag);
|
||||
dend = end = strrstr(start, ilen - offset, ekey);
|
||||
if (end)
|
||||
end += strnlen(ekey, sizeof(ekey));
|
||||
@@ -587,12 +589,12 @@ static char* freerdp_assistance_contains_element(char* input, size_t ilen, const
|
||||
return NULL;
|
||||
}
|
||||
if (plen)
|
||||
*plen = end - tag;
|
||||
*plen = WINPR_ASSERTING_INT_CAST(size_t, end - tag);
|
||||
|
||||
if (pdata)
|
||||
*pdata = data;
|
||||
if (pdlen)
|
||||
*pdlen = dend - data;
|
||||
*pdlen = WINPR_ASSERTING_INT_CAST(size_t, dend - data);
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -644,7 +646,7 @@ static BOOL freerdp_assistance_get_element(char* input, size_t ilen, const char*
|
||||
|
||||
char* end = tag + len;
|
||||
*element = data;
|
||||
*elen = end - data + 1;
|
||||
*elen = WINPR_ASSERTING_INT_CAST(size_t, end - data + 1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include <winpr/crt.h>
|
||||
#include <winpr/assert.h>
|
||||
#include <winpr/cast.h>
|
||||
|
||||
#include "../core/settings.h"
|
||||
#include "../core/capabilities.h"
|
||||
@@ -51,7 +52,8 @@ BOOL freerdp_addin_argv_add_argument_ex(ADDIN_ARGV* args, const char* argument,
|
||||
if (len == 0)
|
||||
len = strlen(argument);
|
||||
|
||||
new_argv = (char**)realloc((void*)args->argv, sizeof(char*) * (args->argc + 1));
|
||||
new_argv = (char**)realloc(
|
||||
(void*)args->argv, sizeof(char*) * (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc) + 1));
|
||||
|
||||
if (!new_argv)
|
||||
return FALSE;
|
||||
@@ -81,8 +83,10 @@ 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], (args->argc - x) * sizeof(char*),
|
||||
(void*)&args->argv[x + 1], (args->argc - x - 1) * sizeof(char*));
|
||||
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*));
|
||||
args->argv[args->argc - 1] = NULL;
|
||||
args->argc--;
|
||||
return TRUE;
|
||||
@@ -154,7 +158,8 @@ int freerdp_addin_set_argument_value(ADDIN_ARGV* args, const char* option, const
|
||||
|
||||
if (p)
|
||||
{
|
||||
if (strncmp(args->argv[i], option, p - args->argv[i]) == 0)
|
||||
if (strncmp(args->argv[i], option,
|
||||
WINPR_ASSERTING_INT_CAST(size_t, p - args->argv[i])) == 0)
|
||||
{
|
||||
free(args->argv[i]);
|
||||
args->argv[i] = str;
|
||||
@@ -829,7 +834,7 @@ ADDIN_ARGV* freerdp_addin_argv_clone(const ADDIN_ARGV* args)
|
||||
if (!args)
|
||||
return NULL;
|
||||
cnv.c = args->argv;
|
||||
return freerdp_addin_argv_new(args->argc, cnv.cc);
|
||||
return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
|
||||
}
|
||||
|
||||
void freerdp_dynamic_channel_collection_free(rdpSettings* settings)
|
||||
@@ -1780,7 +1785,7 @@ BOOL freerdp_settings_set_pointer_array(rdpSettings* settings, FreeRDP_Settings_
|
||||
goto fail;
|
||||
if ((offset >= maxOffset) || !data)
|
||||
goto fail;
|
||||
settings->OrderSupport[offset] = *(const BOOL*)data;
|
||||
settings->OrderSupport[offset] = *(const BOOL*)data ? 1 : 0;
|
||||
return TRUE;
|
||||
case FreeRDP_GlyphCache:
|
||||
maxOffset = 10;
|
||||
@@ -1846,11 +1851,11 @@ UINT32 freerdp_settings_get_codecs_flags(const rdpSettings* settings)
|
||||
UINT32 flags = FREERDP_CODEC_ALL;
|
||||
if (settings->RemoteFxCodec == FALSE)
|
||||
{
|
||||
flags &= ~FREERDP_CODEC_REMOTEFX;
|
||||
flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
|
||||
}
|
||||
if (settings->NSCodec == FALSE)
|
||||
{
|
||||
flags &= ~FREERDP_CODEC_NSCODEC;
|
||||
flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
|
||||
}
|
||||
/*TODO: check other codecs flags */
|
||||
return flags;
|
||||
|
||||
Reference in New Issue
Block a user