gwin32: Use gsize internally in g_wcsdup()

This allows it to handle strings up to length `G_MAXSIZE` — previously
it would overflow with such strings.

Update the several copies of it identically.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
This commit is contained in:
Philip Withnall
2021-02-04 13:50:37 +00:00
parent 41d5eedad4
commit 9acebef777
3 changed files with 49 additions and 25 deletions

View File

@@ -62,10 +62,10 @@ typedef HRESULT (STDAPICALLTYPE *CreateXmlReader_func)(REFIID riid, void **ppvOb
#define sax_CreateXmlReader sax->CreateXmlReader
#endif
static gssize
static gsize
g_utf16_len (const gunichar2 *str)
{
gssize result;
gsize result;
for (result = 0; str[0] != 0; str++, result++)
;
@@ -76,17 +76,20 @@ g_utf16_len (const gunichar2 *str)
static gunichar2 *
g_wcsdup (const gunichar2 *str, gssize str_len)
{
gssize str_size;
gsize str_len_unsigned;
gsize str_size;
g_return_val_if_fail (str != NULL, NULL);
if (str_len == -1)
str_len = g_utf16_len (str);
if (str_len < 0)
str_len_unsigned = g_utf16_len (str);
else
str_len_unsigned = (gsize) str_len;
g_assert (str_len <= G_MAXSIZE / sizeof (gunichar2) - 1);
str_size = (str_len + 1) * sizeof (gunichar2);
g_assert (str_len_unsigned <= G_MAXSIZE / sizeof (gunichar2) - 1);
str_size = (str_len_unsigned + 1) * sizeof (gunichar2);
return g_memdup (str, str_size);
return g_memdup2 (str, str_size);
}
static BOOL