Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6877111

Browse files
authored
bpo-29781: Fix SSLObject.version before handshake (#3364)
SSLObject.version() now correctly returns None when handshake over BIO has not been performed yet. Signed-off-by: Christian Heimes <[email protected]>
1 parent 3463ee3 commit 6877111

3 files changed

Lines changed: 8 additions & 0 deletions

File tree

Lib/test/test_ssl.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1746,13 +1746,15 @@ def test_bio_handshake(self):
17461746
sslobj = ctx.wrap_bio(incoming, outgoing, False, 'localhost')
17471747
self.assertIs(sslobj._sslobj.owner, sslobj)
17481748
self.assertIsNone(sslobj.cipher())
1749+
self.assertIsNone(sslobj.version())
17491750
self.assertIsNotNone(sslobj.shared_ciphers())
17501751
self.assertRaises(ValueError, sslobj.getpeercert)
17511752
if 'tls-unique' in ssl.CHANNEL_BINDING_TYPES:
17521753
self.assertIsNone(sslobj.get_channel_binding('tls-unique'))
17531754
self.ssl_io_loop(sock, incoming, outgoing, sslobj.do_handshake)
17541755
self.assertTrue(sslobj.cipher())
17551756
self.assertIsNotNone(sslobj.shared_ciphers())
1757+
self.assertIsNotNone(sslobj.version())
17561758
self.assertTrue(sslobj.getpeercert())
17571759
if 'tls-unique' in ssl.CHANNEL_BINDING_TYPES:
17581760
self.assertTrue(sslobj.get_channel_binding('tls-unique'))
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SSLObject.version() now correctly returns None when handshake over BIO has
2+
not been performed yet.

Modules/_ssl.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1706,6 +1706,10 @@ _ssl__SSLSocket_version_impl(PySSLSocket *self)
17061706

17071707
if (self->ssl == NULL)
17081708
Py_RETURN_NONE;
1709+
if (!SSL_is_init_finished(self->ssl)) {
1710+
/* handshake not finished */
1711+
Py_RETURN_NONE;
1712+
}
17091713
version = SSL_get_version(self->ssl);
17101714
if (!strcmp(version, "unknown"))
17111715
Py_RETURN_NONE;

0 commit comments

Comments
 (0)