Thomas Mullaly : urlmon: Some opaque URIs get their port set.

Alexandre Julliard julliard at winehq.org
Fri Aug 27 11:11:17 CDT 2010


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

Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date:   Tue Aug 24 16:54:54 2010 -0400

urlmon: Some opaque URIs get their port set.

---

 dlls/urlmon/tests/uri.c |   55 +++++++++++++++++++++++++++++++++++++++++++++++
 dlls/urlmon/uri.c       |   18 ++++++++++++--
 2 files changed, 70 insertions(+), 3 deletions(-)

diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 877250d..5ff8ff5 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -3572,6 +3572,61 @@ static const uri_properties uri_tests[] = {
             {URL_SCHEME_FILE,S_OK,FALSE},
             {URLZONE_INVALID,E_NOTIMPL,FALSE}
         }
+    },
+    /* Doesn't have an absolute since it's opaque, but gets it port set. */
+    {   "http:test.com/index.html", 0, S_OK, FALSE,
+        Uri_HAS_DISPLAY_URI|Uri_HAS_EXTENSION|Uri_HAS_PATH|Uri_HAS_PATH_AND_QUERY
+        |Uri_HAS_RAW_URI|Uri_HAS_SCHEME_NAME|Uri_HAS_HOST_TYPE|Uri_HAS_PORT|Uri_HAS_SCHEME, FALSE,
+        {
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE},
+            {"http:test.com/index.html",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {".html",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE},
+            {"test.com/index.html",S_OK,FALSE},
+            {"test.com/index.html",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {"http:test.com/index.html",S_OK,FALSE},
+            {"http",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE}
+        },
+        {
+            {Uri_HOST_UNKNOWN,S_OK,FALSE},
+            {80,S_OK,FALSE},
+            {URL_SCHEME_HTTP,S_OK,FALSE},
+            {URLZONE_INVALID,E_NOTIMPL,FALSE}
+        }
+    },
+    {   "ftp:test.com/index.html", 0, S_OK, FALSE,
+        Uri_HAS_DISPLAY_URI|Uri_HAS_EXTENSION|Uri_HAS_PATH|Uri_HAS_PATH_AND_QUERY
+        |Uri_HAS_RAW_URI|Uri_HAS_SCHEME_NAME|Uri_HAS_HOST_TYPE|Uri_HAS_PORT|Uri_HAS_SCHEME, FALSE,
+        {
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE},
+            {"ftp:test.com/index.html",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {".html",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE},
+            {"test.com/index.html",S_OK,FALSE},
+            {"test.com/index.html",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {"ftp:test.com/index.html",S_OK,FALSE},
+            {"ftp",S_OK,FALSE},
+            {"",S_FALSE,FALSE},
+            {"",S_FALSE,FALSE}
+        },
+        {
+            {Uri_HOST_UNKNOWN,S_OK,FALSE},
+            {21,S_OK,FALSE},
+            {URL_SCHEME_FTP,S_OK,FALSE},
+            {URLZONE_INVALID,E_NOTIMPL,FALSE}
+        }
     }
 };
 
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index ad6d284..49b64c8 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -2841,12 +2841,24 @@ static BOOL canonicalize_hierpart(const parse_data *data, Uri *uri, DWORD flags,
         uri->authority_len = 0;
         uri->domain_offset = -1;
 
-        if(is_hierarchical_scheme(data->scheme_type))
+        if(is_hierarchical_scheme(data->scheme_type)) {
+            DWORD i;
+
             /* Absolute URIs aren't displayed for known scheme types
              * which should be hierarchical URIs.
              */
             uri->display_absolute = FALSE;
 
+            /* Windows also sets the port for these (if they have one). */
+            for(i = 0; i < sizeof(default_ports)/sizeof(default_ports[0]); ++i) {
+                if(data->scheme_type == default_ports[i].scheme) {
+                    uri->has_port = TRUE;
+                    uri->port = default_ports[i].port;
+                    break;
+                }
+            }
+        }
+
         if(!canonicalize_path_opaque(data, uri, flags, computeOnly))
             return FALSE;
     }
@@ -3817,10 +3829,10 @@ static HRESULT WINAPI Uri_GetProperties(IUri *iface, DWORD *pdwProperties)
             *pdwProperties |= Uri_HAS_HOST;
         if(This->domain_offset > -1)
             *pdwProperties |= Uri_HAS_DOMAIN;
-        if(This->has_port)
-            *pdwProperties |= Uri_HAS_PORT;
     }
 
+    if(This->has_port)
+        *pdwProperties |= Uri_HAS_PORT;
     if(This->path_start > -1)
         *pdwProperties |= Uri_HAS_PATH|Uri_HAS_PATH_AND_QUERY;
     if(This->query_start > -1)




More information about the wine-cvs mailing list