From 20c9b6894790ef5f9b763e429dbd8f51c2e091e2 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 8 Jan 2025 19:17:42 +0100 Subject: ssl: Explictly return -1 (error) or 0 (server closed connection) SSL_read() and SSL_write may return 0 for errors, whereas our callers only expect -1 for errors and 0 for closed connections, so map this accordingly. --- methods/connect.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/methods/connect.cc b/methods/connect.cc index c685ac031..eeee7c509 100644 --- a/methods/connect.cc +++ b/methods/connect.cc @@ -842,22 +842,26 @@ struct TlsFd final : public MethodFd case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: errno = EAGAIN; - break; + return -1; case SSL_ERROR_ZERO_RETURN: // Remote host has closed connection errno = 0; - break; + return 0; case SSL_ERROR_SYSCALL: broken = true; _error->Errno("openssl", "OpenSSL system call error: %s\n", ssl_strerr()); - break; + return -1; case SSL_ERROR_SSL: broken = true; errno = EIO; _error->Error("OpenSSL error: %s\n", ssl_strerr()); - break; + return -1; + default: + broken = true; + errno = EIO; + _error->Error("Unexpected OpenSSL error: %s\n", ssl_strerr()); + return -1; } - return r; } int Close() override -- cgit v1.2.3-70-g09d2