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);