From d43515d9dcc51df92838db929417d6715a5720bf Mon Sep 17 00:00:00 2001 From: Taehyub Kim Date: Mon, 13 Apr 2020 15:16:04 +0900 Subject: [PATCH] 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;