Aric Stewart : shlwapi: URL_FILE_USE_PATHURL flag only unescapes file urls in UrlCanonicalize.

Alexandre Julliard julliard at winehq.org
Wed Jun 23 10:57:06 CDT 2010


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Wed Jun 23 15:47:35 2010 +0900

shlwapi: URL_FILE_USE_PATHURL flag only unescapes file urls in UrlCanonicalize.

---

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

diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c
index c828ea9..8a8f68a 100644
--- a/dlls/shlwapi/tests/url.c
+++ b/dlls/shlwapi/tests/url.c
@@ -160,7 +160,9 @@ static const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = {
     {"A", 0, S_OK, "A", FALSE},
     {"/uri-res/N2R?urn:sha1:B3K", URL_DONT_ESCAPE_EXTRA_INFO | URL_WININET_COMPATIBILITY /*0x82000000*/, S_OK, "/uri-res/N2R?urn:sha1:B3K", FALSE} /*LimeWire online installer calls this*/,
     {"http:www.winehq.org/dir/../index.html", 0, S_OK, "http:www.winehq.org/index.html"},
-    {"http://localhost/test.html", URL_FILE_USE_PATHURL, S_OK, "http://localhost/test.html"}
+    {"http://localhost/test.html", URL_FILE_USE_PATHURL, S_OK, "http://localhost/test.html"},
+    {"http://localhost/te%20st.html", URL_FILE_USE_PATHURL, S_OK, "http://localhost/te%20st.html"},
+    {"http://www.winehq.org/%E6%A1%9C.html", URL_FILE_USE_PATHURL, S_OK, "http://www.winehq.org/%E6%A1%9C.html"}
 };
 
 /* ################ */
diff --git a/dlls/shlwapi/url.c b/dlls/shlwapi/url.c
index ad7d989..d7a36db 100644
--- a/dlls/shlwapi/url.c
+++ b/dlls/shlwapi/url.c
@@ -486,7 +486,9 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
     while ((nLen > 0) && ((lpszUrlCpy[nLen-1] <= ' ')))
         lpszUrlCpy[--nLen]=0;
 
-    if(dwFlags & (URL_UNESCAPE | URL_FILE_USE_PATHURL))
+    if((dwFlags & URL_UNESCAPE) ||
+       ((dwFlags & URL_FILE_USE_PATHURL) && nByteLen >= sizeof(wszFile)
+                && !memcmp(wszFile, pszUrl, sizeof(wszFile))))
         UrlUnescapeW(lpszUrlCpy, NULL, &nLen, URL_UNESCAPE_INPLACE);
 
     if((EscapeFlags = dwFlags & (URL_ESCAPE_UNSAFE |




More information about the wine-cvs mailing list