Fabian Maurer : shlwapi: Changed UrlEscapeW error paths and add tests.

Alexandre Julliard julliard at winehq.org
Wed Dec 14 16:45:28 CST 2016


Module: wine
Branch: master
Commit: 101edb1f6dd96849de92f98297d450064b3cc0c5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=101edb1f6dd96849de92f98297d450064b3cc0c5

Author: Fabian Maurer <dark.shadow4 at web.de>
Date:   Wed Dec 14 16:47:51 2016 +0100

shlwapi: Changed UrlEscapeW error paths and add tests.

Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/shlwapi/tests/url.c | 40 +++++++++++++++++++++++++++++++++++++++-
 dlls/shlwapi/url.c       |  2 +-
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c
index f9fc79a..f1c0965 100644
--- a/dlls/shlwapi/tests/url.c
+++ b/dlls/shlwapi/tests/url.c
@@ -930,12 +930,14 @@ static void test_UrlEscapeA(void)
 
 static void test_UrlEscapeW(void)
 {
+    static const WCHAR path_test[] = {'/','t','e','s','t',0};
     static const WCHAR naW[] = {'f','t','p',31,255,250,0x2122,'e','n','d','/',0};
     static const WCHAR naescapedW[] = {'f','t','p','%','1','F','%','F','F','%','F','A',0x2122,'e','n','d','/',0};
     static const WCHAR out[] = {'f','o','o','%','2','0','b','a','r',0};
     WCHAR overwrite[] = {'f','o','o',' ','b','a','r',0,0,0};
     WCHAR ret_urlW[INTERNET_MAX_URL_LENGTH];
-    DWORD size = 0;
+    WCHAR empty_string[] = {0};
+    DWORD size;
     HRESULT ret;
     WCHAR wc;
     int i;
@@ -945,6 +947,42 @@ static void test_UrlEscapeW(void)
         return;
     }
 
+    /* Check error paths */
+
+    ret = UrlEscapeW(path_test, NULL, NULL, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG);
+
+    size = 0;
+    ret = UrlEscapeW(path_test, NULL, &size, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG);
+    ok(size == 0, "got %d, expected %d\n", size, 0);
+
+    ret = UrlEscapeW(path_test, empty_string, NULL, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG);
+
+    size = 0;
+    ret = UrlEscapeW(path_test, empty_string, &size, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG);
+    ok(size == 0, "got %d, expected %d\n", size, 0);
+
+    ret = UrlEscapeW(path_test, NULL, NULL, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG);
+
+    size = 1;
+    ret = UrlEscapeW(path_test, NULL, &size, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG);
+    ok(size == 1, "got %d, expected %d\n", size, 1);
+
+    ret = UrlEscapeW(path_test, empty_string, NULL, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_INVALIDARG, "got %x, expected %x\n", ret, E_INVALIDARG);
+
+    size = 1;
+    ret = UrlEscapeW(path_test, empty_string, &size, URL_ESCAPE_SPACES_ONLY);
+    ok(ret == E_POINTER, "got %x, expected %x\n", ret, E_POINTER);
+    ok(size == 6, "got %d, expected %d\n", size, 6);
+
+    /* Check actual escaping */
+
     size = sizeof(overwrite)/sizeof(WCHAR);
     ret = pUrlEscapeW(overwrite, overwrite, &size, URL_ESCAPE_SPACES_ONLY);
     ok(ret == S_OK, "got %x, expected S_OK\n", ret);
diff --git a/dlls/shlwapi/url.c b/dlls/shlwapi/url.c
index 2caf998..89d5a5d 100644
--- a/dlls/shlwapi/url.c
+++ b/dlls/shlwapi/url.c
@@ -1089,7 +1089,7 @@ HRESULT WINAPI UrlEscapeW(
     TRACE("(%p(%s) %p %p 0x%08x)\n", pszUrl, debugstr_w(pszUrl),
             pszEscaped, pcchEscaped, dwFlags);
 
-    if(!pszUrl || !pcchEscaped)
+    if(!pszUrl || !pcchEscaped || !pszEscaped || *pcchEscaped == 0)
         return E_INVALIDARG;
 
     if(dwFlags & ~(URL_ESCAPE_SPACES_ONLY |




More information about the wine-cvs mailing list