winhttp: Don't change the verb if the server response is HTTP_STATUS_REDIRECT_KEEP_VERB.

Hans Leidekker hans at codeweavers.com
Wed Jun 1 04:50:11 CDT 2011


---
 dlls/winhttp/request.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 8a21ab5..c8eca75 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -1544,7 +1544,7 @@ end:
     return TRUE;
 }
 
-static BOOL handle_redirect( request_t *request )
+static BOOL handle_redirect( request_t *request, DWORD status )
 {
     BOOL ret = FALSE;
     DWORD size, len;
@@ -1626,9 +1626,11 @@ static BOOL handle_redirect( request_t *request )
     if ((index = get_header_index( request, attr_content_type, 0, TRUE )) >= 0) delete_header( request, index );
     if ((index = get_header_index( request, attr_content_length, 0, TRUE )) >= 0 ) delete_header( request, index );
 
-    /* redirects are always GET requests */
-    heap_free( request->verb );
-    request->verb = strdupW( getW );
+    if (status != HTTP_STATUS_REDIRECT_KEEP_VERB)
+    {
+        heap_free( request->verb );
+        request->verb = strdupW( getW );
+    }
     ret = TRUE;
 
 end:
@@ -1840,7 +1842,7 @@ static BOOL receive_response( request_t *request, BOOL async )
             if (request->hdr.disable_flags & WINHTTP_DISABLE_REDIRECTS) break;
 
             drain_content( request );
-            if (!(ret = handle_redirect( request ))) break;
+            if (!(ret = handle_redirect( request, status ))) break;
 
             clear_response_headers( request );
             ret = send_request( request, NULL, 0, NULL, 0, 0, 0, FALSE ); /* recurse synchronously */
-- 
1.7.4.1






More information about the wine-patches mailing list