From 2a45fa900b5916e9b789b1a4052ffd7c724f4166 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Wed, 20 Apr 2016 19:03:59 +0200 Subject: [PATCH] MDEV-9836 Connection lost when using SSL Don't read from socket in yassl in SSL_pending(). Just return size of the buffered processed data. This is what OpenSSL is documented to do too: SSL_pending() returns the number of bytes which have been processed, buffered and are available inside ssl for immediate read. --- extra/yassl/src/ssl.cpp | 4 ---- mysql-test/r/ssl_timeout-9836.result | 7 +++++++ mysql-test/t/ssl_timeout-9836.opt | 1 + mysql-test/t/ssl_timeout-9836.test | 11 +++++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 mysql-test/r/ssl_timeout-9836.result create mode 100644 mysql-test/t/ssl_timeout-9836.opt create mode 100644 mysql-test/t/ssl_timeout-9836.test diff --git a/extra/yassl/src/ssl.cpp b/extra/yassl/src/ssl.cpp index 9516e8b985e..23465335922 100644 --- a/extra/yassl/src/ssl.cpp +++ b/extra/yassl/src/ssl.cpp @@ -1471,10 +1471,6 @@ int SSL_peek(SSL* ssl, void* buffer, int sz) int SSL_pending(SSL* ssl) { - // Just in case there's pending data that hasn't been processed yet... - char c; - SSL_peek(ssl, &c, 1); - return ssl->bufferedData(); } diff --git a/mysql-test/r/ssl_timeout-9836.result b/mysql-test/r/ssl_timeout-9836.result new file mode 100644 index 00000000000..bc2e19e1475 --- /dev/null +++ b/mysql-test/r/ssl_timeout-9836.result @@ -0,0 +1,7 @@ +SET @@net_read_timeout=1; +SELECT 1; +1 +1 +SELECT 1; +1 +1 diff --git a/mysql-test/t/ssl_timeout-9836.opt b/mysql-test/t/ssl_timeout-9836.opt new file mode 100644 index 00000000000..7a2696875b8 --- /dev/null +++ b/mysql-test/t/ssl_timeout-9836.opt @@ -0,0 +1 @@ +--loose-thread-handling=pool-of-threads diff --git a/mysql-test/t/ssl_timeout-9836.test b/mysql-test/t/ssl_timeout-9836.test new file mode 100644 index 00000000000..5b57917f3b8 --- /dev/null +++ b/mysql-test/t/ssl_timeout-9836.test @@ -0,0 +1,11 @@ +# +# MDEV-9836 Connection lost when using SSL +# +-- source include/have_ssl_communication.inc +connect(con1,localhost,root,,,,,SSL); +SET @@net_read_timeout=1; +SELECT 1; +# MDEV-9836 - YASSL bug - SSL connection lost if it has been idle, for longer than net_read_timeout +-- sleep 2 +SELECT 1; +disconnect con1;