diff --git a/extern/load_module.c b/extern/load_module.c index d9ffa31..a4565ec 100644 --- a/extern/load_module.c +++ b/extern/load_module.c @@ -17,6 +17,9 @@ static PyObject* p11_error() { NULL); PyObject* errmsg = PyUnicode_FromWideChar(msgbuffer, l); LocalFree(msgbuffer); + if (errmsg == NULL) { + Py_RETURN_NONE; + } return errmsg; } else { Py_RETURN_NONE; @@ -61,7 +64,9 @@ static PyObject* p11_error() { } int len = strlen(error); PyObject* result = PyUnicode_DecodeUTF8(error, len, NULL); - PyMem_Free(error); + if (result == NULL) { + Py_RETURN_NONE; + } return result; } diff --git a/tests/test_slots_and_tokens.py b/tests/test_slots_and_tokens.py index 8e49818..2e7b085 100644 --- a/tests/test_slots_and_tokens.py +++ b/tests/test_slots_and_tokens.py @@ -14,6 +14,10 @@ def test_double_initialise(self): self.assertIsNotNone(pkcs11.lib(LIB)) self.assertIsNotNone(pkcs11.lib(LIB)) + def test_nonexistent_lib(self): + with self.assertRaises(RuntimeError): + pkcs11.lib("thislibdoesntexist.so") + def test_double_initialise_different_libs(self): self.assertIsNotNone(pkcs11.lib(LIB)) with self.assertRaises(pkcs11.AlreadyInitialized):