summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2011-10-04 10:03:09 +0000
committerCarsten Haitzler <raster@rasterman.com>2011-10-04 10:03:09 +0000
commitd32e3400a0bd6f5b4e8490b0c8fcd5ffe6ce5607 (patch)
tree906365ac66e4f85899bfb4af26f323e8a3edb845
parentdd56854e990d99c707b0baae2720c9ac6a9497a2 (diff)
downloadeet-d32e3400a0bd6f5b4e8490b0c8fcd5ffe6ce5607.tar.gz
FIX: allow open of eet files with 0 key entries. this kind of breaks
some usage scenarios. SVN revision: 63800
-rw-r--r--ChangeLog5
-rw-r--r--src/lib/eet_lib.c15
2 files changed, 15 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index a786ee4..acdd9cd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -530,3 +530,8 @@
2011-09-15 Cedric Bail
* Add eet_data_xattr_cipher_get and eet_data_xattr_cipher_set.
+
+2011-10-04 Carsten Haitzler (The Rasterman)
+
+ * Fix issue where an empty eet file (no keys) is not openable
+ for read/write anymore. Allow it.
diff --git a/src/lib/eet_lib.c b/src/lib/eet_lib.c
index f31e1fd..594ecca 100644
--- a/src/lib/eet_lib.c
+++ b/src/lib/eet_lib.c
@@ -882,8 +882,8 @@ eet_internal_read2(Eet_File *ef)
bytes_dictionary_entries = EET_FILE2_DICTIONARY_ENTRY_SIZE *
num_dictionary_entries;
- /* we can't have <= 0 values here - invalid */
- if (eet_test_close((num_directory_entries <= 0), ef))
+ /* we can't have > 0x7fffffff values here - invalid */
+ if (eet_test_close((num_directory_entries > 0x7fffffff), ef))
return NULL;
/* we can't have more bytes directory and bytes in dictionaries than the size of the file */
@@ -912,6 +912,10 @@ eet_internal_read2(Eet_File *ef)
return NULL;
signature_base_offset = 0;
+ if (num_directory_entries == 0)
+ {
+ signature_base_offset = ef->data_size;
+ }
/* actually read the directory block - all of it, into ram */
for (i = 0; i < num_directory_entries; ++i)
@@ -1134,7 +1138,8 @@ eet_internal_read1(Eet_File *ef)
EXTRACT_INT(byte_entries, ef->data, idx);
/* we can't have <= 0 values here - invalid */
- if (eet_test_close((num_entries <= 0) || (byte_entries <= 0), ef))
+ if (eet_test_close((num_entries > 0x7fffffff) ||
+ (byte_entries > 0x7fffffff), ef))
return NULL;
/* we can't have more entires than minimum bytes for those! invalid! */
@@ -1142,8 +1147,8 @@ eet_internal_read1(Eet_File *ef)
return NULL;
/* check we will not outrun the file limit */
- if (eet_test_close(((byte_entries + (int)sizeof(int) * 3) > ef->data_size),
- ef))
+ if (eet_test_close(((byte_entries + (int)(sizeof(int) * 3)) >
+ ef->data_size), ef))
return NULL;
/* allocate header */