Module: wine Branch: master Commit: 283012cc95110f3700394aaa6cdfef9e9bf92ca5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=283012cc95110f3700394aaa6c...
Author: Petr Dlouhý pdlo@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;