From 5e58e58d60e4f991f2f9df6d98c4722e21b482ea Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 16 Jul 2018 16:31:53 +0900 Subject: [PATCH] efl selection manager + elm dnd test fix with bad string handling so there are 2 problems behind T7113. first is a problem in the efl selection manager being "sloppy" with selection data. it's doing a strlen on the data but it's not a normal c string. it's a blob of binary data + length value. this fixes that "sloppiness" by using the len field. there is also another bug in the dnd test code that again has to do with "sloppy" handling of data buffers and assuming nul byte termination and not using the len field properly. this fixes T7113. --- src/bin/elementary/test_dnd.c | 10 +++++++--- src/examples/elementary/codegen_example.edj | Bin 12063 -> 0 bytes src/lib/elementary/efl_selection_manager.c | 9 +++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) delete mode 100644 src/examples/elementary/codegen_example.edj diff --git a/src/bin/elementary/test_dnd.c b/src/bin/elementary/test_dnd.c index 2e5aab507f..93bed2a397 100644 --- a/src/bin/elementary/test_dnd.c +++ b/src/bin/elementary/test_dnd.c @@ -204,11 +204,15 @@ _grid_item_getcb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, int static inline char * _strndup(const char *str, size_t len) { - size_t slen = strlen(str); + const char *p; char *ret; + size_t slen; - if (slen > len) slen = len; - ret = malloc (slen + 1); + for (slen = 0, p = str; + (slen < len) && (*p); + p++, slen++); + + ret = malloc(slen + 1); if (!ret) return NULL; if (slen > 0) memcpy(ret, str, slen); diff --git a/src/examples/elementary/codegen_example.edj b/src/examples/elementary/codegen_example.edj deleted file mode 100644 index 4f87ec8c821cfc0400313182b74892f719989cdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12063 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 Ud3oHEyr)Bl>MD%?{Cr3FKW;wvhyVZp diff --git a/src/lib/elementary/efl_selection_manager.c b/src/lib/elementary/efl_selection_manager.c index 24132d44fb..0498820e98 100644 --- a/src/lib/elementary/efl_selection_manager.c +++ b/src/lib/elementary/efl_selection_manager.c @@ -1133,11 +1133,16 @@ static Eina_Bool _x11_vcard_send(char *target EINA_UNUSED, void *data EINA_UNUSED, int size EINA_UNUSED, void **data_ret, int *size_ret, Ecore_X_Atom *ttype EINA_UNUSED, int *typesize EINA_UNUSED) { Sel_Manager_Selection *sel; + char *s; sel_debug("Vcard send called"); sel = *(Sel_Manager_Selection **)data; - if (data_ret) *data_ret = strdup(sel->data.mem); - if (size_ret) *size_ret = strlen(sel->data.mem); + s = malloc(sel->data.len + 1); + if (!s) return EINA_FALSE; + memcpy(s, sel->data.mem, sel->data.len); + s[sel->data.len] = 0; + if (data_ret) *data_ret = s; + if (size_ret) *size_ret = sel->data.len; return EINA_TRUE; }