# HG changeset patch # User Amaury Forgeot d'Arc # Date 1339449304 -7200 # Node ID 25d3418150d2e2820913043432f568e31bf3a19a # Parent 33c305197a3d05217be023fa39a692ad89802317 issue1169: _ssl errors outside any SSL context should use ERR_peek_last_error() diff -r 33c305197a3d05217be023fa39a692ad89802317 -r 25d3418150d2e2820913043432f568e31bf3a19a pypy/module/_ssl/interp_ssl.py --- a/pypy/module/_ssl/interp_ssl.py Mon Jun 11 23:01:31 2012 +0200 +++ b/pypy/module/_ssl/interp_ssl.py Mon Jun 11 23:15:04 2012 +0200 @@ -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 -r 33c305197a3d05217be023fa39a692ad89802317 -r 25d3418150d2e2820913043432f568e31bf3a19a pypy/rlib/ropenssl.py --- a/pypy/rlib/ropenssl.py Mon Jun 11 23:01:31 2012 +0200 +++ b/pypy/rlib/ropenssl.py Mon Jun 11 23:15:04 2012 +0200 @@ -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)