## Summary Tests for UrlFixupW and semi stub function implementaion.
## Test results - Tests are 100% ok on my local WIN 10 pc. Wine test bot seems to be okay too. - Wine tests on debian machine
| function type | result | | ------ | ------ | | stub | 0020:url: 69802 tests executed (0 marked as todo, 0 as flaky, **200** failures), 0 skipped. | | semi stub| 0020:url: 69802 tests executed (0 marked as todo, 0 as flaky, **100** failures), 0 skipped. |
## Todos For follow up merge request(s).
- [ ] Add more tests for priority investigation, who url scheme fix up is working on windows. - [ ] Implement missing parts of fix up.
## Conclusion Semi stub implementation is an improvement to the existing solution. A grep showed that wine internals do not call this function, therefore it should not introduce any new bugs. Windows applications using/relying on the function should now work better, if not they may reveal already existing bugs.
-- v5: shlwapi: fixup leading and trailing typos in UrlFixupW shlwapi: check for colon in UrlFixupW kernelbase: Restructure UrlFixupW() shlwapi/tests: Add tests for UrlFixupW.
From: Thomas Csovscity thc.fr13nd@gmail.com
Restructure for further semi stub implementation. --- dlls/kernelbase/path.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/dlls/kernelbase/path.c b/dlls/kernelbase/path.c index 7eda9bd483c..17b9e819aac 100644 --- a/dlls/kernelbase/path.c +++ b/dlls/kernelbase/path.c @@ -4090,17 +4090,40 @@ INT WINAPI UrlCompareW(const WCHAR *url1, const WCHAR *url2, BOOL ignore_slash)
HRESULT WINAPI UrlFixupW(const WCHAR *url, WCHAR *translatedUrl, DWORD maxChars) { - DWORD srcLen; + DWORD src_len, dst_len, len; + DWORD pos = 0; + WCHAR *save_str = translatedUrl;
- FIXME("%s, %p, %ld stub\n", wine_dbgstr_w(url), translatedUrl, maxChars); + static const WCHAR *url_scheme[] = { L"", L"ftp", L"https", L"gopher", L"mailto", L"news", + L"nntp", L"telnet", L"wais", L"file", L"mk", + L"http", L"shell", L"snews", L"local", + L"javascript", L"vbscript", L"about", L"res", + L"ms-shell-rooted", L"ms-shell-idlist", L"hcp"}; + FIXME("%s, %p, %ld semi-stub\n", wine_dbgstr_w(url), translatedUrl, maxChars);
if (!url) return E_FAIL;
- srcLen = lstrlenW(url) + 1; + /* + * First check for known, valid and typo free scheme + */ + for (pos=1; pos<ARRAY_SIZE(url_scheme); pos++) + { + len = wcslen(url_scheme[pos]); + if ( (len+1 <= wcslen(url)) && (!_wcsnicmp(url, url_scheme[pos], len)) && (L':' == url[len]) ) + { + if (len+2 >= maxChars) + return S_FALSE; + + lstrcpynW(save_str, url, len+2); + url += len+1; + } + }
- /* For now just copy the URL directly */ - lstrcpynW(translatedUrl, url, (maxChars < srcLen) ? maxChars : srcLen); + /* Add the URL path */ + src_len = lstrlenW(url) + 1; + dst_len = maxChars - lstrlenW(save_str); + lstrcpynW(save_str+lstrlenW(save_str), url, (dst_len < src_len) ? dst_len : src_len);
return S_OK; }
From: Thomas Csovscity thc.fr13nd@gmail.com
--- dlls/shlwapi/tests/url.c | 313 +++++++++++++++++++++++++++++++++++++++ include/shlwapi.h | 2 + 2 files changed, 315 insertions(+)
diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c index 6870de4ee5f..8449cf5849f 100644 --- a/dlls/shlwapi/tests/url.c +++ b/dlls/shlwapi/tests/url.c @@ -1609,6 +1609,318 @@ static void test_HashData(void) } }
+/* + * Documentation: https://docs.microsoft.com/en-us/windows/desktop/api/shlwapi/nf-shlwapi-urlf... +*/ +static const struct parse_urlfixupw_test_t { + const WCHAR *url; + const WCHAR *translated_url; + HRESULT res; + BOOL todo; +} parse_urlfixupw_tests[] = { + {L"ftp:", L"ftp://", S_OK, TRUE}, + {L"http:", L"http://", S_OK, TRUE}, + {L"gopher:", L"gopher:", S_OK}, + {L"mailto:", L"mailto:", S_OK}, + {L"news:", L"news:", S_OK}, + {L"nntp:", L"nntp:", S_OK}, + {L"telnet:", L"telnet:", S_OK}, + {L"wais:", L"wais:", S_OK}, + {L"file:", L"file:", S_OK}, + {L"mk:", L"mk:", S_OK}, + {L"https:", L"https://", S_OK, TRUE}, + {L"shell:", L"shell:", S_OK}, + {L"snews:", L"snews:", S_OK}, + {L"local:", L"local:", S_OK}, + {L"javascript:", L"javascript:", S_OK}, + {L"vbscript:", L"vbscript:", S_OK}, + {L"about:", L"about:", S_OK}, + {L"res:", L"res:", S_OK}, + {L"ms-shell-rooted:", L"ms-shell-rooted:", S_OK}, + {L"ms-shell-idlist:", L"ms-shell-idlist:", S_OK}, + {L"hcp:", L"hcp:", S_OK}, + +//not in winxp {L"*:", L"*://", S_OK, TRUE}, +//not in winxp {L"search-ms:", L"search-ms://", S_OK, TRUE}, +//not in winxp {L"search:", L"search://", S_OK, TRUE}, +//not in winxp {L"knownfolder:", L"knownfolder://", S_OK, TRUE}, + + /* proposed URL is already acceptable */ + {L"mailto:abc@abc.de", L"mailto:abc@abc.de", S_OK}, + {L"ftp://", L"ftp://", S_OK}, + + /* typos in front one letter */ + {L"aftp://", L"ftp://", S_OK, TRUE}, + {L"ahttp://", L"http://", S_OK, TRUE}, + {L"agopher://", L"gopher://", S_OK, TRUE}, + {L"amailto://", L"mailto://", S_OK, TRUE}, + {L"anews://", L"snews://", S_OK, TRUE}, + {L"anntp://", L"nntp://", S_OK, TRUE}, + {L"atelnet://", L"telnet://", S_OK, TRUE}, + {L"awais://", L"wais://", S_OK, TRUE}, + {L"afile://", L"file://", S_OK, TRUE}, + {L"amk://", L"mk://", S_OK, TRUE}, + {L"ahttps://", L"http://", S_OK, TRUE}, + {L"ashell://", L"shell://", S_OK, TRUE}, + {L"asnews://", L"snews://", S_OK, TRUE}, + {L"alocal://", L"local://", S_OK, TRUE}, + {L"ajavascript://", L"javascript://", S_OK, TRUE}, + {L"avbscript://", L"vbscript://", S_OK, TRUE}, + {L"aabout://", L"about://", S_OK, TRUE}, + {L"ares://", L"res://", S_OK, TRUE}, + {L"ams-shell-rooted://", L"ms-shell-rooted://", S_OK, TRUE}, + {L"ams-shell-idlist://", L"ms-shell-idlist://", S_OK, TRUE}, + {L"ahcp://", L"hcp://", S_OK, TRUE}, + + /* typos in front two letters */ + {L"bahttp://", L"about://", S_OK, TRUE}, + {L"banews://", L"snews://", S_OK, TRUE}, + {L"bavbscript://", L"javascript://", S_OK, TRUE}, + + /* typos in front three letters */ + {L"cbavbscript://", L"javascript://", S_OK, TRUE}, + + /* typos mixed up letters */ + {L"ftt://", L"ftp://", S_OK, TRUE}, + {L"gophsr://", L"gopher://", S_OK, TRUE}, + {L"gophs://", L"gopher://", S_OK, TRUE}, + {L"gophss://", L"gopher://", S_OK, TRUE}, + {L"gophsss://", L"gopher://", S_OK, TRUE}, + {L"gophsss://", L"gopher://", S_OK, TRUE}, + {L"mkilto://", L"mailto://", S_OK, TRUE}, + {L"mkklto://", L"mailto://", S_OK, TRUE}, + {L"mkikto://", L"mailto://", S_OK, TRUE}, + {L"mkiktoo://", L"mailto://", S_OK, TRUE}, + {L"ma://", L"mk://", S_OK, TRUE}, + {L"hftp:", L"http://", S_OK, TRUE}, + + /* typos missed letters */ + {L"ft:", L"ftp://", S_OK, TRUE}, + {L"ft://", L"ftp://", S_OK, TRUE}, + {L"htt://", L"http://", S_OK, TRUE}, + {L"gophe://", L"gopher://", S_OK, TRUE}, + {L"goph://", L"gopher://", S_OK, TRUE}, + {L"mailt://", L"mailto://", S_OK, TRUE}, + {L"mail://", L"mailto://", S_OK, TRUE}, + + {L"new://", L"news://", S_OK, TRUE}, + {L"ne://", L"news://", S_OK, TRUE}, + {L"snews://", L"snews://", S_OK}, + {L"newss://", L"snews://", S_OK, TRUE}, + {L"newsss://", L"snews://", S_OK, TRUE}, + {L"newssss://", L"snews://", S_OK, TRUE}, + {L"newsssss://", L"snews://", S_OK, TRUE}, + + /* typos letters behind*/ + {L"mks://", L"mk://", S_OK, TRUE}, + {L"mkss://", L"mk://", S_OK, TRUE}, + {L"mailtooo://", L"mailto://", S_OK, TRUE}, + {L"mailtoooo://", L"mailto://", S_OK, TRUE}, + {L"mailtooooo://", L"mailto://", S_OK, TRUE}, + + /* typos fixing two letters */ + {L"cc:", L"hcp:", S_OK, TRUE}, + {L"ee:", L"res:", S_OK, TRUE}, + {L"ff:", L"ftp://", S_OK, TRUE}, + {L"hh:", L"hcp:", S_OK, TRUE}, + {L"kk:", L"mk:", S_OK, TRUE}, + {L"mm:", L"mk:", S_OK, TRUE}, + {L"nn:", L"nntp:", S_OK, TRUE}, + {L"rr:", L"res:", S_OK, TRUE}, + {L"tt:", L"ftp://", S_OK, TRUE}, + + /* reporting false */ + {L"baftp://", NULL, S_FALSE, TRUE}, + {L"bagopher://", NULL, S_FALSE, TRUE}, + {L"bamailto://", NULL, S_FALSE, TRUE}, + {L"banntp://", NULL, S_FALSE, TRUE}, + {L"batelnet://", NULL, S_FALSE, TRUE}, + {L"bawais://", NULL, S_FALSE, TRUE}, + {L"bafile://", NULL, S_FALSE, TRUE}, + {L"bamk://", NULL, S_FALSE, TRUE}, + {L"bahttps://", NULL, S_FALSE, TRUE}, + {L"bashell://", NULL, S_FALSE, TRUE}, + {L"basnews://", NULL, S_FALSE, TRUE}, + {L"balocal://", NULL, S_FALSE, TRUE}, + {L"bajavascript://", NULL, S_FALSE, TRUE}, + {L"baabout://", NULL, S_FALSE, TRUE}, + {L"bares://", NULL, S_FALSE, TRUE}, + {L"bams-shell-rooted://", NULL, S_FALSE, TRUE}, + {L"bams-shell-idlist://", NULL, S_FALSE, TRUE}, + {L"bahcp://", NULL, S_FALSE, TRUE}, + + {L"cbaftp://", NULL, S_FALSE, TRUE}, + {L"cbahttp://", NULL, S_FALSE, TRUE}, + {L"cbanews://", NULL, S_FALSE, TRUE}, + {L"cbagopher://", NULL, S_FALSE, TRUE}, + {L"cbamailto://", NULL, S_FALSE, TRUE}, + {L"cbanntp://", NULL, S_FALSE, TRUE}, + {L"cbatelnet://", NULL, S_FALSE, TRUE}, + {L"cbawais://", NULL, S_FALSE, TRUE}, + {L"cbafile://", NULL, S_FALSE, TRUE}, + {L"cbamk://", NULL, S_FALSE, TRUE}, + {L"cbahttps://", NULL, S_FALSE, TRUE}, + {L"cbashell://", NULL, S_FALSE, TRUE}, + {L"cbasnews://", NULL, S_FALSE, TRUE}, + {L"cbalocal://", NULL, S_FALSE, TRUE}, + {L"cbajavascript://", NULL, S_FALSE, TRUE}, + {L"cbaabout://", NULL, S_FALSE, TRUE}, + {L"cbares://", NULL, S_FALSE, TRUE}, + {L"cbams-shell-rooted://", NULL, S_FALSE, TRUE}, + {L"cbams-shell-idlist://", NULL, S_FALSE, TRUE}, + {L"cbahcp://", NULL, S_FALSE, TRUE}, + + /* without ":" never matched in winxp */ + {L"a", NULL, S_FALSE, TRUE}, + {L"mk", NULL, S_FALSE, TRUE}, + {L"ftp", NULL, S_FALSE, TRUE}, + + /* one letter never matched in winxp */ + {L"a:", NULL, S_FALSE, TRUE}, + {L"b:", NULL, S_FALSE, TRUE}, + {L"c:", NULL, S_FALSE, TRUE}, + {L"d:", NULL, S_FALSE, TRUE}, + {L"e:", NULL, S_FALSE, TRUE}, + {L"f:", NULL, S_FALSE, TRUE}, + {L"g:", NULL, S_FALSE, TRUE}, + {L"h:", NULL, S_FALSE, TRUE}, + {L"i:", NULL, S_FALSE, TRUE}, + {L"j:", NULL, S_FALSE, TRUE}, + {L"k:", NULL, S_FALSE, TRUE}, + {L"l:", NULL, S_FALSE, TRUE}, + {L"m:", NULL, S_FALSE, TRUE}, + {L"n:", NULL, S_FALSE, TRUE}, + {L"o:", NULL, S_FALSE, TRUE}, + {L"p:", NULL, S_FALSE, TRUE}, + {L"q:", NULL, S_FALSE, TRUE}, + {L"r:", NULL, S_FALSE, TRUE}, + {L"s:", NULL, S_FALSE, TRUE}, + {L"t:", NULL, S_FALSE, TRUE}, + {L"u:", NULL, S_FALSE, TRUE}, + {L"v:", NULL, S_FALSE, TRUE}, + {L"w:", NULL, S_FALSE, TRUE}, + {L"x:", NULL, S_FALSE, TRUE}, + {L"y:", NULL, S_FALSE, TRUE}, + {L"z:", NULL, S_FALSE, TRUE}, + + {L"gophssss://", NULL, S_FALSE, TRUE}, + {L"gop://", NULL, S_FALSE, TRUE}, + {L"go://", NULL, S_FALSE, TRUE}, + {L"mai://", NULL, S_FALSE, TRUE}, + + {L"mkkkto://", NULL, S_FALSE, TRUE}, + {L"mailtoooooo://", NULL, S_FALSE, TRUE}, + {L"mailtooooop://", NULL, S_FALSE, TRUE}, + {L"newssssss://", NULL, S_FALSE, TRUE}, + {L"mkikkoo://", NULL, S_FALSE, TRUE}, + {L"mksss://", NULL, S_FALSE, TRUE}, + {L"ft", NULL, S_FALSE, TRUE}, + + /* mixed tests */ + {L"aa:", NULL, S_FALSE, TRUE}, + {L"bb:", NULL, S_FALSE, TRUE}, + {L"dd:", NULL, S_FALSE, TRUE}, + {L"gg:", NULL, S_FALSE, TRUE}, + {L"ii:", NULL, S_FALSE, TRUE}, + {L"jj:", NULL, S_FALSE, TRUE}, + {L"ll:", NULL, S_FALSE, TRUE}, + {L"oo:", NULL, S_FALSE, TRUE}, + {L"pp:", NULL, S_FALSE, TRUE}, + {L"qq:", NULL, S_FALSE, TRUE}, + {L"ss:", NULL, S_FALSE, TRUE}, + {L"uu:", NULL, S_FALSE, TRUE}, + {L"vv:", NULL, S_FALSE, TRUE}, + {L"ww:", NULL, S_FALSE, TRUE}, + {L"xx:", NULL, S_FALSE, TRUE}, + {L"yy:", NULL, S_FALSE, TRUE}, + {L"zz:", NULL, S_FALSE, TRUE}, + + /* taken from example in documentation */ + {L"http://www.microsoft.com", L"http://www.microsoft.com", S_OK}, + {L"http:www.microsoft.com", L"http://www.microsoft.com", S_OK, TRUE}, + {L"mail:someone@example.com", L"mailto:someone@example.com", S_OK, TRUE}, + {L"htpp:wwwmicrosoft.com", L"http://wwwmicrosoft.com", S_OK, TRUE}, + {L"htps:\www.microsoft.com", L"http://www.microsoft.com", S_OK, TRUE}, + {L"http:someone@example.com", L"http://someone@example.com", S_OK, TRUE}, + {L"abc:def", NULL, S_FALSE, TRUE}, + {L"someone@example.com", NULL, S_FALSE, TRUE}, + + {L"fztzp:", NULL, S_FALSE, TRUE}, + {L"zfztzp:", NULL, S_FALSE, TRUE}, + {L"zfztp:", NULL, S_FALSE, TRUE}, + {L"zftzp:", NULL, S_FALSE, TRUE}, + {L"zftpz:", NULL, S_FALSE, TRUE}, + + {L"htztps:", L"http://", S_OK, TRUE}, + {L"hzttps:", L"http://", S_OK, TRUE}, + {L"htzztps:", NULL, S_FALSE, TRUE}, + {L"hzzzzzzzzzzzzzztp:", NULL, S_FALSE, TRUE}, + {L"hzzzzzzzzzzzzzztpz:", NULL, S_FALSE, TRUE}, + {L"zhzzzzzzzzzzzzzztp:", NULL, S_FALSE, TRUE}, + {L"zhzzzzzzzzzzzzzztpz:", NULL, S_FALSE, TRUE}, + {L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:", NULL, S_FALSE, TRUE}, + + {L"hfttp:", L"http://", S_OK, TRUE}, + {L"hfttpz:", L"http://", S_OK, TRUE}, + {L"zhftp:", NULL, S_FALSE, TRUE}, + {L"hftftpz:", NULL, S_FALSE, TRUE}, + {L"hftddtpz:", NULL, S_FALSE, TRUE}, + {L"hftddtddpz:", NULL, S_FALSE, TRUE}, + + {L"hfftp:", L"http://", S_OK, TRUE}, + {L"hftpz:", L"http://", S_OK, TRUE}, + {L"hztpz:", L"http://", S_OK, TRUE}, + + {L"httpz:", L"http://", S_OK, TRUE}, + {L"httpsz:", L"http://", S_OK, TRUE}, + {L"httpzz:", L"http://", S_OK, TRUE}, + {L"httpzzz:", L"http://", S_OK, TRUE}, + {L"httpzzzz:", NULL, S_FALSE, TRUE}, + {L"httpzzzzz:", NULL, S_FALSE, TRUE}, + + /* missing colon */ + {L"http//www.microsoft.com", NULL, S_FALSE, TRUE}, +}; + +#define MAX_URL 256 + +static void test_UrlFixupW(void) +{ + const struct parse_urlfixupw_test_t *test; + WCHAR translated_url_buf[MAX_URL]; + WCHAR *translated_url = translated_url_buf; + HRESULT hres; + + trace("test_UrlFixupW\n"); + for (test = parse_urlfixupw_tests; test < parse_urlfixupw_tests + ARRAY_SIZE(parse_urlfixupw_tests); test++) { + trace("test_UrlFixupW, flag %s\n", test->todo ? "todo" : "run"); + todo_wine_if (test->todo) + { + translated_url_buf[0] = 0; + hres = UrlFixupW(test->url, translated_url,MAX_URL); + if (test->res == hres ) { + if (S_OK == hres) { + ok(_wcsicmp(translated_url, test->translated_url) == 0,"Expected %s got %s for %s\n", + wine_dbgstr_w(test->translated_url), wine_dbgstr_w(translated_url), wine_dbgstr_w(test->url)); + } else if (S_FALSE == hres) { + ok(test->res == hres, "Expected %lu got %lu for %s\n", + test->res, hres, wine_dbgstr_w(test->url)); + } else { + printf("failed %S with %lu \n", test->url, hres); + } + } else { + if (S_OK == hres) { + ok(test->res == hres, "Expected %lu got %lu for %s fixed: %s\n", + test->res, hres, wine_dbgstr_w(test->url), wine_dbgstr_w(translated_url)); + } else { + ok(test->res == hres, "Expected %lu got %lu for %s\n", + test->res, hres, wine_dbgstr_w(test->url)); + } + } + } + } +} + /* ########################### */
START_TEST(url) @@ -1626,4 +1938,5 @@ START_TEST(url) test_UrlUnescape(); test_ParseURL(); test_HashData(); + test_UrlFixupW(); } diff --git a/include/shlwapi.h b/include/shlwapi.h index eee41abf0dc..15c1cfa06da 100644 --- a/include/shlwapi.h +++ b/include/shlwapi.h @@ -701,6 +701,8 @@ WINSHLWAPI INT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL); WINSHLWAPI INT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL); #define UrlCompare WINELIB_NAME_AW(UrlCompare)
+WINSHLWAPI HRESULT WINAPI UrlFixupW(const WCHAR *,WCHAR *,DWORD); + WINSHLWAPI HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD); WINSHLWAPI HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define UrlEscape WINELIB_NAME_AW(UrlEscape)
From: Thomas Csovscity thc.fr13nd@gmail.com
--- dlls/kernelbase/path.c | 14 ++++++++++++++ dlls/shlwapi/tests/url.c | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/dlls/kernelbase/path.c b/dlls/kernelbase/path.c index 17b9e819aac..86b15944102 100644 --- a/dlls/kernelbase/path.c +++ b/dlls/kernelbase/path.c @@ -4092,6 +4092,7 @@ HRESULT WINAPI UrlFixupW(const WCHAR *url, WCHAR *translatedUrl, DWORD maxChars) { DWORD src_len, dst_len, len; DWORD pos = 0; + WCHAR *helper_str = NULL; WCHAR *save_str = translatedUrl;
static const WCHAR *url_scheme[] = { L"", L"ftp", L"https", L"gopher", L"mailto", L"news", @@ -4117,9 +4118,22 @@ HRESULT WINAPI UrlFixupW(const WCHAR *url, WCHAR *translatedUrl, DWORD maxChars)
lstrcpynW(save_str, url, len+2); url += len+1; + goto scheme_done; } }
+ /* + * url has to contain at least one colon. + * The scheme part length has a minimum of 2 characters. + * Output buffer length has to be minimum of 3 characters, scheme + colon. + * + * Return S_FALSE if url and buffer do not meet this minimum requirements. + */ + helper_str = wcschr(url, L':'); + if (!helper_str) + return S_FALSE; + +scheme_done: /* Add the URL path */ src_len = lstrlenW(url) + 1; dst_len = maxChars - lstrlenW(save_str); diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c index 8449cf5849f..154c0b47bef 100644 --- a/dlls/shlwapi/tests/url.c +++ b/dlls/shlwapi/tests/url.c @@ -1879,7 +1879,7 @@ static const struct parse_urlfixupw_test_t { {L"httpzzzzz:", NULL, S_FALSE, TRUE},
/* missing colon */ - {L"http//www.microsoft.com", NULL, S_FALSE, TRUE}, + {L"http//www.microsoft.com", NULL, S_FALSE}, };
#define MAX_URL 256
From: Thomas Csovscity thc.fr13nd@gmail.com
--- dlls/kernelbase/path.c | 76 +++++++++++++++++++++++++++++++++++++++- dlls/shlwapi/tests/url.c | 62 ++++++++++++++++---------------- 2 files changed, 106 insertions(+), 32 deletions(-)
diff --git a/dlls/kernelbase/path.c b/dlls/kernelbase/path.c index 86b15944102..17bcd4f8d31 100644 --- a/dlls/kernelbase/path.c +++ b/dlls/kernelbase/path.c @@ -4091,7 +4091,7 @@ INT WINAPI UrlCompareW(const WCHAR *url1, const WCHAR *url2, BOOL ignore_slash) HRESULT WINAPI UrlFixupW(const WCHAR *url, WCHAR *translatedUrl, DWORD maxChars) { DWORD src_len, dst_len, len; - DWORD pos = 0; + DWORD colon_pos = 0, pos = 0; WCHAR *helper_str = NULL; WCHAR *save_str = translatedUrl;
@@ -4133,7 +4133,81 @@ HRESULT WINAPI UrlFixupW(const WCHAR *url, WCHAR *translatedUrl, DWORD maxChars) if (!helper_str) return S_FALSE;
+ /* + * Colon should not be at the beginning + */ + colon_pos = helper_str-url; + if (helper_str && (1 >= colon_pos)) + return S_FALSE; + /* + * Check if string fits into maxChars + */ + // TODO: Use own buffer for adjustments, output buffer may not fit before fix + if (colon_pos >= maxChars && maxChars < 3) + return S_FALSE; + + /* + * Set potential scheme + */ + lstrcpynW(save_str, url, pos+2); + url = url + colon_pos + 1; + + /* + * Find schemes with trailing or leading typos + */ + for (pos=1; pos<ARRAY_SIZE(url_scheme); pos++) + { + /* http is always prefered before https, if string has typos */ + len = wcslen(url_scheme[pos]); + if (!_wcsnicmp(url_scheme[pos], L"https", len+1)) + { + continue; + } + if ( (len <= wcslen(save_str)) && (StrStrIW(save_str, url_scheme[pos])) ) + { + /* + * check if string fits into maxChars + */ + if (len+1 >= maxChars) + return S_FALSE; + + lstrcpynW(save_str, url_scheme[pos], len+1); + lstrcatW(save_str, L":"); + goto scheme_done; + } + } + + /* Return false in most remaining cases should be safe */ + return S_FALSE; + + /* Concat scheme + rest */ scheme_done: + /* + * Concat L"://"" for ftp, http, https scheme + * else ":" + */ + if ( 0 == lstrcmpW(save_str, L"ftp:") || + 0 == lstrcmpW(save_str, L"http:") || + 0 == lstrcmpW(save_str, L"https:") ) + { + if ( url[0] == L'\' || url[0] == L'/' ) + { + url++; + if ( url[0] == L'\' || url[0] == L'/' ) + url++; + } + lstrcatW(save_str, L"//"); + } + /* + * Remove leading "/", "" and ":" from url. + * Output already have them if needed + */ + while ( url[0] == L'\' || url[0] == L'/' ) + { + lstrcatW(save_str, L"/"); + url++; + } + /* Add the URL path */ src_len = lstrlenW(url) + 1; dst_len = maxChars - lstrlenW(save_str); diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c index 154c0b47bef..660f80a4a27 100644 --- a/dlls/shlwapi/tests/url.c +++ b/dlls/shlwapi/tests/url.c @@ -1618,8 +1618,8 @@ static const struct parse_urlfixupw_test_t { HRESULT res; BOOL todo; } parse_urlfixupw_tests[] = { - {L"ftp:", L"ftp://", S_OK, TRUE}, - {L"http:", L"http://", S_OK, TRUE}, + {L"ftp:", L"ftp://", S_OK}, + {L"http:", L"http://", S_OK}, {L"gopher:", L"gopher:", S_OK}, {L"mailto:", L"mailto:", S_OK}, {L"news:", L"news:", S_OK}, @@ -1628,7 +1628,7 @@ static const struct parse_urlfixupw_test_t { {L"wais:", L"wais:", S_OK}, {L"file:", L"file:", S_OK}, {L"mk:", L"mk:", S_OK}, - {L"https:", L"https://", S_OK, TRUE}, + {L"https:", L"https://", S_OK}, {L"shell:", L"shell:", S_OK}, {L"snews:", L"snews:", S_OK}, {L"local:", L"local:", S_OK}, @@ -1650,27 +1650,27 @@ static const struct parse_urlfixupw_test_t { {L"ftp://", L"ftp://", S_OK},
/* typos in front one letter */ - {L"aftp://", L"ftp://", S_OK, TRUE}, - {L"ahttp://", L"http://", S_OK, TRUE}, - {L"agopher://", L"gopher://", S_OK, TRUE}, - {L"amailto://", L"mailto://", S_OK, TRUE}, + {L"aftp://", L"ftp://", S_OK}, + {L"ahttp://", L"http://", S_OK}, + {L"agopher://", L"gopher://", S_OK}, + {L"amailto://", L"mailto://", S_OK}, {L"anews://", L"snews://", S_OK, TRUE}, - {L"anntp://", L"nntp://", S_OK, TRUE}, - {L"atelnet://", L"telnet://", S_OK, TRUE}, - {L"awais://", L"wais://", S_OK, TRUE}, - {L"afile://", L"file://", S_OK, TRUE}, - {L"amk://", L"mk://", S_OK, TRUE}, - {L"ahttps://", L"http://", S_OK, TRUE}, - {L"ashell://", L"shell://", S_OK, TRUE}, + {L"anntp://", L"nntp://", S_OK}, + {L"atelnet://", L"telnet://", S_OK}, + {L"awais://", L"wais://", S_OK}, + {L"afile://", L"file://", S_OK}, + {L"amk://", L"mk://", S_OK}, + {L"ahttps://", L"http://", S_OK}, + {L"ashell://", L"shell://", S_OK}, {L"asnews://", L"snews://", S_OK, TRUE}, - {L"alocal://", L"local://", S_OK, TRUE}, - {L"ajavascript://", L"javascript://", S_OK, TRUE}, - {L"avbscript://", L"vbscript://", S_OK, TRUE}, - {L"aabout://", L"about://", S_OK, TRUE}, - {L"ares://", L"res://", S_OK, TRUE}, + {L"alocal://", L"local://", S_OK}, + {L"ajavascript://", L"javascript://", S_OK}, + {L"avbscript://", L"vbscript://", S_OK}, + {L"aabout://", L"about://", S_OK}, + {L"ares://", L"res://", S_OK}, {L"ams-shell-rooted://", L"ms-shell-rooted://", S_OK, TRUE}, {L"ams-shell-idlist://", L"ms-shell-idlist://", S_OK, TRUE}, - {L"ahcp://", L"hcp://", S_OK, TRUE}, + {L"ahcp://", L"hcp://", S_OK},
/* typos in front two letters */ {L"bahttp://", L"about://", S_OK, TRUE}, @@ -1712,11 +1712,11 @@ static const struct parse_urlfixupw_test_t { {L"newsssss://", L"snews://", S_OK, TRUE},
/* typos letters behind*/ - {L"mks://", L"mk://", S_OK, TRUE}, - {L"mkss://", L"mk://", S_OK, TRUE}, - {L"mailtooo://", L"mailto://", S_OK, TRUE}, - {L"mailtoooo://", L"mailto://", S_OK, TRUE}, - {L"mailtooooo://", L"mailto://", S_OK, TRUE}, + {L"mks://", L"mk://", S_OK}, + {L"mkss://", L"mk://", S_OK}, + {L"mailtooo://", L"mailto://", S_OK}, + {L"mailtoooo://", L"mailto://", S_OK}, + {L"mailtooooo://", L"mailto://", S_OK},
/* typos fixing two letters */ {L"cc:", L"hcp:", S_OK, TRUE}, @@ -1837,11 +1837,11 @@ static const struct parse_urlfixupw_test_t {
/* taken from example in documentation */ {L"http://www.microsoft.com", L"http://www.microsoft.com", S_OK}, - {L"http:www.microsoft.com", L"http://www.microsoft.com", S_OK, TRUE}, + {L"http:www.microsoft.com", L"http://www.microsoft.com", S_OK}, {L"mail:someone@example.com", L"mailto:someone@example.com", S_OK, TRUE}, {L"htpp:wwwmicrosoft.com", L"http://wwwmicrosoft.com", S_OK, TRUE}, {L"htps:\www.microsoft.com", L"http://www.microsoft.com", S_OK, TRUE}, - {L"http:someone@example.com", L"http://someone@example.com", S_OK, TRUE}, + {L"http:someone@example.com", L"http://someone@example.com", S_OK}, {L"abc:def", NULL, S_FALSE, TRUE}, {L"someone@example.com", NULL, S_FALSE, TRUE},
@@ -1871,10 +1871,10 @@ static const struct parse_urlfixupw_test_t { {L"hftpz:", L"http://", S_OK, TRUE}, {L"hztpz:", L"http://", S_OK, TRUE},
- {L"httpz:", L"http://", S_OK, TRUE}, - {L"httpsz:", L"http://", S_OK, TRUE}, - {L"httpzz:", L"http://", S_OK, TRUE}, - {L"httpzzz:", L"http://", S_OK, TRUE}, + {L"httpz:", L"http://", S_OK}, + {L"httpsz:", L"http://", S_OK}, + {L"httpzz:", L"http://", S_OK}, + {L"httpzzz:", L"http://", S_OK}, {L"httpzzzz:", NULL, S_FALSE, TRUE}, {L"httpzzzzz:", NULL, S_FALSE, TRUE},
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=128644
Your paranoid android.
=== debian11 (32 bit report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11 (32 bit ar:MA report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11 (32 bit de report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11 (32 bit fr report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11 (32 bit he:IL report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11 (32 bit hi:IN report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11 (32 bit ja:JP report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11 (32 bit zh:CN report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11b (32 bit WoW report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"
=== debian11b (64 bit WoW report) ===
shlwapi: url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mk" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ftp" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"a:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"b:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"c:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"d:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"e:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"f:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"g:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"h:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"i:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"j:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"k:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"l:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"m:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"n:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"o:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"p:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"q:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"r:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"s:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"t:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"u:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"v:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"w:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"x:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"y:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"z:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gophssss://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gop://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"go://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"mai://" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ft" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"aa:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"bb:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"dd:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"gg:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ii:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"jj:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ll:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"oo:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"pp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"qq:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ss:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"uu:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"vv:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"ww:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"xx:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"yy:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"abc:def" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"someone@example.com" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"fztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zfztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zftzp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"htzztps:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztp:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zhzzzzzzzzzzzzzztpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"zzzzzzhzzzzzzzzzzzzzztzzzzzzpzzzzzz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtpz:" url.c:1906: Test succeeded inside todo block: Expected 1 got 1 for L"hftddtddpz:"