Module: wine Branch: master Commit: 9c1bc32fe9515071f1a7501d2fed31b514f704ed URL: https://gitlab.winehq.org/wine/wine/-/commit/9c1bc32fe9515071f1a7501d2fed31b...
Author: Paul Gofman pgofman@codeweavers.com Date: Tue Feb 20 16:03:44 2024 -0600
winhttp: Mind read size when skipping async read in WinHttpReadData().
---
dlls/winhttp/request.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index 4a64095797a..9fe8e1c4782 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -3062,9 +3062,11 @@ static DWORD query_data_ready( struct request *request ) return count; }
-static BOOL skip_async_queue( struct request *request, BOOL *wont_block ) +static BOOL skip_async_queue( struct request *request, BOOL *wont_block, DWORD to_read ) { - *wont_block = end_of_read_data( request ) || query_data_ready( request ); + if (!request->read_chunked) + to_read = min( to_read, request->content_length - request->content_read ); + *wont_block = end_of_read_data( request ) || query_data_ready( request ) >= to_read; return request->hdr.recursion_count < 3 && *wont_block; }
@@ -3133,7 +3135,7 @@ BOOL WINAPI WinHttpQueryDataAvailable( HINTERNET hrequest, LPDWORD available ) return FALSE; }
- if (!(async = request->connect->hdr.flags & WINHTTP_FLAG_ASYNC) || skip_async_queue( request, &wont_block )) + if (!(async = request->connect->hdr.flags & WINHTTP_FLAG_ASYNC) || skip_async_queue( request, &wont_block, 1 )) { ret = query_data_available( request, available, async ); } @@ -3229,7 +3231,7 @@ BOOL WINAPI WinHttpReadData( HINTERNET hrequest, void *buffer, DWORD to_read, DW return FALSE; }
- if (!(async = request->connect->hdr.flags & WINHTTP_FLAG_ASYNC) || skip_async_queue( request, &wont_block )) + if (!(async = request->connect->hdr.flags & WINHTTP_FLAG_ASYNC) || skip_async_queue( request, &wont_block, to_read )) { ret = read_data( request, buffer, to_read, read, async ); }