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

Alexandre Julliard julliard at winehq.org
Mon Oct 4 11:03:59 CDT 2010


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

Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date:   Thu Sep 30 22:40:44 2010 -0400

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

---

 dlls/urlmon/uri.c |   38 +++++++++++++++++++++-----------------
 1 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index 7aa62ca..04482e1 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -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) {
     const WCHAR *ptr = NULL;
+    const WCHAR *component;
     const WCHAR **pptr;
     DWORD expected_len;
+    BOOL check_len = TRUE;
+    BOOL valid = FALSE;
 
     if(builder->path) {
         ptr = builder->path;
@@ -3744,29 +3747,30 @@ static HRESULT validate_path(const UriBuilder *builder, parse_data *data, DWORD
               builder->uri && builder->uri->path_start > -1) {
         ptr = builder->uri->canon_uri+builder->uri->path_start;
         expected_len = builder->uri->path_len;
+    } else {
+        static const WCHAR nullW[] = {0};
+        ptr = nullW;
+        check_len = FALSE;
     }
 
-    if(ptr) {
-        BOOL valid = FALSE;
-        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);
+    component = ptr;
+    pptr = &ptr;
 
-        if(!valid || expected_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;
-        }
+    /* 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);
 
-        TRACE("(%p %p %x): Valid path component %s len=%d.\n", builder, data, flags,
-            debugstr_wn(data->path, data->path_len), data->path_len);
+    if(!valid || (check_len && expected_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;
 }
 




More information about the wine-cvs mailing list