[PATCH] winhttp: Handle headers with '\r' line breaks.

Haoyang Chen chenhaoyang at uniontech.com
Thu Jul 29 02:57:17 CDT 2021


Signed-off-by: Haoyang Chen <chenhaoyang at uniontech.com>
---
 dlls/winhttp/request.c       |  7 +++++--
 dlls/winhttp/tests/winhttp.c | 11 ++++++++++-
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 946168786ae..a6c16d7b653 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -378,14 +378,17 @@ DWORD add_request_headers( struct request *request, const WCHAR *headers, DWORD
                 q[0] = '\r';
                 q[1] = '\n';
             }
-            if (q[0] == '\r' && q[1] == '\n') break;
+            if (q[0] == '\r') break;
             q++;
         }
         if (!*p) break;
         if (*q == '\r')
         {
             *q = 0;
-            q += 2; /* jump over \r\n */
+            if (q[1] == '\n')
+                q += 2; /* jump over \r\n */
+            else
+                q++; /* jump over \r */
         }
         if ((header = parse_header( p )))
         {
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
index 56f35252615..60204f6536f 100644
--- a/dlls/winhttp/tests/winhttp.c
+++ b/dlls/winhttp/tests/winhttp.c
@@ -3480,7 +3480,7 @@ static void test_bad_header( int port )
     req = WinHttpOpenRequest( con, NULL, NULL, NULL, NULL, NULL, 0 );
     ok( req != NULL, "failed to open a request %u\n", GetLastError() );
 
-    ret = WinHttpAddRequestHeaders( req, L"Content-Type: text/html\n\r", ~0u, WINHTTP_ADDREQ_FLAG_ADD );
+    ret = WinHttpAddRequestHeaders( req, L"Content-Type: text/html\n\rContent-Length:6\rCookie:111", ~0u, WINHTTP_ADDREQ_FLAG_ADD );
     ok( ret, "failed to add header %u\n", GetLastError() );
 
     index = 0;
@@ -3492,6 +3492,15 @@ static void test_bad_header( int port )
     ok( !lstrcmpW( buffer, L"text/html" ), "got %s\n", wine_dbgstr_w(buffer) );
     ok( index == 1, "index = %u\n", index );
 
+    index = 0;
+    buffer[0] = 0;
+    len = sizeof(buffer);
+    ret = WinHttpQueryHeaders( req, WINHTTP_QUERY_CUSTOM|WINHTTP_QUERY_FLAG_REQUEST_HEADERS,
+                               L"Cookie", buffer, &len, &index );
+    ok( ret, "failed to query headers %u\n", GetLastError() );
+    ok( !lstrcmpW( buffer, L"111" ), "got %s\n", wine_dbgstr_w(buffer) );
+    ok( index == 1, "index = %u\n", index );
+
     WinHttpCloseHandle( req );
     WinHttpCloseHandle( con );
     WinHttpCloseHandle( ses );
-- 
2.20.1






More information about the wine-devel mailing list