Module: wine Branch: master Commit: 267a5658fb96968964e2204971abf6db23a1a29f URL: https://gitlab.winehq.org/wine/wine/-/commit/267a5658fb96968964e2204971abf6d...
Author: Bernhard Übelacker bernhardu@mailbox.org Date: Mon Feb 12 16:06:23 2024 +0100
wininet: Avoid crash in InternetCreateUrl with scheme unknown.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=33050
---
dlls/wininet/internet.c | 6 ++++++ dlls/wininet/tests/url.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index fc962016246..b74015146ea 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -4405,6 +4405,12 @@ static BOOL calc_url_length(LPURL_COMPONENTSW lpUrlComponents, { LPCWSTR scheme;
+ if (lpUrlComponents->nScheme == INTERNET_SCHEME_UNKNOWN) + { + INTERNET_SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + nScheme = lpUrlComponents->nScheme;
if (nScheme == INTERNET_SCHEME_DEFAULT) diff --git a/dlls/wininet/tests/url.c b/dlls/wininet/tests/url.c index 28269e8dd40..2177d651f08 100644 --- a/dlls/wininet/tests/url.c +++ b/dlls/wininet/tests/url.c @@ -1231,6 +1231,21 @@ static void InternetCreateUrlA_test(void) ok(!strcmp(szUrl, CREATE_URL13), "Expected "%s", got "%s"\n", CREATE_URL13, szUrl);
HeapFree(GetProcessHeap(), 0, szUrl); + + memset(&urlComp, 0, sizeof(urlComp)); + fill_url_components(&urlComp); + urlComp.lpszScheme = NULL; + urlComp.dwSchemeLength = 0; + urlComp.nScheme = INTERNET_SCHEME_UNKNOWN; + len = 256; + szUrl = HeapAlloc(GetProcessHeap(), 0, len); + SetLastError(0xdeadbeef); + ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len); + ok(!ret, "Expected failure\n"); + ok(GetLastError() == ERROR_INVALID_PARAMETER, + "Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError()); + + HeapFree(GetProcessHeap(), 0, szUrl); }
static void InternetCanonicalizeUrl_test(void)