jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=72f98a06499cbabc7f56290afa89f7b8b37f52b9

commit 72f98a06499cbabc7f56290afa89f7b8b37f52b9
Author: Jean-Philippe Andre <[email protected]>
Date:   Mon Dec 19 12:03:46 2016 +0900

    evas/ply: Fix some memleaks
    
    I have a strong feeling that this parser is not very robust...
    
    Closes T5001
---
 .../evas/model_loaders/ply/evas_model_load_ply.c   | 34 ++++++++++++++++------
 1 file 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 eb4228b..9f49039 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;
 }
 

-- 


Reply via email to