Damjan Jovanovic : shlwapi: Fix UrlCanonicalizeW'
s handling of filesystem paths.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 11 07:27:57 CDT 2007
Module: wine
Branch: master
Commit: 3ceaaae3d77f55bab7919f5d62fe552fd33937e1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3ceaaae3d77f55bab7919f5d62fe552fd33937e1
Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date: Thu May 10 12:57:23 2007 +0200
shlwapi: Fix UrlCanonicalizeW's handling of filesystem paths.
---
dlls/shlwapi/tests/path.c | 9 +++------
dlls/shlwapi/url.c | 7 +++++++
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/shlwapi/tests/path.c b/dlls/shlwapi/tests/path.c
index 6f52ac7..bde40b2 100644
--- a/dlls/shlwapi/tests/path.c
+++ b/dlls/shlwapi/tests/path.c
@@ -68,6 +68,7 @@ const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = {
{"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"},
{"file:///c:/tests\\foo%20bar", URL_UNESCAPE , S_OK, "file:///c:/tests/foo bar"},
+ {"file:///c:/tests/foo%20bar", 0, S_OK, "file:///c:/tests/foo%20bar"},
{"file:///c:/tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar"},
{"file://c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar"},
{"file://c:/tests\\../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar"},
@@ -80,6 +81,8 @@ const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = {
{"c:\\dir\\file", 0, S_OK, "file:///c:/dir/file"},
{"file:///c:\\dir\\file", 0, S_OK, "file:///c:/dir/file"},
{"c:dir\\file", 0, S_OK, "file:///c:dir/file"},
+ {"c:\\tests\\foo bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar"},
+ {"c:\\tests\\foo bar", 0, S_OK, "file:///c:/tests/foo%20bar"},
{"A", 0, S_OK, "A"},
{"", 0, S_OK, ""}
};
@@ -509,12 +512,6 @@ static void test_UrlCanonicalize(void)
/* move to TEST_CANONICALIZE when fixed */
dwSize = sizeof szReturnUrl;
- ok(UrlCanonicalizeA("c:\\tests\\foo bar", szReturnUrl, &dwSize, 0) == S_OK, "UrlCanonicalizeA didn't return 0x%08x\n", S_OK);
- todo_wine {
- ok(strcmp(szReturnUrl,"file:///c:/tests/foo%20bar")==0, "UrlCanonicalizeA got %s\n", szReturnUrl);
- }
-
- dwSize = sizeof szReturnUrl;
/*LimeWire online installer calls this*/
hr = UrlCanonicalizeA("/uri-res/N2R?urn:sha1:B3K", szReturnUrl, &dwSize,URL_DONT_ESCAPE_EXTRA_INFO | URL_WININET_COMPATIBILITY /*0x82000000*/);
ok(hr==S_OK,"UrlCanonicalizeA returned 0x%08x instead of S_OK\n", hr);
diff --git a/dlls/shlwapi/url.c b/dlls/shlwapi/url.c
index 20c0ba2..0991dad 100644
--- a/dlls/shlwapi/url.c
+++ b/dlls/shlwapi/url.c
@@ -358,6 +358,13 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
memcpy(wk2, wszFilePrefix, sizeof(wszFilePrefix));
wk2 += sizeof(wszFilePrefix)/sizeof(WCHAR);
+ if (dwFlags & URL_FILE_USE_PATHURL)
+ {
+ slash = '\\';
+ --wk2;
+ }
+ else
+ dwFlags |= URL_ESCAPE_UNSAFE;
state = 5;
}
More information about the wine-cvs
mailing list