Module: wine Branch: master Commit: d5dca63cb6f820cfd39c2a153e6d48b815e950e0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d5dca63cb6f820cfd39c2a153e...
Author: Hans Leidekker hans@codeweavers.com Date: Fri Oct 17 13:46:25 2008 +0200
wininet: Don't destroy authentication data when closing the connection.
Fixes basic authentication in combination with connection close semantics. Spotted by Vincent Povirk.
---
dlls/wininet/http.c | 51 ++++++++++++++++++++++++++------------------------- 1 files changed, 26 insertions(+), 25 deletions(-)
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);