From c49b757be64de6b0b1c46bd575a96503f9b68a4b Mon Sep 17 00:00:00 2001 From: deepend-tildeclub Date: Wed, 20 May 2026 15:51:07 -0600 Subject: [PATCH] Clamp Win32 sysinfo UTF length casts --- src/common/sysinfo/win32/backend.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/common/sysinfo/win32/backend.c b/src/common/sysinfo/win32/backend.c index 37f003d2..b69532bb 100644 --- a/src/common/sysinfo/win32/backend.c +++ b/src/common/sysinfo/win32/backend.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -74,6 +75,18 @@ typedef struct static bool string_builder_init (StringBuilder *builder); static void string_builder_free (StringBuilder *builder); static bool string_builder_append (StringBuilder *builder, const char *text); +static int size_to_int (size_t value); + +static int +size_to_int (size_t value) +{ + if (value > (size_t) INT_MAX) + { + return INT_MAX; + } + + return (int) value; +} char * sysinfo_get_cpu (void) @@ -511,6 +524,7 @@ static char *read_hdd_info (IWbemClassObject *object) static char *bstr_to_utf8 (BSTR bstr) { int utf8_len; + int wide_len; char *utf8; if (bstr == NULL) @@ -518,7 +532,8 @@ static char *bstr_to_utf8 (BSTR bstr) return NULL; } - utf8_len = WideCharToMultiByte (CP_UTF8, 0, bstr, SysStringLen (bstr), NULL, 0, NULL, NULL); + wide_len = size_to_int ((size_t) SysStringLen (bstr)); + utf8_len = WideCharToMultiByte (CP_UTF8, 0, bstr, wide_len, NULL, 0, NULL, NULL); if (utf8_len <= 0) { return NULL; @@ -530,7 +545,7 @@ static char *bstr_to_utf8 (BSTR bstr) return NULL; } - if (WideCharToMultiByte (CP_UTF8, 0, bstr, SysStringLen (bstr), utf8, utf8_len, NULL, NULL) <= 0) + if (WideCharToMultiByte (CP_UTF8, 0, bstr, wide_len, utf8, utf8_len, NULL, NULL) <= 0) { free (utf8); return NULL;