[3/3] wininet: Avoid a crash on NULL lpcszHeader in HttpSendRequestExW.

Hans Leidekker hans at codeweavers.com
Tue Nov 17 08:59:52 CST 2009


Fixes http://bugs.winehq.org/show_bug.cgi?id=20733
---
 dlls/wininet/http.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 1426439..3603761 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -3338,17 +3338,21 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest,
         req = &workRequest.u.HttpSendRequestW;
         if (lpBuffersIn)
         {
-            DWORD size;
+            DWORD size = 0;
 
-            if (lpBuffersIn->dwHeadersLength == ~0u)
-                size = (strlenW( lpBuffersIn->lpcszHeader ) + 1) * sizeof(WCHAR);
-            else
-                size = lpBuffersIn->dwHeadersLength * sizeof(WCHAR);
+            if (lpBuffersIn->lpcszHeader)
+            {
+                if (lpBuffersIn->dwHeadersLength == ~0u)
+                    size = (strlenW( lpBuffersIn->lpcszHeader ) + 1) * sizeof(WCHAR);
+                else
+                    size = lpBuffersIn->dwHeadersLength * sizeof(WCHAR);
 
-            req->lpszHeader = HeapAlloc( GetProcessHeap(), 0, size );
-            memcpy( req->lpszHeader, lpBuffersIn->lpcszHeader, size );
+                req->lpszHeader = HeapAlloc( GetProcessHeap(), 0, size );
+                memcpy( req->lpszHeader, lpBuffersIn->lpcszHeader, size );
+            }
+            else req->lpszHeader = NULL;
 
-            req->dwHeaderLength = lpBuffersIn->dwHeadersLength;
+            req->dwHeaderLength = size / sizeof(WCHAR);
             req->lpOptional = lpBuffersIn->lpvBuffer;
             req->dwOptionalLength = lpBuffersIn->dwBufferLength;
             req->dwContentLength = lpBuffersIn->dwBufferTotal;
-- 
1.6.3.3





More information about the wine-patches mailing list