summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2016-12-19 12:03:46 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2016-12-19 12:06:24 +0900
commit72f98a06499cbabc7f56290afa89f7b8b37f52b9 (patch)
treeeeb6e690b6c41f210347604683ac0cee5dd63e9d
parent34c28918d52b80239f10cd7821aee8ea59f84d47 (diff)
downloadefl-72f98a06499cbabc7f56290afa89f7b8b37f52b9.tar.gz
evas/ply: Fix some memleaks
I have a strong feeling that this parser is not very robust... Closes T5001
-rw-r--r--src/modules/evas/model_loaders/ply/evas_model_load_ply.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/modules/evas/model_loaders/ply/evas_model_load_ply.c b/src/modules/evas/model_loaders/ply/evas_model_load_ply.c
index eb4228b19f..9f49039673 100644
--- a/src/modules/evas/model_loaders/ply/evas_model_load_ply.c
+++ b/src/modules/evas/model_loaders/ply/evas_model_load_ply.c
@@ -53,18 +53,20 @@ _read_ply_header(char *map, Evas_Model_Load_Save_Header *header)
if (helping_pointer == NULL)
{
- ERR("File have not kayword vertex. It is necessary.");
+ ERR("PLY file doesn't contain the required keyword 'vertex'");
return EINA_FALSE;
}
sscanf(helping_pointer[1], "%d", &header->vertices_count);
+ free(helping_pointer[0]);
free(helping_pointer);
+
helping_pointer = eina_str_split(map, "end_header\n", 0);
if (helping_pointer == NULL)
{
- ERR("File have not kayword end_header. It is necessary.");
+ ERR("PLY file doesn't contain the required keyword 'end_header'");
return EINA_FALSE;
}
@@ -98,14 +100,26 @@ _read_ply_header(char *map, Evas_Model_Load_Save_Header *header)
header->indices_count = 3 * triangles;
+ free(helping_pointer[0]);
+ free(helping_pointer);
+
/* analyse flags used when file was saved in blender */
helping_pointer = eina_str_split(map, "property float ", 0);
+ if (helping_pointer == NULL)
+ return EINA_FALSE;
+
if ((helping_pointer[1] != NULL) && (*helping_pointer[1] == 'x') &&
(helping_pointer[2] != NULL) && (*helping_pointer[2] == 'y') &&
(helping_pointer[3] != NULL) && (*helping_pointer[3] == 'z'))
header->existence_of_positions = EINA_TRUE;
- else return EINA_FALSE;
+ else
+ {
+ ERR("PLY file doesn't start with x,y,z float fields, they are required.");
+ free(helping_pointer[0]);
+ free(helping_pointer);
+ return EINA_FALSE;
+ }
if ((helping_pointer[4] != NULL) && (*helping_pointer[4] == 'n') &&
(helping_pointer[5] != NULL) && (*helping_pointer[5] == 'n') &&
@@ -120,20 +134,22 @@ _read_ply_header(char *map, Evas_Model_Load_Save_Header *header)
(helping_pointer[5] != NULL) && (*helping_pointer[5] == 't'))))
header->existence_of_tex_coords = EINA_TRUE;
+ free(helping_pointer[0]);
+ free(helping_pointer);
+
helping_pointer = eina_str_split(map, "property uchar ", 0);
+ if (helping_pointer == NULL)
+ return EINA_FALSE;
+
if ((helping_pointer[1] != NULL) && (*helping_pointer[1] == 'r') &&
(helping_pointer[2] != NULL) && (*helping_pointer[2] == 'g') &&
(helping_pointer[3] != NULL) && (*helping_pointer[3] == 'b'))
header->existence_of_colors = EINA_TRUE;
- if (!header->existence_of_positions)
- {
- ERR("File have not x, y, or z field as the first 3 float fields. They are necessary.");
- return EINA_FALSE;
- }
-
+ free(helping_pointer[0]);
free(helping_pointer);
+
return EINA_TRUE;
}