From 290272717c6d5fbdf074e72b9a444f7862c75f76 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 7 Mar 2016 21:41:34 -0400 Subject: improve the messages from openssl InternalError --- src/cryptography/hazmat/bindings/openssl/binding.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index b2215de3..d8fd74db 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -15,8 +15,9 @@ from cryptography.exceptions import InternalError from cryptography.hazmat.bindings._openssl import ffi, lib from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES -_OpenSSLError = collections.namedtuple("_OpenSSLError", - ["code", "lib", "func", "reason"]) +_OpenSSLError = collections.namedtuple( + "_OpenSSLError", ["code", "lib", "func", "reason", "reason_text"] +) def _consume_errors(lib): @@ -29,8 +30,12 @@ def _consume_errors(lib): err_lib = lib.ERR_GET_LIB(code) err_func = lib.ERR_GET_FUNC(code) err_reason = lib.ERR_GET_REASON(code) + err_text_reason = ffi.string(lib.ERR_error_string(code, ffi.NULL)) + + errors.append( + _OpenSSLError(code, err_lib, err_func, err_reason, err_text_reason) + ) - errors.append(_OpenSSLError(code, err_lib, err_func, err_reason)) return errors @@ -38,8 +43,12 @@ def _openssl_assert(lib, ok): if not ok: errors = _consume_errors(lib) raise InternalError( - "Unknown OpenSSL error. Please file an issue at https://github.com" - "/pyca/cryptography/issues with information on how to reproduce " + "Unknown OpenSSL error. This error is commonly encountered when " + "another library is not cleaning up the OpenSSL error stack. If " + "you are using cryptography with another Python library that " + "uses OpenSSL try disabling it before reporting a bug. Otherwise " + "iplease file an issue at https://github.com/pyca/cryptography/" + "issues with information on how to reproduce " "this. ({0!r})".format(errors), errors ) -- cgit v1.2.3 From d76bd668dc4b59c037771ed5619f939d65ca9905 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 7 Mar 2016 22:49:43 -0400 Subject: only call ERR_error_string if we're going to raise InternalError --- .../hazmat/bindings/openssl/binding.py | 32 ++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index d8fd74db..47e64191 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -15,8 +15,10 @@ from cryptography.exceptions import InternalError from cryptography.hazmat.bindings._openssl import ffi, lib from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES -_OpenSSLError = collections.namedtuple( - "_OpenSSLError", ["code", "lib", "func", "reason", "reason_text"] +_OpenSSLError = collections.namedtuple("_OpenSSLError", + ["code", "lib", "func", "reason"]) +_OpenSSLErrorText = collections.namedtuple( + "_OpenSSLErrorText", ["code", "lib", "func", "reason", "reason_text"] ) @@ -30,11 +32,8 @@ def _consume_errors(lib): err_lib = lib.ERR_GET_LIB(code) err_func = lib.ERR_GET_FUNC(code) err_reason = lib.ERR_GET_REASON(code) - err_text_reason = ffi.string(lib.ERR_error_string(code, ffi.NULL)) - errors.append( - _OpenSSLError(code, err_lib, err_func, err_reason, err_text_reason) - ) + errors.append(_OpenSSLError(code, err_lib, err_func, err_reason)) return errors @@ -42,15 +41,26 @@ def _consume_errors(lib): def _openssl_assert(lib, ok): if not ok: errors = _consume_errors(lib) + errors_with_text = [] + for err in errors: + err_text_reason = ffi.string( + lib.ERR_error_string(err.code, ffi.NULL) + ) + errors_with_text.append( + _OpenSSLErrorText( + err.code, err.lib, err.func, err.reason, err_text_reason + ) + ) + raise InternalError( "Unknown OpenSSL error. This error is commonly encountered when " "another library is not cleaning up the OpenSSL error stack. If " - "you are using cryptography with another Python library that " - "uses OpenSSL try disabling it before reporting a bug. Otherwise " - "iplease file an issue at https://github.com/pyca/cryptography/" + "you are using cryptography with another library that uses " + "OpenSSL try disabling it before reporting a bug. Otherwise " + "please file an issue at https://github.com/pyca/cryptography/" "issues with information on how to reproduce " - "this. ({0!r})".format(errors), - errors + "this. ({0!r})".format(errors_with_text), + errors_with_text ) -- cgit v1.2.3 From 73672c7c12d9dc17621ef7b54a0d94db59d0b453 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 7 Mar 2016 23:06:19 -0400 Subject: review feedback + make the test actually test a thing --- src/cryptography/hazmat/bindings/openssl/binding.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 47e64191..5d7466f9 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -17,8 +17,8 @@ from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES _OpenSSLError = collections.namedtuple("_OpenSSLError", ["code", "lib", "func", "reason"]) -_OpenSSLErrorText = collections.namedtuple( - "_OpenSSLErrorText", ["code", "lib", "func", "reason", "reason_text"] +_OpenSSLErrorWithText = collections.namedtuple( + "_OpenSSLErrorWithText", ["code", "lib", "func", "reason", "reason_text"] ) @@ -47,7 +47,7 @@ def _openssl_assert(lib, ok): lib.ERR_error_string(err.code, ffi.NULL) ) errors_with_text.append( - _OpenSSLErrorText( + _OpenSSLErrorWithText( err.code, err.lib, err.func, err.reason, err_text_reason ) ) -- cgit v1.2.3