diff --git a/OpenSSL/_util.py b/OpenSSL/_util.py index de292bebf..5e2b2564f 100644 --- a/OpenSSL/_util.py +++ b/OpenSSL/_util.py @@ -15,6 +15,8 @@ def text(charp): :return: :class:`str` """ + if not charp: + return "" return native(ffi.string(charp)) diff --git a/OpenSSL/test/test_util.py b/OpenSSL/test/test_util.py new file mode 100644 index 000000000..8d92a3c75 --- /dev/null +++ b/OpenSSL/test/test_util.py @@ -0,0 +1,17 @@ +from OpenSSL._util import exception_from_error_queue, lib +from OpenSSL.test.util import TestCase + + + +class ErrorTests(TestCase): + """ + Tests for handling of certain OpenSSL error cases. + """ + def test_exception_from_error_queue_nonexistent_reason(self): + """ + :py:func:`exception_from_error_queue` raises ``ValueError`` when it + encounters an OpenSSL error code which does not have a reason string. + """ + lib.ERR_put_error(lib.ERR_LIB_EVP, 0, 1112, b"", 10) + exc = self.assertRaises(ValueError, exception_from_error_queue, ValueError) + self.assertEqual(exc.args[0][0][2], "")