Module: wine Branch: master Commit: 4454770cbcb8948b5545498f89831bc2d07a4767 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4454770cbcb8948b5545498f89...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Jan 21 16:11:58 2011 +0100
urlmon: Call remove_dot_segments on path opaque for mk: protocol.
---
dlls/urlmon/tests/uri.c | 150 +++++++++++++++++++++++++++++++++++++++++++++++ dlls/urlmon/uri.c | 6 ++ 2 files changed, 156 insertions(+), 0 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c index 5bbd051..c88c8e4 100644 --- a/dlls/urlmon/tests/uri.c +++ b/dlls/urlmon/tests/uri.c @@ -3963,6 +3963,156 @@ static const uri_properties uri_tests[] = { {URL_SCHEME_RES,S_OK,FALSE}, {URLZONE_INVALID,E_NOTIMPL,FALSE} } + }, + { "mk:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg", 0, S_OK, FALSE, + { + {"mk:@MSITStore:Z:\dir\test.chm::/images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\test.chm::/images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {".jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"@MSITStore:Z:\dir\test.chm::/images/xxx.jpg",S_OK,FALSE}, + {"@MSITStore:Z:\dir\test.chm::/images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"mk",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE} + }, + { + {Uri_HOST_UNKNOWN,S_OK,FALSE}, + {0,S_FALSE,FALSE}, + {URL_SCHEME_MK,S_OK,FALSE}, + {URLZONE_INVALID,E_NOTIMPL,FALSE} + } + }, + { "mk:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg", Uri_CREATE_NO_CANONICALIZE, S_OK, FALSE, + { + {"mk:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {".jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"mk",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE} + }, + { + {Uri_HOST_UNKNOWN,S_OK,FALSE}, + {0,S_FALSE,FALSE}, + {URL_SCHEME_MK,S_OK,FALSE}, + {URLZONE_INVALID,E_NOTIMPL,FALSE} + } + }, + { "xx:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg", 0, S_OK, FALSE, + { + {"xx:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"xx:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {".jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"xx:@MSITStore:Z:\dir\test.chm::/html/../images/xxx.jpg",S_OK,FALSE}, + {"xx",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE} + }, + { + {Uri_HOST_UNKNOWN,S_OK,FALSE}, + {0,S_FALSE,FALSE}, + {URL_SCHEME_UNKNOWN,S_OK,FALSE}, + {URLZONE_INVALID,E_NOTIMPL,FALSE} + } + }, + { "mk:@MSITStore:Z:\dir\test.chm::/html/../../images/xxx.jpg", 0, S_OK, FALSE, + { + {"mk:@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {".jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\test.chm::/html/../../images/xxx.jpg",S_OK,FALSE}, + {"mk",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE} + }, + { + {Uri_HOST_UNKNOWN,S_OK,FALSE}, + {0,S_FALSE,FALSE}, + {URL_SCHEME_MK,S_OK,FALSE}, + {URLZONE_INVALID,E_NOTIMPL,FALSE} + } + }, + { "mk:@MSITStore:Z:\dir\dir2\..\test.chm::/html/../../images/xxx.jpg", 0, S_OK, FALSE, + { + {"mk:@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {".jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"@MSITStore:Z:\dir\images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\dir2\..\test.chm::/html/../../images/xxx.jpg",S_OK,FALSE}, + {"mk",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE} + }, + { + {Uri_HOST_UNKNOWN,S_OK,FALSE}, + {0,S_FALSE,FALSE}, + {URL_SCHEME_MK,S_OK,FALSE}, + {URLZONE_INVALID,E_NOTIMPL,FALSE} + } + }, + { "mk:@MSITStore:Z:\dir\test.chm::/html/../../../../images/xxx.jpg", 0, S_OK, FALSE, + { + {"mk:images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {".jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE}, + {"images/xxx.jpg",S_OK,FALSE}, + {"images/xxx.jpg",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"mk:@MSITStore:Z:\dir\test.chm::/html/../../../../images/xxx.jpg",S_OK,FALSE}, + {"mk",S_OK,FALSE}, + {"",S_FALSE,FALSE}, + {"",S_FALSE,FALSE} + }, + { + {Uri_HOST_UNKNOWN,S_OK,FALSE}, + {0,S_FALSE,FALSE}, + {URL_SCHEME_MK,S_OK,FALSE}, + {URLZONE_INVALID,E_NOTIMPL,FALSE} + } } };
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c index 36ae913..e7b3078 100644 --- a/dlls/urlmon/uri.c +++ b/dlls/urlmon/uri.c @@ -3152,6 +3152,12 @@ static BOOL canonicalize_path_opaque(const parse_data *data, Uri *uri, DWORD fla } }
+ if(data->scheme_type == URL_SCHEME_MK && !computeOnly && !(flags & Uri_CREATE_NO_CANONICALIZE)) { + DWORD new_len = remove_dot_segments(uri->canon_uri + uri->path_start, + uri->canon_len - uri->path_start); + uri->canon_len = uri->path_start + new_len; + } + uri->path_len = uri->canon_len - uri->path_start;
TRACE("(%p %p %x %d): Canonicalized opaque URI path %s len=%d\n", data, uri, flags, computeOnly,