From 04a81e3c6f89e54b3c89c3956bf4c1ee7b0efa89 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Wed, 27 Jun 2012 00:37:05 +0000 Subject: [PATCH] eet: fix crash when cyphering hyge amount of data. Patch by Leandro Sansilva. SVN revision: 72906 --- legacy/eet/AUTHORS | 1 + legacy/eet/ChangeLog | 4 ++++ legacy/eet/NEWS | 1 + legacy/eet/src/lib/eet_cipher.c | 8 ++++++-- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/legacy/eet/AUTHORS b/legacy/eet/AUTHORS index c0d3edde7f..868fdea272 100644 --- a/legacy/eet/AUTHORS +++ b/legacy/eet/AUTHORS @@ -13,3 +13,4 @@ Adam Simpkins Mike Blumenkrantz Lionel Orry Jérôme Pinot +Leandro Sansilva diff --git a/legacy/eet/ChangeLog b/legacy/eet/ChangeLog index c862049930..aac09e2bd9 100644 --- a/legacy/eet/ChangeLog +++ b/legacy/eet/ChangeLog @@ -598,3 +598,7 @@ 2012-05-30 Cedric Bail * Check that gnutls and openssl don't return below zero size during decipher. + +2012-06-27 Leandro Sansilva + + * Fix crash when cyphering huge amount of data. diff --git a/legacy/eet/NEWS b/legacy/eet/NEWS index f7da97e26e..9506fadf66 100644 --- a/legacy/eet/NEWS +++ b/legacy/eet/NEWS @@ -7,6 +7,7 @@ Fixes: * Force destruction of all pending file when shuting down eet. * Make eet_dictionary thread safe. * Check that gnutls and openssl don't return below zero size during decipher. + * Fix crash when cyphering huge amount of data. Eet 1.6.0 diff --git a/legacy/eet/src/lib/eet_cipher.c b/legacy/eet/src/lib/eet_cipher.c index 9441d8c562..5bd9f25d0b 100644 --- a/legacy/eet/src/lib/eet_cipher.c +++ b/legacy/eet/src/lib/eet_cipher.c @@ -968,7 +968,7 @@ eet_cipher(const void *data, # else /* ifdef HAVE_GNUTLS */ /* Openssl declarations*/ EVP_CIPHER_CTX ctx; - unsigned int *buffer; + unsigned int *buffer = NULL; int tmp_len; # endif /* ifdef HAVE_GNUTLS */ @@ -1043,7 +1043,8 @@ eet_cipher(const void *data, /* Gcrypt close the cipher */ gcry_cipher_close(cipher); # else /* ifdef HAVE_GNUTLS */ - buffer = alloca(crypted_length); + buffer = malloc(crypted_length); + if (!buffer) goto on_error; *buffer = tmp; memcpy(buffer + 1, data, size); @@ -1071,6 +1072,7 @@ eet_cipher(const void *data, goto on_error; EVP_CIPHER_CTX_cleanup(&ctx); + free(buffer); # endif /* ifdef HAVE_GNUTLS */ /* Set return values */ @@ -1098,6 +1100,8 @@ on_error: if (opened) EVP_CIPHER_CTX_cleanup(&ctx); + free(buffer); + # endif /* ifdef HAVE_GNUTLS */ /* General error */ free(ret);