Module: wine Branch: refs/heads/master Commit: 8bb2513ee9f2457093b6ac3fff5866f3279e3274 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=8bb2513ee9f2457093b6ac3f...
Author: Jacek Caban jacek@codeweavers.com Date: Fri May 12 18:49:27 2006 +0200
mshtml: Fix protocol tests on XP. Make Wine match XP implementation.
---
dlls/mshtml/protocol.c | 20 +++++++++++--- dlls/mshtml/tests/protocol.c | 61 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 7 deletions(-)
diff --git a/dlls/mshtml/protocol.c b/dlls/mshtml/protocol.c index 104b1c1..b99bef3 100644 --- a/dlls/mshtml/protocol.c +++ b/dlls/mshtml/protocol.c @@ -414,8 +414,14 @@ static HRESULT WINAPI AboutProtocolInfo_ }
if(ParseAction == PARSE_DOMAIN) { - /* Tests show that we don't have to do anything here */ - return S_OK; + if(!pcchResult) + return E_POINTER; + + if(pwzUrl) + *pcchResult = strlenW(pwzUrl)+1; + else + *pcchResult = 1; + return E_FAIL; }
return INET_E_DEFAULT_ACTION; @@ -810,8 +816,14 @@ static HRESULT WINAPI ResProtocolInfo_Pa }
if(ParseAction == PARSE_DOMAIN) { - /* Tests show that we don't have to do anything here */ - return S_OK; + if(!pcchResult) + return E_POINTER; + + if(pwzUrl) + *pcchResult = strlenW(pwzUrl)+1; + else + *pcchResult = 1; + return E_FAIL; }
return INET_E_DEFAULT_ACTION; diff --git a/dlls/mshtml/tests/protocol.c b/dlls/mshtml/tests/protocol.c index 309c860..3f01207 100644 --- a/dlls/mshtml/tests/protocol.c +++ b/dlls/mshtml/tests/protocol.c @@ -290,21 +290,51 @@ static void test_res_protocol(void) sizeof(buf)/sizeof(buf[0]), &size, 0); ok(hres == MK_E_SYNTAX, "ParseUrl failed: %08lx, expected MK_E_SYNTAX\n", hres);
+ size = 0xdeadbeef; buf[0] = '?'; hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_DOMAIN, 0, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK, "ParseUrl failed: %08lx\n", hres); + ok(hres == S_OK || hres == E_FAIL, "ParseUrl failed: %08lx\n", hres); ok(buf[0] == '?', "buf changed\n"); + ok(size == sizeof(blank_url)/sizeof(WCHAR), + "size=%ld, ezpected %d\n", size, sizeof(wrong_url1)/sizeof(WCHAR));
+ size = 0xdeadbeef; hres = IInternetProtocolInfo_ParseUrl(protocol_info, wrong_url1, PARSE_DOMAIN, 0, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK, "ParseUrl failed: %08lx, expected MK_E_SYNTAX\n", hres); + ok(hres == S_OK || hres == E_FAIL, "ParseUrl failed: %08lx\n", hres); ok(buf[0] == '?', "buf changed\n"); + ok(size == sizeof(wrong_url1)/sizeof(WCHAR), + "size=%ld, ezpected %d\n", size, sizeof(wrong_url1)/sizeof(WCHAR));
+#if 0 /* Crashes on win9x */ + size = 0xdeadbeef; + buf[0] = '?'; + hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, + sizeof(buf)/sizeof(buf[0]), &size, 0); + ok(hres == E_FAIL, "ParseUrl failed: %08lx\n", hres); + ok(buf[0] == '?', "buf changed\n"); + ok(size == 1, "size=%ld, ezpected 1\n", size); + + buf[0] = '?'; + hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_DOMAIN, 0, buf, + sizeof(buf)/sizeof(buf[0]), NULL, 0); + ok(hres == E_POINTER, "ParseUrl failed: %08lx\n", hres); + ok(buf[0] == '?', "buf changed\n"); + + buf[0] = '?'; + hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, + sizeof(buf)/sizeof(buf[0]), NULL, 0); + ok(hres == E_POINTER, "ParseUrl failed: %08lx\n", hres); + ok(buf[0] == '?', "buf changed\n"); +#endif + + buf[0] = '?'; hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_UNESCAPE+1, 0, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); ok(hres == INET_E_DEFAULT_ACTION, "ParseUrl failed: %08lx, expected INET_E_DEFAULT_ACTION\n", hres); + ok(buf[0] == '?', "buf changed\n");
IInternetProtocolInfo_Release(protocol_info); } @@ -437,11 +467,36 @@ static void test_about_protocol(void) ok(hres == S_OK, "ParseUrl failed: %08lx\n", hres); ok(!lstrcmpW(test_url, buf), "buf != test_url\n");
+ size = 0xdeadbeef; buf[0] = '?'; hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_DOMAIN, 0, buf, sizeof(buf)/sizeof(buf[0]), &size, 0); - ok(hres == S_OK, "ParseUrl failed: %08lx\n", hres); + ok(hres == S_OK || hres == E_FAIL, "ParseUrl failed: %08lx\n", hres); + ok(buf[0] == '?', "buf changed\n"); + ok(size == sizeof(blank_url)/sizeof(WCHAR), + "size=%ld, expected %d\n", size, sizeof(blank_url)/sizeof(WCHAR)); + +#if 0 /* Crashes on win9x */ + size = 0xdeadbeef; + buf[0] = '?'; + hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, + sizeof(buf)/sizeof(buf[0]), &size, 0); + ok(hres == E_FAIL, "ParseUrl failed: %08lx\n", hres); + ok(buf[0] == '?', "buf changed\n"); + ok(size == 1, "size=%ld, ezpected 1\n", size); + + buf[0] = '?'; + hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_DOMAIN, 0, buf, + sizeof(buf)/sizeof(buf[0]), NULL, 0); + ok(hres == E_POINTER, "ParseUrl failed: %08lx\n", hres); + ok(buf[0] == '?', "buf changed\n"); + + buf[0] = '?'; + hres = IInternetProtocolInfo_ParseUrl(protocol_info, NULL, PARSE_DOMAIN, 0, buf, + sizeof(buf)/sizeof(buf[0]), NULL, 0); + ok(hres == E_POINTER, "ParseUrl failed: %08lx\n", hres); ok(buf[0] == '?', "buf changed\n"); +#endif
hres = IInternetProtocolInfo_ParseUrl(protocol_info, blank_url, PARSE_UNESCAPE+1, 0, buf, sizeof(buf)/sizeof(buf[0]), &size, 0);