From 8da177c0bfb9e223aaa8e5e698a568e5f42a0e82 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Fri, 27 Mar 2020 10:34:25 +1100 Subject: [PATCH] dtls/connection: fix EOF handling with openssl 1.1.1e openssl 1.1.1e does some stricker EOF handling and will throw an error if the EOF is unexpected (like in the middle of a record). As we are streaming data into openssl here, it is entirely possible that we push data from multiple buffers/packets into openssl separately. From the openssl changelog: Changes between 1.1.1d and 1.1.1e [17 Mar 2020] *) Properly detect EOF while reading in libssl. Previously if we hit an EOF while reading in libssl then we would report an error back to the application (SSL_ERROR_SYSCALL) but errno would be 0. We now add an error to the stack (which means we instead return SSL_ERROR_SSL) and therefore give a hint as to what went wrong. [Matt Caswell] We can relax the EOF signalling to only return TRUE when we have stopped for any reason (EOS, error). Will also remove a spurious EOF error from previous openssl version. --- ext/dtls/gstdtlsconnection.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/dtls/gstdtlsconnection.c b/ext/dtls/gstdtlsconnection.c index e287030845..b9ea1efc76 100644 --- a/ext/dtls/gstdtlsconnection.c +++ b/ext/dtls/gstdtlsconnection.c @@ -1251,7 +1251,7 @@ bio_method_ctrl (BIO * bio, int cmd, long arg1, void *arg2) GST_LOG_OBJECT (self, "BIO: EOF reset"); return 1; case BIO_CTRL_EOF:{ - gint eof = !(priv->bio_buffer_len - priv->bio_buffer_offset); + gint eof = priv->is_alive == FALSE; GST_LOG_OBJECT (self, "BIO: EOF query returned %d", eof); return eof; }