Module: wine Branch: master Commit: d473c09cc17f9daa77b04fb11f96222438f6581d URL: https://source.winehq.org/git/wine.git/?a=commit;h=d473c09cc17f9daa77b04fb11... Author: Tim Clem <tclem(a)codeweavers.com> Date: Tue Jul 6 12:40:42 2021 -0700 wininet: Treat dwUrlLength as a maximum in InternetCrackUrlW. Signed-off-by: Tim Clem <tclem(a)codeweavers.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wininet/internet.c | 8 +++++++- dlls/wininet/tests/url.c | 2 -- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index feb25bbc0c5..00e199b66d5 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -1646,7 +1646,13 @@ BOOL WINAPI InternetCrackUrlW(const WCHAR *lpszUrl, DWORD dwUrlLength, DWORD dwF SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } - if (!dwUrlLength) dwUrlLength = lstrlenW(lpszUrl); + + if (!dwUrlLength) + dwUrlLength = lstrlenW(lpszUrl); + else { + /* Windows stops at a null, regardless of what dwUrlLength says. */ + dwUrlLength = wcsnlen(lpszUrl, dwUrlLength); + } if (dwFlags & ICU_DECODE) { diff --git a/dlls/wininet/tests/url.c b/dlls/wininet/tests/url.c index 9476d4309c3..59b66a5404c 100644 --- a/dlls/wininet/tests/url.c +++ b/dlls/wininet/tests/url.c @@ -855,7 +855,6 @@ static void InternetCrackUrlW_test(void) comp.dwHostNameLength = ARRAY_SIZE(host); r = InternetCrackUrlW(url3, 13 /* includes the nul */, 0, &comp); ok(r, "InternetCrackUrlW failed with error %d\n", GetLastError()); - todo_wine ok(comp.dwHostNameLength == 5, "Expected dwHostNameLength of 5, got %d\n", comp.dwHostNameLength); @@ -877,7 +876,6 @@ static void InternetCrackUrlW_test(void) comp.dwUrlPathLength = ARRAY_SIZE(urlpart); r = InternetCrackUrlW(url5, 15, 0, &comp); ok(r, "InternetCrackUrlW failed with error %d\n", GetLastError()); - todo_wine ok(comp.dwUrlPathLength == 0, "Expected dwUrlPathLength of 0, got %d\n", comp.dwUrlPathLength); }