diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2014-06-18 17:26:13 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2014-06-19 10:28:01 +0900 |
commit | c64ea71dbe0ae5dbaafa4b96e4b356ee4a34ce76 (patch) | |
tree | 57d20fef4e95957a70f1469ce447de0617fdbba9 | |
parent | 5b1ed7860554cc3196ac5fb217e5748351e9d40b (diff) | |
download | efl-c64ea71dbe0ae5dbaafa4b96e4b356ee4a34ce76.tar.gz |
Evas: Fix potential resource leak in the TGV loader
The map would eventually be freed when closing the image.
But still...
-rw-r--r-- | src/modules/evas/loaders/tgv/evas_image_load_tgv.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/modules/evas/loaders/tgv/evas_image_load_tgv.c b/src/modules/evas/loaders/tgv/evas_image_load_tgv.c index d30870bb2a..c5aa3b7a15 100644 --- a/src/modules/evas/loaders/tgv/evas_image_load_tgv.c +++ b/src/modules/evas/loaders/tgv/evas_image_load_tgv.c @@ -162,7 +162,8 @@ evas_image_load_file_head_tgv(void *loader_data, int *error) { Evas_Loader_Internal *loader = loader_data; - const char *m; + Eina_Bool ret = EINA_FALSE; + char *m; m = eina_file_map_all(loader->f, EINA_FILE_SEQUENTIAL); if (!m) @@ -174,7 +175,7 @@ evas_image_load_file_head_tgv(void *loader_data, if (strncmp(m, "TGV1", 4) != 0) { *error = EVAS_LOAD_ERROR_CORRUPT_FILE; - return EINA_FALSE; + goto on_error; } switch (m[OFFSET_ALGORITHM] & 0xFF) @@ -196,7 +197,7 @@ evas_image_load_file_head_tgv(void *loader_data, break; default: *error = EVAS_LOAD_ERROR_CORRUPT_FILE; - return EINA_FALSE; + goto on_error; } loader->compress = m[OFFSET_OPTIONS] & 0x1; @@ -232,14 +233,18 @@ evas_image_load_file_head_tgv(void *loader_data, if (!eina_rectangle_intersection(&loader->region, &r)) { *error = EVAS_LOAD_ERROR_GENERIC; - return EINA_FALSE; + goto on_error; } } prop->w = loader->size.width; prop->h = loader->size.height; - return EINA_TRUE; + ret = EINA_TRUE; + +on_error: + eina_file_map_free(loader->f, m); + return ret; } static inline unsigned int |