urlmon: Call remove_dot_segments on path opaque for mk: protocol.

This commit is contained in:
Jacek Caban 2011-01-21 16:11:58 +01:00 committed by Alexandre Julliard
parent 3c6c6e9d94
commit 4454770cbc
2 changed files with 156 additions and 0 deletions

View File

@ -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}
}
}
};

View File

@ -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,