q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=26f0c56fafea8b46bbb425c3a0f808c1881fc08f

commit 26f0c56fafea8b46bbb425c3a0f808c1881fc08f
Author: Daniel Kolesa <d.kol...@osg.samsung.com>
Date:   Thu Feb 22 11:18:55 2018 +0100

    eolian: fix eina hash usage so it doesn't consume all your memory
    
    This makes sure items are checked before being added, so that eina
    hash doesn't get confused, add each item thousands of times and
    run out of memory.
---
 src/lib/eolian/eo_parser.c       | 2 +-
 src/lib/eolian/eolian_database.c | 9 +++++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 4a4757a949..56c6a4bfa3 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -2256,7 +2256,7 @@ eo_parser_database_fill(Eolian_Unit *parent, const char 
*filename, Eina_Bool eot
 
    if (ret)
      {
-        if (parent != ret)
+        if ((parent != ret) && !eina_hash_find(parent->children, filename))
           eina_hash_add(parent->children, filename, ret);
         return ret;
      }
diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c
index b932cdaa7e..514d4bf63a 100644
--- a/src/lib/eolian/eolian_database.c
+++ b/src/lib/eolian/eolian_database.c
@@ -706,8 +706,12 @@ static Eina_Bool
 _merge_unit_cb(const Eina_Hash *hash EINA_UNUSED,
                const void *key, void *data, void *fdata)
 {
-   if (eina_hash_add((Eina_Hash *)fdata, key, data))
-     eolian_object_ref((Eolian_Object *)data);
+   Eina_Hash *dest = fdata;
+   if (!eina_hash_find(dest, key))
+     {
+        eina_hash_add(dest, key, data);
+        eolian_object_ref((Eolian_Object *)data);
+     }
    return EINA_TRUE;
 }
 
@@ -744,6 +748,7 @@ _merge_units_cb(const Eina_Hash *hash EINA_UNUSED,
    return EINA_TRUE;
 }
 
+
 static void
 _merge_units(Eolian_Unit *unit)
 {

-- 


Reply via email to