diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index c410f923423f5b893b2c5efabe840f86f11ae89d..a48d7ae0a1afb08bdc22b24552dae9c4848bf021 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 06611c8405f3b88f84fccd42723c8160b843e601..4d48089bf4e59e70843118a6c909fc801cd1ab32 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 892696886abce58db0c2c801acb9b05a8b8416af..3cf58415958b314507415646095a21ae5b4165b4 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: