Commit e1280919 authored by Thomas Mullaly's avatar Thomas Mullaly Committed by Alexandre Julliard

urlmon: Restructured how the path component is validated in a IUriBuilder.

parent d8263344
...@@ -3734,8 +3734,11 @@ static void setup_port(const UriBuilder *builder, parse_data *data, DWORD flags) ...@@ -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 ...@@ -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
* URI it is.
*/
valid = data->is_opaque ?
parse_path_opaque(pptr, data, flags) : parse_path_hierarchical(pptr, data, flags);
if(!valid || expected_len != data->path_len) { /* How the path is validated depends on what type of
TRACE("(%p %p %x): Invalid path componet %s.\n", builder, data, flags, * URI it is.
debugstr_wn(component, expected_len)); */
return INET_E_INVALID_URL; valid = data->is_opaque ?
} parse_path_opaque(pptr, data, flags) : parse_path_hierarchical(pptr, data, flags);
TRACE("(%p %p %x): Valid path component %s len=%d.\n", builder, data, flags, if(!valid || (check_len && expected_len != data->path_len)) {
debugstr_wn(data->path, data->path_len), data->path_len); TRACE("(%p %p %x): Invalid path componet %s.\n", builder, data, flags,
debugstr_wn(component, expected_len));
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);
return S_OK; return S_OK;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment