mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-09-27 17:52:58 +02:00
gwinhttpfile: Avoid arithmetic overflow when calculating a size
The members of `URL_COMPONENTS` (`winhttp_file->url`) are `DWORD`s, i.e.
32-bit unsigned integers. Adding to and multiplying them may cause them
to overflow the unsigned integer bounds, even if the result is passed to
`g_memdup2()` which accepts a `gsize`.
Cast the `URL_COMPONENTS` members to `gsize` first to ensure that the
arithmetic is done in terms of `gsize`s rather than unsigned integers.
Spotted by Sebastian Dröge.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #2319
(cherry picked from commit 0cbad67321
)
This commit is contained in:
committed by
Simon McVittie
parent
1436fedbab
commit
5c26b6a7f6
@@ -394,10 +394,10 @@ g_winhttp_file_resolve_relative_path (GFile *file,
|
|||||||
child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
|
child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
|
||||||
child->vfs = winhttp_file->vfs;
|
child->vfs = winhttp_file->vfs;
|
||||||
child->url = winhttp_file->url;
|
child->url = winhttp_file->url;
|
||||||
child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
|
child->url.lpszScheme = g_memdup2 (winhttp_file->url.lpszScheme, ((gsize) winhttp_file->url.dwSchemeLength + 1) * 2);
|
||||||
child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
|
child->url.lpszHostName = g_memdup2 (winhttp_file->url.lpszHostName, ((gsize) winhttp_file->url.dwHostNameLength + 1) * 2);
|
||||||
child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
|
child->url.lpszUserName = g_memdup2 (winhttp_file->url.lpszUserName, ((gsize) winhttp_file->url.dwUserNameLength + 1) * 2);
|
||||||
child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
|
child->url.lpszPassword = g_memdup2 (winhttp_file->url.lpszPassword, ((gsize) winhttp_file->url.dwPasswordLength + 1) * 2);
|
||||||
child->url.lpszUrlPath = wnew_path;
|
child->url.lpszUrlPath = wnew_path;
|
||||||
child->url.dwUrlPathLength = wcslen (wnew_path);
|
child->url.dwUrlPathLength = wcslen (wnew_path);
|
||||||
child->url.lpszExtraInfo = NULL;
|
child->url.lpszExtraInfo = NULL;
|
||||||
|
Reference in New Issue
Block a user