Stop leaking a STACK_OF(X509) on error cases of crypto_PKCS12_New().  Add a test case of that.  Jean-Paul's find.
diff --git a/src/crypto/pkcs12.c b/src/crypto/pkcs12.c
index 26d710f..3ab8a38 100644
--- a/src/crypto/pkcs12.c
+++ b/src/crypto/pkcs12.c
@@ -344,11 +344,11 @@
     if (p12 && !(cacerts && PKCS12_parse(p12, passphrase, &pkey, &cert, &cacerts)))
     {
         exception_from_error_queue(crypto_Error);
-        return NULL;
+        goto error;
     }
 
     if (!(self = PyObject_GC_New(crypto_PKCS12Obj, &crypto_PKCS12_Type)))
-        return NULL;
+        goto error;
 
     Py_INCREF(Py_None);
     self->cacerts = Py_None;
@@ -400,11 +400,13 @@
         }
     }
 
-    sk_X509_free(cacerts); /* don't free the certs, just the stack */
     PyObject_GC_Track(self);
 
     return self;
+
 error:
+    if(cacerts)
+        sk_X509_free(cacerts); /* don't free the certs, just the stack */
     crypto_PKCS12_dealloc(self);
     return NULL;
 }
diff --git a/test/test_crypto.py b/test/test_crypto.py
index 528fde4..61ee0f0 100644
--- a/test/test_crypto.py
+++ b/test/test_crypto.py
@@ -923,7 +923,17 @@
         self.assertEqual(key_pem, client_key_pem)
         self.assertEqual(None, p12.get_ca_certificates())
 
- 
+
+    def test_load_pkcs12_garbage(self):
+        """
+        Use L{load_pkcs12} on a string of garbage.
+        """
+        passwd = 'whatever'
+        e = self.assertRaises(Error, load_pkcs12, 'fruit loops', passwd)
+        self.assertEqual( e[0][0][0], 'asn1 encoding routines')
+        self.assertEqual( len(e[0][0]), 3)
+
+
     def test_replace(self):
         """
         Test replacing components of a L{PKCS12} object.  Test multiple