[pypy-commit] pypy default: issue1169: _ssl errors outside any SSL context should use ERR_peek_last_error()
amauryfa
noreply at buildbot.pypy.org
Mon Jun 11 23:23:37 CEST 2012
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch:
Changeset: r55604:25d3418150d2
Date: 2012-06-11 23:15 +0200
http://bitbucket.org/pypy/pypy/changeset/25d3418150d2/
Log: issue1169: _ssl errors outside any SSL context should use
ERR_peek_last_error()
diff --git a/pypy/module/_ssl/interp_ssl.py b/pypy/module/_ssl/interp_ssl.py
--- a/pypy/module/_ssl/interp_ssl.py
+++ b/pypy/module/_ssl/interp_ssl.py
@@ -789,7 +789,11 @@
def _ssl_seterror(space, ss, ret):
assert ret <= 0
- if ss and ss.ssl:
+ if ss is None:
+ errval = libssl_ERR_peek_last_error()
+ errstr = rffi.charp2str(libssl_ERR_error_string(errval, None))
+ return ssl_error(space, errstr, errval)
+ elif ss.ssl:
err = libssl_SSL_get_error(ss.ssl, ret)
else:
err = SSL_ERROR_SSL
diff --git a/pypy/rlib/ropenssl.py b/pypy/rlib/ropenssl.py
--- a/pypy/rlib/ropenssl.py
+++ b/pypy/rlib/ropenssl.py
@@ -259,6 +259,7 @@
ssl_external('SSL_CIPHER_get_bits', [SSL_CIPHER, rffi.INTP], rffi.INT)
ssl_external('ERR_get_error', [], rffi.INT)
+ssl_external('ERR_peek_last_error', [], rffi.INT)
ssl_external('ERR_error_string', [rffi.ULONG, rffi.CCHARP], rffi.CCHARP)
ssl_external('SSL_free', [SSL], lltype.Void)
More information about the pypy-commit
mailing list