jaehyun pushed a commit to branch master.

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

commit d43515d9dcc51df92838db929417d6715a5720bf
Author: Taehyub Kim <taehyub....@samsung.com>
Date:   Mon Apr 13 15:16:04 2020 +0900

    elm_cnp: fix memory leaks
    
    Summary:
    In copy and paste logic, there are some memory leaks logic.
    so fixed.
    @fix
    
    Reviewers: bu5hm4n, Jaehyun_Cho
    
    Reviewed By: Jaehyun_Cho
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D11690
---
 src/lib/elementary/elm_cnp.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/lib/elementary/elm_cnp.c b/src/lib/elementary/elm_cnp.c
index ab17f5f3e4..1833c0b3d4 100644
--- a/src/lib/elementary/elm_cnp.c
+++ b/src/lib/elementary/elm_cnp.c
@@ -84,10 +84,12 @@ elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type 
selection,
    const char *mime_type;
    Eina_Slice data;
    Eina_Array *tmp;
+   unsigned char *mem_buf = NULL;
 
    if (format == ELM_SEL_FORMAT_TEXT && ((char*)buf)[buflen - 1] != '\0')
      {
-        data.mem = eina_memdup((unsigned char *)buf, buflen, EINA_TRUE);
+        mem_buf = eina_memdup((unsigned char *)buf, buflen, EINA_TRUE);
+        data.mem = mem_buf;
         data.len = buflen + 1;
      }
    else
@@ -108,6 +110,9 @@ elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type 
selection,
    content = eina_content_new(data, mime_type);
    _register_selection_changed(obj);
 
+   if (mem_buf != NULL)
+     free(mem_buf);
+
    return ecore_evas_selection_set(ee, _default_seat(obj), 
_elm_sel_type_to_ee_type(selection), content);
 }
 
@@ -199,10 +204,12 @@ _callback_storage_deliver(Eo *obj, void *data, const 
Eina_Value value)
      }
    else
      {
-        EINA_SAFETY_ON_FALSE_RETURN_VAL(format == ELM_SEL_FORMAT_TEXT || 
format == ELM_SEL_FORMAT_MARKUP || format == ELM_SEL_FORMAT_HTML, 
EINA_VALUE_EMPTY);
+        EINA_SAFETY_ON_FALSE_GOTO(format == ELM_SEL_FORMAT_TEXT || format == 
ELM_SEL_FORMAT_MARKUP || format == ELM_SEL_FORMAT_HTML, end);
 
         _elm_entry_entry_paste(obj, (const char *) d.data);
      }
+
+end:
    free(d.data);
 
    return EINA_VALUE_EMPTY;

-- 


Reply via email to