summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2014-06-18 17:26:13 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2014-06-19 10:28:01 +0900
commitc64ea71dbe0ae5dbaafa4b96e4b356ee4a34ce76 (patch)
tree57d20fef4e95957a70f1469ce447de0617fdbba9
parent5b1ed7860554cc3196ac5fb217e5748351e9d40b (diff)
downloadefl-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.c15
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