[PATCH] secur32: Set error flag on pull callback.
Fixes a regression introduced in b8aaf86b2dbb8ecb3f7094cc40a0df89bb2add27 The poll function currently always returns 0 which signals to gnutls that no data is available. We should return -1 and set the the transport error to try again. Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=51440 Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> --- dlls/secur32/schannel_gnutls.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dlls/secur32/schannel_gnutls.c b/dlls/secur32/schannel_gnutls.c index bcf38e3f23f..3ed0fbea16e 100644 --- a/dlls/secur32/schannel_gnutls.c +++ b/dlls/secur32/schannel_gnutls.c @@ -292,7 +292,12 @@ static DWORD CDECL schan_get_enabled_protocols(void) static int pull_timeout(gnutls_transport_ptr_t transport, unsigned int timeout) { - return 0; + struct schan_transport *t = (struct schan_transport*)transport; + gnutls_session_t s = (gnutls_session_t)callbacks->get_session_for_transport(t); + + TRACE("\n"); + pgnutls_transport_set_errno(s, EAGAIN); + return -1; } static BOOL CDECL schan_create_session(schan_session *session, schan_credentials *cred) -- 2.30.2
On Fri, 2021-07-16 at 15:36 +1000, Alistair Leslie-Hughes wrote:
diff --git a/dlls/secur32/schannel_gnutls.c b/dlls/secur32/schannel_gnutls.c index bcf38e3f23f..3ed0fbea16e 100644 --- a/dlls/secur32/schannel_gnutls.c +++ b/dlls/secur32/schannel_gnutls.c @@ -292,7 +292,12 @@ static DWORD CDECL schan_get_enabled_protocols(void)
static int pull_timeout(gnutls_transport_ptr_t transport, unsigned int timeout) { - return 0; + struct schan_transport *t = (struct schan_transport*)transport; + gnutls_session_t s = (gnutls_session_t)callbacks->get_session_for_transport(t); + + TRACE("\n"); + pgnutls_transport_set_errno(s, EAGAIN); + return -1; }
I think we should call the get_buffer() callback here (so basically revert pull_timeout() to what it was before the regression commit) and set the transport errno when it fails.
participants (2)
-
Alistair Leslie-Hughes -
Hans Leidekker