Module: wine Branch: master Commit: e767cc813dcb3ade73575105d5ee3b2c5d7028d2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e767cc813dcb3ade73575105d5...
Author: Thomas Mullaly thomas.mullaly@gmail.com Date: Sat Sep 18 16:57:29 2010 -0400
urlmon: File URIs can't have a userinfo component when creating an IUri using IUriBuilder.
---
dlls/urlmon/tests/uri.c | 20 ++++++++++++++++++++ dlls/urlmon/uri.c | 10 ++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c index 6830832..617486f 100644 --- a/dlls/urlmon/tests/uri.c +++ b/dlls/urlmon/tests/uri.c @@ -5104,6 +5104,26 @@ static const uri_builder_test uri_builder_tests[] = { 0,INET_E_INVALID_URL,FALSE, 0,INET_E_INVALID_URL,FALSE, 0,0,0,INET_E_INVALID_URL,FALSE + }, + /* File scheme's can't have a username set. */ + { "file://google.com/",0,S_OK,FALSE, + { + {TRUE,"username",NULL,Uri_PROPERTY_USER_NAME,S_OK,FALSE} + }, + {FALSE}, + 0,INET_E_INVALID_URL,FALSE, + 0,INET_E_INVALID_URL,FALSE, + 0,0,0,INET_E_INVALID_URL,FALSE + }, + /* File schemes can't have a password set. */ + { "file://google.com/",0,S_OK,FALSE, + { + {TRUE,"password",NULL,Uri_PROPERTY_PASSWORD,S_OK,FALSE} + }, + {FALSE}, + 0,INET_E_INVALID_URL,FALSE, + 0,INET_E_INVALID_URL,FALSE, + 0,0,0,INET_E_INVALID_URL,FALSE } };
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c index bab021b..335017c 100644 --- a/dlls/urlmon/uri.c +++ b/dlls/urlmon/uri.c @@ -3452,6 +3452,16 @@ static HRESULT validate_components(const UriBuilder *builder, parse_data *data, if(FAILED(hr)) return hr;
+ /* Extra validation for file schemes. */ + if(data->scheme_type == URL_SCHEME_FILE) { + if((builder->password || (builder->uri && builder->uri->userinfo_split > -1)) || + (builder->username || (builder->uri && builder->uri->userinfo_start > -1))) { + TRACE("(%p %p %x): File schemes can't contain a username or password.\n", + builder, data, flags); + return INET_E_INVALID_URL; + } + } + return E_NOTIMPL; }