Jacek Caban : urlmon: Don' t set is_opaque for file URIs in validate_components.

Alexandre Julliard julliard at winehq.org
Wed Nov 16 12:46:46 CST 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Nov 16 12:51:23 2011 +0100

urlmon: Don't set is_opaque for file URIs in validate_components.

---

 dlls/urlmon/tests/uri.c |   64 +++++++++++++++++++++++++++++++++++++++++++++++
 dlls/urlmon/uri.c       |    3 +-
 2 files changed, 66 insertions(+), 1 deletions(-)

diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 478a5f0..c8fb522 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -5525,6 +5525,70 @@ 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:///c:/dir/file.html",0,S_OK,FALSE,
+        {
+            {TRUE,NULL,NULL,Uri_PROPERTY_FRAGMENT,S_OK},
+        },
+        {FALSE},
+        0,S_OK,FALSE,
+        0,S_OK,FALSE,
+        0,0,0,S_OK,FALSE,
+        {
+            {"file:///c:/dir/file.html",S_OK},
+            {"",S_FALSE},
+            {"file:///c:/dir/file.html",S_OK},
+            {"",S_FALSE},
+            {".html",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"/c:/dir/file.html",S_OK},
+            {"/c:/dir/file.html",S_OK},
+            {"",S_FALSE},
+            {"file:///c:/dir/file.html",S_OK},
+            {"file",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE}
+        },
+        {
+            {Uri_HOST_UNKNOWN,S_OK},
+            {0,S_FALSE},
+            {URL_SCHEME_FILE,S_OK},
+            {URLZONE_INVALID,E_NOTIMPL}
+        }
+    },
+    {   "file:///c:/dir/file.html",0,S_OK,FALSE,
+        {
+            {TRUE,"#",NULL,Uri_PROPERTY_FRAGMENT,S_OK},
+        },
+        {FALSE},
+        0,S_OK,FALSE,
+        0,S_OK,FALSE,
+        0,0,0,S_OK,FALSE,
+        {
+            {"file:///c:/dir/file.html#",S_OK},
+            {"",S_FALSE},
+            {"file:///c:/dir/file.html#",S_OK},
+            {"",S_FALSE},
+            {".html",S_OK},
+            {"#",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE},
+            {"/c:/dir/file.html",S_OK},
+            {"/c:/dir/file.html",S_OK},
+            {"",S_FALSE},
+            {"file:///c:/dir/file.html#",S_OK},
+            {"file",S_OK},
+            {"",S_FALSE},
+            {"",S_FALSE}
+        },
+        {
+            {Uri_HOST_UNKNOWN,S_OK},
+            {0,S_FALSE},
+            {URL_SCHEME_FILE,S_OK},
+            {URLZONE_INVALID,E_NOTIMPL}
+        }
     }
 };
 
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index 8f0e7e7..a36f730 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -3941,7 +3941,8 @@ static HRESULT validate_components(const UriBuilder *builder, parse_data *data,
 
     /* The URI is opaque if it doesn't have an authority component. */
     if(!data->is_relative)
-        data->is_opaque = !data->username && !data->password && !data->host && !data->has_port;
+        data->is_opaque = !data->username && !data->password && !data->host && !data->has_port
+            && data->scheme_type != URL_SCHEME_FILE;
     else
         data->is_opaque = !data->host && !data->has_port;
 




More information about the wine-cvs mailing list