Thomas Mullaly : urlmon: File URIs can' t have a userinfo component when creating an IUri using IUriBuilder.

Alexandre Julliard julliard at winehq.org
Mon Sep 20 12:12:19 CDT 2010


Module: wine
Branch: master
Commit: e767cc813dcb3ade73575105d5ee3b2c5d7028d2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e767cc813dcb3ade73575105d5ee3b2c5d7028d2

Author: Thomas Mullaly <thomas.mullaly at 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;
 }
 




More information about the wine-cvs mailing list