[PATCH v2 0/2] MR5069: Draft: wininet: Avoid crash in InternetCreateUrl with scheme unknown.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=33050 -- v2: wininet: Avoid crash in InternetCreateUrl with scheme unknown. wininet: Add missing assignment of return value. https://gitlab.winehq.org/wine/wine/-/merge_requests/5069
From: Bernhard Übelacker <bernhardu(a)mailbox.org> --- dlls/wininet/tests/url.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/wininet/tests/url.c b/dlls/wininet/tests/url.c index c09315c301f..28269e8dd40 100644 --- a/dlls/wininet/tests/url.c +++ b/dlls/wininet/tests/url.c @@ -1225,7 +1225,7 @@ static void InternetCreateUrlA_test(void) urlComp.dwExtraInfoLength = strlen(urlComp.lpszExtraInfo); len = 256; szUrl = HeapAlloc(GetProcessHeap(), 0, len); - InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len); + ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len); ok(ret, "Expected success\n"); ok(len == strlen(CREATE_URL13), "Got len %lu\n", len); ok(!strcmp(szUrl, CREATE_URL13), "Expected \"%s\", got \"%s\"\n", CREATE_URL13, szUrl); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5069
From: Bernhard Übelacker <bernhardu(a)mailbox.org> 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) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5069
This merge request was approved by Alexandre Julliard. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/5069
participants (2)
-
Alexandre Julliard (@julliard) -
Bernhard Übelacker