raster pushed a commit to branch master.

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

commit b1d9cf8d8d819184f8072c1de929b15159bee8a5
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Fri Jul 8 18:53:11 2016 +0900

    edje cc mo encoding leak - ensure data is freed when setting up encoding
    
    this should fix CID 1306604
---
 src/bin/edje/edje_cc_out.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c
index 0f969fa..3ec1de3 100644
--- a/src/bin/edje/edje_cc_out.c
+++ b/src/bin/edje/edje_cc_out.c
@@ -1656,7 +1656,7 @@ data_write_mo(Eet_File *ef, int *mo_num)
 
         for (i = 0; i < (int)edje_file->mo_dir->mo_entries_count; i++)
           {
-             Mo_Write *mw;
+             Mo_Write *mw, *mw2;
              mw = calloc(1, sizeof(Mo_Write));
              if (!mw) continue;
              mw->ef = ef;
@@ -1677,17 +1677,23 @@ data_write_mo(Eet_File *ef, int *mo_num)
                        if (ecore_file_exists(po_path))
                          {
                             snprintf(buf, sizeof(buf), "msgfmt -o %s %s", 
mo_path, po_path);
-                            mw->mo_path = strdup(mo_path);
-                            mw->exe = ecore_exe_run(buf, mw);
-                            ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
-                                                       _exe_del_cb, mw);
+                            mw2 = malloc(sizeof(Mo_Write));
+                            if (mw2)
+                              {
+                                 memcpy(mw2, mw, sizeof(Mo_Write));
+                                 mw2->mo_path = strdup(mo_path);
+                                 mw2->exe = ecore_exe_run(buf, mw2);
+                                 ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
+                                                         _exe_del_cb, mw2);
+                              }
                          }
                        else
                          error_and_abort(mw->ef, "Invalid .po file.");
                     }
+                  free(mw);
                }
              else
-               { 
+               {
                   if (threads)
                     ecore_thread_run(data_thread_mo, data_thread_mo_end, NULL, 
mw);
                   else

-- 


Reply via email to