[1/2] wininet: Don't destroy authentication data when closing the connection.
Hans Leidekker
hans at codeweavers.com
Fri Oct 17 06:46:25 CDT 2008
Fixes basic authentication in combination with connection close semantics.
Spotted by Vincent Povirk.
-Hans
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 0cdbfb3..8729df3 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -1380,31 +1380,6 @@ static void HTTPREQ_Destroy(WININETHANDLEHEADER *hdr)
WININET_Release(&lpwhr->lpHttpSession->hdr);
- HeapFree(GetProcessHeap(), 0, lpwhr->lpszPath);
- HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb);
- HeapFree(GetProcessHeap(), 0, lpwhr->lpszRawHeaders);
- HeapFree(GetProcessHeap(), 0, lpwhr->lpszVersion);
- HeapFree(GetProcessHeap(), 0, lpwhr->lpszStatusText);
-
- for (i = 0; i < lpwhr->nCustHeaders; i++)
- {
- HeapFree(GetProcessHeap(), 0, lpwhr->pCustHeaders[i].lpszField);
- HeapFree(GetProcessHeap(), 0, lpwhr->pCustHeaders[i].lpszValue);
- }
-
- HeapFree(GetProcessHeap(), 0, lpwhr->pCustHeaders);
- HeapFree(GetProcessHeap(), 0, lpwhr);
-}
-
-static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr)
-{
- LPWININETHTTPREQW lpwhr = (LPWININETHTTPREQW) hdr;
-
- TRACE("%p\n",lpwhr);
-
- if (!NETCON_connected(&lpwhr->netConnection))
- return;
-
if (lpwhr->pAuthInfo)
{
if (SecIsValidHandle(&lpwhr->pAuthInfo->ctx))
@@ -1417,6 +1392,7 @@ static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr)
HeapFree(GetProcessHeap(), 0, lpwhr->pAuthInfo);
lpwhr->pAuthInfo = NULL;
}
+
if (lpwhr->pProxyAuthInfo)
{
if (SecIsValidHandle(&lpwhr->pProxyAuthInfo->ctx))
@@ -1430,6 +1406,31 @@ static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr)
lpwhr->pProxyAuthInfo = NULL;
}
+ HeapFree(GetProcessHeap(), 0, lpwhr->lpszPath);
+ HeapFree(GetProcessHeap(), 0, lpwhr->lpszVerb);
+ HeapFree(GetProcessHeap(), 0, lpwhr->lpszRawHeaders);
+ HeapFree(GetProcessHeap(), 0, lpwhr->lpszVersion);
+ HeapFree(GetProcessHeap(), 0, lpwhr->lpszStatusText);
+
+ for (i = 0; i < lpwhr->nCustHeaders; i++)
+ {
+ HeapFree(GetProcessHeap(), 0, lpwhr->pCustHeaders[i].lpszField);
+ HeapFree(GetProcessHeap(), 0, lpwhr->pCustHeaders[i].lpszValue);
+ }
+
+ HeapFree(GetProcessHeap(), 0, lpwhr->pCustHeaders);
+ HeapFree(GetProcessHeap(), 0, lpwhr);
+}
+
+static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr)
+{
+ LPWININETHTTPREQW lpwhr = (LPWININETHTTPREQW) hdr;
+
+ TRACE("%p\n",lpwhr);
+
+ if (!NETCON_connected(&lpwhr->netConnection))
+ return;
+
INTERNET_SendCallback(&lpwhr->hdr, lpwhr->hdr.dwContext,
INTERNET_STATUS_CLOSING_CONNECTION, 0, 0);
More information about the wine-patches
mailing list