From 9d74b42aca83c3fcf2f45f9f7b505fd688ffa78c Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sun, 16 May 2010 23:14:22 +0000 Subject: [PATCH] Merged revisions 81241 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r81241 | antoine.pitrou | 2010-05-17 01:11:46 +0200 (lun., 17 mai 2010) | 4 lines Clear the OpenSSL error queue each time an error is signalled. When the error queue is not emptied, strange things can happen on the next SSL call, depending on the OpenSSL version. ........ --- Modules/_ssl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 4aa1e2d6ec1..e4b6fedf194 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -205,6 +205,7 @@ PySSL_SetError(PySSLSocket *obj, int ret, char *filename, int lineno) errstr = "EOF occurred in violation of protocol"; } else if (ret == -1) { /* underlying BIO reported an I/O error */ + ERR_clear_error(); return s->errorhandler(); } else { /* possible? */ p = PY_SSL_ERROR_SYSCALL; @@ -237,6 +238,7 @@ PySSL_SetError(PySSLSocket *obj, int ret, char *filename, int lineno) errstr = ERR_error_string(ERR_peek_last_error(), NULL); } PyOS_snprintf(buf, sizeof(buf), "_ssl.c:%d: %s", lineno, errstr); + ERR_clear_error(); v = Py_BuildValue("(is)", p, buf); if (v != NULL) { PyErr_SetObject(PySSLErrorObject, v); @@ -256,6 +258,7 @@ _setSSLError (char *errstr, int errcode, char *filename, int lineno) { errstr = ERR_error_string(errcode, NULL); } PyOS_snprintf(buf, sizeof(buf), "_ssl.c:%d: %s", lineno, errstr); + ERR_clear_error(); v = Py_BuildValue("(is)", errcode, buf); if (v != NULL) { PyErr_SetObject(PySSLErrorObject, v);