diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index 54173f1ff48..27628c32927 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -2736,6 +2736,12 @@ static BOOL receive_response( struct request *request, BOOL async ) BOOL ret; DWORD size, query, status; + if (!request->netconn) + { + SetLastError( ERROR_WINHTTP_INCORRECT_HANDLE_STATE ); + return FALSE; + } + netconn_set_timeout( request->netconn, FALSE, request->receive_response_timeout ); for (;;) { diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c index 4779cfd1a7b..3f9125154f0 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -2086,6 +2086,11 @@ static void test_resolve_timeout(void) ok(GetLastError() == ERROR_WINHTTP_NAME_NOT_RESOLVED, "expected ERROR_WINHTTP_NAME_NOT_RESOLVED got %u\n", GetLastError()); + ret = WinHttpReceiveResponse( req, NULL ); + ok( !ret && (GetLastError() == ERROR_WINHTTP_INCORRECT_HANDLE_STATE || + GetLastError() == ERROR_WINHTTP_OPERATION_CANCELLED /* < win7 */), + "got %u\n", GetLastError() ); + WinHttpCloseHandle(req); WinHttpCloseHandle(con); WinHttpCloseHandle(ses);