* eet: correctly handle length of ciphered/compressed data.
authorcedric <cedric>
Thu, 18 Nov 2010 10:30:53 +0000 (10:30 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 18 Nov 2010 10:30:53 +0000 (10:30 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eet@54683 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/eet_lib.c

index 82aad09..758757a 100644 (file)
@@ -1802,15 +1802,21 @@ eet_read_cipher(Eet_File   *ef,
         unsigned int data_deciphered_sz = 0;
         /* if we already have the data in ram... copy that */
 
+        if (efn->ciphered && efn->size > size)
+          {
+             size = efn->size;
+             data = realloc(data, efn->size);
+          }
+
         if (efn->data)
-           memcpy(data, efn->data, efn->size);
+           memcpy(data, efn->data, size);
         else
-        if (!read_data_from_disk(ef, efn, data, size))
-           goto on_error;
+          if (!read_data_from_disk(ef, efn, data, size))
+            goto on_error;
 
         if (efn->ciphered && cipher_key)
           {
-             if (eet_decipher(data, size, cipher_key, strlen(cipher_key),
+             if (eet_decipher(data, efn->size, cipher_key, strlen(cipher_key),
                               &data_deciphered, &data_deciphered_sz))
                {
                   if (data_deciphered)