Petr Dlouhý : shlwapi: UrlCanonicalize will canonize address in format "file://localhost/c:/" correctly.
Alexandre Julliard
julliard at winehq.org
Sat Jun 21 05:39:14 CDT 2008
Module: wine
Branch: master
Commit: 283012cc95110f3700394aaa6cdfef9e9bf92ca5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=283012cc95110f3700394aaa6cdfef9e9bf92ca5
Author: Petr Dlouhý <pdlo at seznam.cz>
Date: Thu Jun 19 11:35:20 2008 +0200
shlwapi: UrlCanonicalize will canonize address in format "file://localhost/c:/" correctly.
---
dlls/shlwapi/tests/url.c | 4 ++++
dlls/shlwapi/url.c | 7 +++++++
2 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c
index cd7a5f2..37c0111 100644
--- a/dlls/shlwapi/tests/url.c
+++ b/dlls/shlwapi/tests/url.c
@@ -74,6 +74,10 @@ static const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = {
{"file:///c:/tests\\foo%20bar", URL_UNESCAPE , S_OK, "file:///c:/tests/foo bar", FALSE},
{"file:///c:/tests/foo%20bar", 0, S_OK, "file:///c:/tests/foo%20bar", FALSE},
{"file:///c:/tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
+ {"file://localhost/c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
+ {"file://localhost\\c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
+ {"file://localhost\\\\c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
+ {"file://localhost\\c:\\tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
{"file://c:/tests/../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
{"file://c:/tests\\../tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
{"file://c:/tests/foo%20bar", URL_FILE_USE_PATHURL, S_OK, "file://c:\\tests\\foo bar", FALSE},
diff --git a/dlls/shlwapi/url.c b/dlls/shlwapi/url.c
index 2593f96..16031e8 100644
--- a/dlls/shlwapi/url.c
+++ b/dlls/shlwapi/url.c
@@ -319,6 +319,7 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
WCHAR slash = '/';
static const WCHAR wszFile[] = {'f','i','l','e',':'};
+ static const WCHAR wszLocalhost[] = {'l','o','c','a','l','h','o','s','t'};
TRACE("(%s, %p, %p, 0x%08x) *pcchCanonicalized: %d\n", debugstr_w(pszUrl), pszCanonicalized,
pcchCanonicalized, dwFlags, pcchCanonicalized ? *pcchCanonicalized : -1);
@@ -387,6 +388,12 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
*wk2++ = *wk1++;
if (*wk1 != '/') {state = 6; break;}
*wk2++ = *wk1++;
+ if((dwFlags & URL_FILE_USE_PATHURL) && nByteLen >= sizeof(wszLocalhost)
+ && !memcmp(wszLocalhost, wk1, sizeof(wszLocalhost))){
+ wk1 += sizeof(wszLocalhost)/sizeof(WCHAR);
+ while(*wk1 == '\\' && (dwFlags & URL_FILE_USE_PATHURL))
+ wk1++;
+ }
if(*wk1 == '/' && (dwFlags & URL_FILE_USE_PATHURL))
wk1++;
state = 4;
More information about the wine-cvs
mailing list