André Hentschel : wininet: Don' t return a relative path when building the proxy url request.

Alexandre Julliard julliard at winehq.org
Wed Aug 24 14:05:18 CDT 2011


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

Author: André Hentschel <nerv at dawncrow.de>
Date:   Mon Aug 22 21:31:14 2011 +0200

wininet: Don't return a relative path when building the proxy url request.

---

 dlls/wininet/http.c |   37 +++++++++++++++++++++----------------
 1 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 7934c43..772aba6 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -1648,34 +1648,39 @@ static BOOL HTTP_InsertAuthorization( http_request_t *request, struct HttpAuthIn
 
 static WCHAR *HTTP_BuildProxyRequestUrl(http_request_t *req)
 {
+    static const WCHAR slash[] = { '/',0 };
+    static const WCHAR format[] = { 'h','t','t','p',':','/','/','%','s',':','%','u',0 };
+    static const WCHAR formatSSL[] = { 'h','t','t','p','s',':','/','/','%','s',':','%','u',0 };
+    http_session_t *session = req->session;
     WCHAR new_location[INTERNET_MAX_URL_LENGTH], *url;
     DWORD size;
 
     size = sizeof(new_location);
     if (HTTP_HttpQueryInfoW(req, HTTP_QUERY_LOCATION, new_location, &size, NULL) == ERROR_SUCCESS)
     {
+        URL_COMPONENTSW UrlComponents;
+
         if (!(url = heap_alloc(size + sizeof(WCHAR)))) return NULL;
         strcpyW( url, new_location );
+
+        ZeroMemory(&UrlComponents,sizeof(URL_COMPONENTSW));
+        if(InternetCrackUrlW(url, 0, 0, &UrlComponents)) goto done;
+        heap_free(url);
     }
-    else
-    {
-        static const WCHAR slash[] = { '/',0 };
-        static const WCHAR format[] = { 'h','t','t','p',':','/','/','%','s',':','%','u',0 };
-        static const WCHAR formatSSL[] = { 'h','t','t','p','s',':','/','/','%','s',':','%','u',0 };
-        http_session_t *session = req->session;
 
-        size = 16; /* "https://" + sizeof(port#) + ":/\0" */
-        size += strlenW( session->hostName ) + strlenW( req->path );
+    size = 16; /* "https://" + sizeof(port#) + ":/\0" */
+    size += strlenW( session->hostName ) + strlenW( req->path );
 
-        if (!(url = heap_alloc(size * sizeof(WCHAR)))) return NULL;
+    if (!(url = heap_alloc(size * sizeof(WCHAR)))) return NULL;
 
-        if (req->hdr.dwFlags & INTERNET_FLAG_SECURE)
-            sprintfW( url, formatSSL, session->hostName, session->hostPort );
-        else
-            sprintfW( url, format, session->hostName, session->hostPort );
-        if (req->path[0] != '/') strcatW( url, slash );
-        strcatW( url, req->path );
-    }
+    if (req->hdr.dwFlags & INTERNET_FLAG_SECURE)
+        sprintfW( url, formatSSL, session->hostName, session->hostPort );
+    else
+        sprintfW( url, format, session->hostName, session->hostPort );
+    if (req->path[0] != '/') strcatW( url, slash );
+    strcatW( url, req->path );
+
+done:
     TRACE("url=%s\n", debugstr_w(url));
     return url;
 }




More information about the wine-cvs mailing list