Dmitry Timoshkov : urlmon: Add support for PARSE_UNESCAPE to CoInternetParseUrl.

Alexandre Julliard julliard at winehq.org
Fri May 17 16:10:14 CDT 2019


Module: wine
Branch: master
Commit: 422b625c9b31763e1542bbc1947c13bc5609ceda
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=422b625c9b31763e1542bbc1947c13bc5609ceda

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Fri May 17 15:04:16 2019 +0800

urlmon: Add support for PARSE_UNESCAPE to CoInternetParseUrl.

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/urlmon/internet.c   |  7 ++++---
 dlls/urlmon/tests/misc.c | 23 +++++++++++++++++++++++
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/dlls/urlmon/internet.c b/dlls/urlmon/internet.c
index 7c997a0..da4fa9a 100644
--- a/dlls/urlmon/internet.c
+++ b/dlls/urlmon/internet.c
@@ -218,7 +218,7 @@ static HRESULT parse_security_url(LPCWSTR url, DWORD flags, LPWSTR result, DWORD
     return E_FAIL;
 }
 
-static HRESULT parse_encode(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
+static HRESULT parse_encode(LPCWSTR url, PARSEACTION action, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 {
     IInternetProtocolInfo *protocol_info;
     DWORD prsize;
@@ -229,7 +229,7 @@ static HRESULT parse_encode(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size,
     protocol_info = get_protocol_info(url);
 
     if(protocol_info) {
-        hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_ENCODE,
+        hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, action,
                 flags, result, size, rsize, 0);
         IInternetProtocolInfo_Release(protocol_info);
         if(SUCCEEDED(hres))
@@ -401,7 +401,8 @@ HRESULT WINAPI CoInternetParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD
     case PARSE_SECURITY_URL:
         return parse_security_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
     case PARSE_ENCODE:
-        return parse_encode(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
+    case PARSE_UNESCAPE:
+        return parse_encode(pwzUrl, ParseAction, dwFlags, pszResult, cchResult, pcchResult);
     case PARSE_PATH_FROM_URL:
         return parse_path_from_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
     case PARSE_SCHEMA:
diff --git a/dlls/urlmon/tests/misc.c b/dlls/urlmon/tests/misc.c
index de0c654..6f4da47 100644
--- a/dlls/urlmon/tests/misc.c
+++ b/dlls/urlmon/tests/misc.c
@@ -62,6 +62,7 @@ DEFINE_GUID(CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xA
 
 DEFINE_EXPECT(ParseUrl);
 DEFINE_EXPECT(ParseUrl_ENCODE);
+DEFINE_EXPECT(ParseUrl_UNESCAPE);
 DEFINE_EXPECT(QI_IInternetProtocolInfo);
 DEFINE_EXPECT(CreateInstance);
 DEFINE_EXPECT(unk_Release);
@@ -383,6 +384,13 @@ static void test_CoInternetParseUrl(void)
         ok(!lstrcmpW(parse_tests[i].encoded_url, buf), "[%d] wrong encoded url\n", i);
 
         memset(buf, 0xf0, sizeof(buf));
+        hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_UNESCAPE, 0, buf,
+                ARRAY_SIZE(buf), &size, 0);
+        ok(hres == S_OK, "[%d] encoding failed: %08x\n", i, hres);
+        ok(size == lstrlenW(parse_tests[i].encoded_url), "[%d] wrong size\n", i);
+        ok(!lstrcmpW(parse_tests[i].encoded_url, buf), "[%d] wrong encoded url\n", i);
+
+        memset(buf, 0xf0, sizeof(buf));
         hres = pCoInternetParseUrl(parse_tests[i].url, PARSE_PATH_FROM_URL, 0, buf,
                 ARRAY_SIZE(buf), &size, 0);
         ok(hres == parse_tests[i].path_hres, "[%d] path failed: %08x, expected %08x\n",
@@ -890,6 +898,11 @@ static HRESULT WINAPI InternetProtocolInfo_ParseUrl(IInternetProtocolInfo *iface
     case PARSE_ENCODE:
         CHECK_EXPECT2(ParseUrl_ENCODE);
         break;
+
+    case PARSE_UNESCAPE:
+        CHECK_EXPECT2(ParseUrl_UNESCAPE);
+        break;
+
     default:
         CHECK_EXPECT2(ParseUrl);
         break;
@@ -1056,6 +1069,16 @@ static void test_NameSpace(void)
     CHECK_CALLED(QI_IInternetProtocolInfo);
     CHECK_CALLED(ParseUrl_ENCODE);
 
+    qiret = S_OK;
+    SET_EXPECT(QI_IInternetProtocolInfo);
+    SET_EXPECT(ParseUrl_UNESCAPE);
+
+    hres = pCoInternetParseUrl(url8, PARSE_UNESCAPE, 0, buf, ARRAY_SIZE(buf), &size, 0);
+    ok(hres == S_OK, "CoInternetParseUrl failed: %08x\n", hres);
+
+    CHECK_CALLED(QI_IInternetProtocolInfo);
+    CHECK_CALLED(ParseUrl_UNESCAPE);
+
     SET_EXPECT(QI_IInternetProtocolInfo);
     SET_EXPECT(ParseUrl);
 




More information about the wine-cvs mailing list