SHLWAPI: Test cases for URL_UNESCAPE and small fix

Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Sun May 22 12:00:44 CDT 2005


Changelog:
	dlls/shlwapi/url.c, dlls/shlwapi/tests/path.c
	Testcases for URL_UNESCAPE and fixes for this case in
	UrlCanonicalizeW and UrlUnescapeW
-- 
Uwe Bonnes                bon at elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: wine/dlls/shlwapi/url.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/url.c,v
retrieving revision 1.51
diff -u -r1.51 url.c
--- wine/dlls/shlwapi/url.c	18 Apr 2005 15:36:20 -0000	1.51
+++ wine/dlls/shlwapi/url.c	22 May 2005 11:07:05 -0000
@@ -459,7 +459,7 @@
         lpszUrlCpy[--nLen]=0;
 
     if(dwFlags & URL_UNESCAPE)
-        UrlUnescapeW(lpszUrlCpy, NULL, NULL, URL_UNESCAPE_INPLACE);
+        UrlUnescapeW(lpszUrlCpy, NULL, &nLen, URL_UNESCAPE_INPLACE);
 
     if((EscapeFlags = dwFlags & (URL_ESCAPE_UNSAFE |
                                  URL_ESCAPE_SPACES_ONLY |
@@ -1160,7 +1160,7 @@
     TRACE("(%s, %p, %p, 0x%08lx)\n", debugstr_w(pszUrl), pszUnescaped,
 	  pcchUnescaped, dwFlags);
 
-    if(!pszUrl || !pszUnescaped || !pcchUnescaped)
+    if(!pszUrl || (!pszUnescaped && !(dwFlags & URL_UNESCAPE_INPLACE))|| !pcchUnescaped)
 	return E_INVALIDARG;
 
     if(dwFlags & URL_UNESCAPE_INPLACE)
Index: wine/dlls/shlwapi/tests/path.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/tests/path.c,v
retrieving revision 1.20
diff -u -r1.20 path.c
--- wine/dlls/shlwapi/tests/path.c	18 May 2005 15:33:20 -0000	1.20
+++ wine/dlls/shlwapi/tests/path.c	22 May 2005 11:07:06 -0000
@@ -61,6 +61,9 @@
     {"http://www.winehq.org/tests/..#example", 0, S_OK, "http://www.winehq.org/#example"},
     {"http://www.winehq.org/tests/../#example", 0, S_OK, "http://www.winehq.org/#example"},
     {"http://www.winehq.org/tests/../#example", URL_DONT_SIMPLIFY, S_OK, "http://www.winehq.org/tests/../#example"},
+    {"http://www.winehq.org/tests/foo bar", URL_ESCAPE_SPACES_ONLY| URL_DONT_ESCAPE_EXTRA_INFO , S_OK, "http://www.winehq.org/tests/foo%20bar"},
+    {"http://www.winehq.org/tests/foo%20bar", URL_UNESCAPE , S_OK, "http://www.winehq.org/tests/foo bar"},
+    {"file:///c:/tests/foo%20bar", URL_UNESCAPE , S_OK, "file:///c:/tests/foo bar"},
 };
 
 typedef struct _TEST_URL_ESCAPE {
@@ -185,6 +188,7 @@
     {"c:\\foo\\bar", "file:///c:/foo/bar", S_OK},
     {"c:foo\\bar", "file:///c:foo/bar", S_OK},
     {"c:\\foo/b a%r", "file:///c:/foo/b%20a%25r", S_OK},
+    {"c:\\foo\\foo bar", "file:///c:/foo/foo%20bar", S_OK},
 #if 0
     /* The following test fails on native shlwapi as distributed with Win95/98.
      * Wine matches the behaviour of later versions.
@@ -219,6 +223,7 @@
     {"file:c|/foo/bar", "c:\\foo\\bar", S_OK},
     {"file:cx|/foo/bar", "cx|\\foo\\bar", S_OK},
     {"file:////c:/foo/bar", "c:\\foo\\bar", S_OK},
+/*    {"file:////c:/foo/foo%20bar", "c:\\foo\\foo%20bar", S_OK},*/
 
     {"c:\\foo\\bar", NULL, E_INVALIDARG},
     {"foo/bar", NULL, E_INVALIDARG},
@@ -387,10 +392,12 @@
     DWORD dwSize;
     
     dwSize = INTERNET_MAX_URL_LENGTH;
+    ok(UrlCanonicalizeA(szUrl, NULL, &dwSize, dwFlags) != dwExpectReturn, "Unexpected return for NULL buffer\n");
     ok(UrlCanonicalizeA(szUrl, szReturnUrl, &dwSize, dwFlags) == dwExpectReturn, "UrlCanonicalizeA didn't return 0x%08lx\n", dwExpectReturn);
-    ok(strcmp(szReturnUrl,szExpectUrl)==0, "Expected %s, but got %s\n", szExpectUrl, szReturnUrl);
+    ok(strcmp(szReturnUrl,szExpectUrl)==0, "UrlCanonicalizeA dwFlags 0x%08lx Expected %s, but got %s\n", dwFlags, szExpectUrl, szReturnUrl);
 
     dwSize = INTERNET_MAX_URL_LENGTH;
+    ok(UrlCanonicalizeW(wszUrl, NULL, &dwSize, dwFlags) != dwExpectReturn, "Unexpected return for NULL buffer\n");
     ok(UrlCanonicalizeW(wszUrl, wszReturnUrl, &dwSize, dwFlags) == dwExpectReturn, "UrlCanonicalizeW didn't return 0x%08lx\n", dwExpectReturn);
     wszConvertedUrl = GetWideString(szReturnUrl);
     ok(strcmpW(wszReturnUrl, wszConvertedUrl)==0, "Strings didn't match between ascii and unicode UrlCanonicalize!\n");



More information about the wine-patches mailing list