Rob Shearman : wininet: Don'
t close the connection if the caller passes in zero for the number of
bytes to be read .
Alexandre Julliard
julliard at wine.codeweavers.com
Tue May 29 08:05:47 CDT 2007
Module: wine
Branch: master
Commit: 76507d475b59c4efb533dd05d1ab095f834faaba
URL: http://source.winehq.org/git/wine.git/?a=commit;h=76507d475b59c4efb533dd05d1ab095f834faaba
Author: Rob Shearman <rob at codeweavers.com>
Date: Mon May 28 11:13:36 2007 +0100
wininet: Don't close the connection if the caller passes in zero for the number of bytes to be read.
Only close the connection when the bytes read equals the content length.
Fixup HTTP_DrainContent, which relied on the previous incorrect
behaviour to instead close connections with no content length manually.
---
dlls/wininet/http.c | 6 ++++++
dlls/wininet/internet.c | 2 +-
dlls/wininet/tests/http.c | 1 +
3 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index c410f92..a48d7ae 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -738,6 +738,12 @@ BOOL WINAPI HttpAddRequestHeadersA(HINTERNET hHttpRequest,
static void HTTP_DrainContent(LPWININETHTTPREQW lpwhr)
{
DWORD bytes_read;
+
+ if (!NETCON_connected(&lpwhr->netConnection)) return;
+
+ if (lpwhr->dwContentLength == -1)
+ NETCON_close(&lpwhr->netConnection);
+
do
{
char buffer[2048];
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 06611c8..4d48089 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -1724,7 +1724,7 @@ BOOL INTERNET_ReadFile(LPWININETHANDLEHEADER lpwh, LPVOID lpBuffer,
{
lpwhr->dwContentRead += bytes_read;
*pdwNumOfBytesRead = bytes_read;
- if (!bytes_read)
+ if (!bytes_read && (lpwhr->dwContentRead == lpwhr->dwContentLength))
retval = HTTP_FinishedReading(lpwhr);
else
retval = TRUE;
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index 8926968..3cf5841 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -444,6 +444,7 @@ static void InternetReadFileExA_test(int flags)
length += inetbuffers.dwBufferLength;
}
+ ok(length > 0, "failed to read any of the document\n");
trace("Finished. Read %d bytes\n", length);
abort:
More information about the wine-cvs
mailing list