urlmon: Restructured how the path component is validated in a IUriBuilder.
This commit is contained in:
parent
d8263344ef
commit
e1280919b8
|
@ -3734,8 +3734,11 @@ static void setup_port(const UriBuilder *builder, parse_data *data, DWORD flags)
|
||||||
|
|
||||||
static HRESULT validate_path(const UriBuilder *builder, parse_data *data, DWORD flags) {
|
static HRESULT validate_path(const UriBuilder *builder, parse_data *data, DWORD flags) {
|
||||||
const WCHAR *ptr = NULL;
|
const WCHAR *ptr = NULL;
|
||||||
|
const WCHAR *component;
|
||||||
const WCHAR **pptr;
|
const WCHAR **pptr;
|
||||||
DWORD expected_len;
|
DWORD expected_len;
|
||||||
|
BOOL check_len = TRUE;
|
||||||
|
BOOL valid = FALSE;
|
||||||
|
|
||||||
if(builder->path) {
|
if(builder->path) {
|
||||||
ptr = builder->path;
|
ptr = builder->path;
|
||||||
|
@ -3744,29 +3747,30 @@ static HRESULT validate_path(const UriBuilder *builder, parse_data *data, DWORD
|
||||||
builder->uri && builder->uri->path_start > -1) {
|
builder->uri && builder->uri->path_start > -1) {
|
||||||
ptr = builder->uri->canon_uri+builder->uri->path_start;
|
ptr = builder->uri->canon_uri+builder->uri->path_start;
|
||||||
expected_len = builder->uri->path_len;
|
expected_len = builder->uri->path_len;
|
||||||
|
} else {
|
||||||
|
static const WCHAR nullW[] = {0};
|
||||||
|
ptr = nullW;
|
||||||
|
check_len = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ptr) {
|
component = ptr;
|
||||||
BOOL valid = FALSE;
|
pptr = &ptr;
|
||||||
const WCHAR *component = ptr;
|
|
||||||
pptr = &ptr;
|
|
||||||
|
|
||||||
/* How the path is validated depends on what type of
|
/* How the path is validated depends on what type of
|
||||||
* URI it is.
|
* URI it is.
|
||||||
*/
|
*/
|
||||||
valid = data->is_opaque ?
|
valid = data->is_opaque ?
|
||||||
parse_path_opaque(pptr, data, flags) : parse_path_hierarchical(pptr, data, flags);
|
parse_path_opaque(pptr, data, flags) : parse_path_hierarchical(pptr, data, flags);
|
||||||
|
|
||||||
if(!valid || expected_len != data->path_len) {
|
if(!valid || (check_len && expected_len != data->path_len)) {
|
||||||
TRACE("(%p %p %x): Invalid path componet %s.\n", builder, data, flags,
|
TRACE("(%p %p %x): Invalid path componet %s.\n", builder, data, flags,
|
||||||
debugstr_wn(component, expected_len));
|
debugstr_wn(component, expected_len));
|
||||||
return INET_E_INVALID_URL;
|
return INET_E_INVALID_URL;
|
||||||
}
|
|
||||||
|
|
||||||
TRACE("(%p %p %x): Valid path component %s len=%d.\n", builder, data, flags,
|
|
||||||
debugstr_wn(data->path, data->path_len), data->path_len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRACE("(%p %p %x): Valid path component %s len=%d.\n", builder, data, flags,
|
||||||
|
debugstr_wn(data->path, data->path_len), data->path_len);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue