Let set_reason accept bytes or None
diff --git a/OpenSSL/crypto/revoked.c b/OpenSSL/crypto/revoked.c
index 5a9e713..c876373 100644
--- a/OpenSSL/crypto/revoked.c
+++ b/OpenSSL/crypto/revoked.c
@@ -122,6 +122,20 @@
return reason_code;
}
+
+static int
+crypto_byte_converter(PyObject *input, void* output) {
+ char **message = output;
+ if (input == Py_None) {
+ *message = NULL;
+ } else if (PyBytes_CheckExact(input)) {
+ *message = PyBytes_AsString(input);
+ } else {
+ return 0;
+ }
+ return 1;
+}
+
static char crypto_Revoked_set_reason_doc[] = "\n\
Set the reason of a Revoked object.\n\
\n\
@@ -136,8 +150,9 @@
int reason_code;
ASN1_ENUMERATED *rtmp = NULL;
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "z:set_reason",
- kwlist, &reason_str)) {
+ if (!PyArg_ParseTupleAndKeywords(
+ args, keywds, "O&:set_reason", kwlist,
+ crypto_byte_converter, &reason_str)) {
return NULL;
}
diff --git a/OpenSSL/test/test_crypto.py b/OpenSSL/test/test_crypto.py
index a86bfac..5660b5a 100644
--- a/OpenSSL/test/test_crypto.py
+++ b/OpenSSL/test/test_crypto.py
@@ -2152,7 +2152,7 @@
"""
revoked = Revoked()
self.assertRaises(TypeError, revoked.set_reason, 100)
- self.assertRaises(ValueError, revoked.set_reason, 'blue')
+ self.assertRaises(ValueError, revoked.set_reason, b('blue'))
def test_get_reason_wrong_arguments(self):