cipher: fix memory leak.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 8 Aug 2013 23:26:27 +0000 (08:26 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 8 Aug 2013 23:26:27 +0000 (08:26 +0900)
* cipher/pubkey.c (gcry_pk_sign): Handle the specific case of ECC,
where there is NULL whichi is not the sentinel.

--

This is a kind of makeshift fix, but the MPI array API is internal
only and will be removed, it is better not to change API now.

cipher/pubkey.c

index e867169..e6c1cf6 100644 (file)
@@ -3339,7 +3339,16 @@ gcry_pk_sign (gcry_sexp_t *r_sig, gcry_sexp_t s_hash, gcry_sexp_t s_skey)
  leave:
   if (skey)
     {
-      release_mpi_array (skey);
+      if (is_ecc)
+        /* Q is optional and may be NULL, while there is D after Q.  */
+        for (i = 0; i < 7; i++)
+          {
+            if (skey[i])
+              mpi_free (skey[i]);
+            skey[i] = NULL;
+          }
+      else
+        release_mpi_array (skey);
       gcry_free (skey);
     }