Fix memory leak in audioc.c.
[paraslash.git] / gcrypt.c
index 775abd764902b53cf60930270fc6fea73a62e9a1..2f38f1a6cab16e606e3a5704cef61b7cad252b50 100644 (file)
--- a/gcrypt.c
+++ b/gcrypt.c
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (C) 2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2011-2012 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -7,7 +7,6 @@
 /** \file gcrypt.c Libgrcypt-based encryption/decryption routines. */
 
 #include <regex.h>
 /** \file gcrypt.c Libgrcypt-based encryption/decryption routines. */
 
 #include <regex.h>
-#include <stdbool.h>
 #include <gcrypt.h>
 
 #include "para.h"
 #include <gcrypt.h>
 
 #include "para.h"
@@ -164,7 +163,7 @@ static void pad_oaep(unsigned char *in, size_t in_len, unsigned char *out,
 /* rfc 3447, section 7.1.2 */
 static int unpad_oaep(unsigned char *in, size_t in_len, unsigned char *out,
                size_t *out_len)
 /* rfc 3447, section 7.1.2 */
 static int unpad_oaep(unsigned char *in, size_t in_len, unsigned char *out,
                size_t *out_len)
-{      int ret;
+{
        unsigned char *masked_seed = in + 1;
        unsigned char *db = in + 1 + HASH_SIZE;
        unsigned char seed[HASH_SIZE], seed_mask[HASH_SIZE];
        unsigned char *masked_seed = in + 1;
        unsigned char *db = in + 1 + HASH_SIZE;
        unsigned char seed[HASH_SIZE], seed_mask[HASH_SIZE];
@@ -189,7 +188,7 @@ static int unpad_oaep(unsigned char *in, size_t in_len, unsigned char *out,
        p++;
        *out_len = in + in_len - p;
        memcpy(out, p, *out_len);
        p++;
        *out_len = in + in_len - p;
        memcpy(out, p, *out_len);
-       return ret;
+       return 1;
 }
 
 struct asymmetric_key {
 }
 
 struct asymmetric_key {
@@ -587,7 +586,7 @@ static int get_asn_public_key(const char *key_file, struct asymmetric_key **resu
        key = para_malloc(sizeof(*key));
        key->sexp = sexp;
        *result = key;
        key = para_malloc(sizeof(*key));
        key->sexp = sexp;
        *result = key;
-       ret = n_size * 8;
+       ret = n_size;
        PARA_INFO_LOG("successfully read %u bit asn public key\n", n_size * 8);
 
 release_e:
        PARA_INFO_LOG("successfully read %u bit asn public key\n", n_size * 8);
 
 release_e:
@@ -763,7 +762,9 @@ static int decode_rsa(gcry_sexp_t sexp, int key_size, unsigned char *outbuf,
        PARA_DEBUG_LOG("decrypted buffer before unpad (%d bytes):\n",
                key_size);
        dump_buffer("non-unpadded decrypted buffer", oaep_buf, key_size);;
        PARA_DEBUG_LOG("decrypted buffer before unpad (%d bytes):\n",
                key_size);
        dump_buffer("non-unpadded decrypted buffer", oaep_buf, key_size);;
-       unpad_oaep(oaep_buf, key_size, outbuf, nbytes);
+       ret = unpad_oaep(oaep_buf, key_size, outbuf, nbytes);
+       if (ret < 0)
+               goto out_mpi_release;
        PARA_DEBUG_LOG("decrypted buffer after unpad (%zu bytes):\n",
                *nbytes);
        dump_buffer("unpadded decrypted buffer", outbuf, *nbytes);;
        PARA_DEBUG_LOG("decrypted buffer after unpad (%zu bytes):\n",
                *nbytes);
        dump_buffer("unpadded decrypted buffer", outbuf, *nbytes);;