fix segfaults with X509.sign and X509Req.sign with certain PKeys
diff --git a/src/crypto/pkey.c b/src/crypto/pkey.c
index 0c2bea6..d06ff96 100644
--- a/src/crypto/pkey.c
+++ b/src/crypto/pkey.c
@@ -58,8 +58,7 @@
FAIL();
if (!EVP_PKEY_assign_RSA(self->pkey, rsa))
FAIL();
- Py_INCREF(Py_None);
- return Py_None;
+ break;
case crypto_TYPE_DSA:
if ((dsa = DSA_generate_parameters(bits, NULL, 0, NULL, NULL, NULL, NULL)) == NULL)
@@ -68,12 +67,16 @@
FAIL();
if (!EVP_PKEY_assign_DSA(self->pkey, dsa))
FAIL();
- Py_INCREF(Py_None);
- return Py_None;
- }
+ break;
- PyErr_SetString(crypto_Error, "No such key type");
- return NULL;
+ default:
+ PyErr_SetString(crypto_Error, "No such key type");
+ return NULL;
+
+ }
+ self->initialized = 1;
+ Py_INCREF(Py_None);
+ return Py_None;
}
static char crypto_PKey_bits_doc[] = "\n\
@@ -148,6 +151,14 @@
self->pkey = pkey;
self->dealloc = dealloc;
+ self->only_public = 0;
+
+ /*
+ * Heuristic. Most call-sites pass an initialized EVP_PKEY. Not
+ * necessarily the case that they will, though. That's part of why this is
+ * a hack. -exarkun
+ */
+ self->initialized = 1;
return self;
}