From: Carsten Haitzler (Rasterman) Date: Thu, 5 Apr 2018 12:12:10 +0000 (+0900) Subject: elm - selection manager - fix string buffer handling and format types X-Git-Tag: upstream/1.21.0~1427 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=93431294e532f6486c31de993376bd115c89458f;p=platform%2Fupstream%2Fefl.git elm - selection manager - fix string buffer handling and format types this has 2 bugs really. 1 - the format masks for plain text included markup which ... is wrong - right? that should have a mime type of its own... either way it leads to plain text pasts being handled wrong in wayland... so this fixes that also the string buffers in wayland just were nothandled right. buffers were raw binary buffers plus size,not strings, but they were strdup'd etc. assuming nul termination. oh so wrong to do that. this also fixes that as i fpound it while fixing the above format bug. this fixes T6284 @fix --- diff --git a/src/lib/elementary/efl_selection_manager.c b/src/lib/elementary/efl_selection_manager.c index 3e190687..bc2fdef 100644 --- a/src/lib/elementary/efl_selection_manager.c +++ b/src/lib/elementary/efl_selection_manager.c @@ -2427,13 +2427,28 @@ _wl_text_converter(char *target, Sel_Manager_Selection *sel, void *data, int siz else if ((format & EFL_SELECTION_FORMAT_MARKUP) || (format & EFL_SELECTION_FORMAT_HTML)) { - *data_ret = _elm_util_mkup_to_text(data); - if (size_ret && *data_ret) *size_ret = strlen(*data_ret); + char *tmp = malloc(size + 1); + if (tmp) + { + strncpy(tmp, data, size); + tmp[size] = 0; + *data_ret = _elm_util_mkup_to_text(tmp); + if (size_ret && *data_ret) *size_ret = strlen(*data_ret); + free(tmp); + } + else return EINA_FALSE; } else if (format & EFL_SELECTION_FORMAT_TEXT) { - *data_ret = strdup(data); - if (size_ret && *data_ret) *size_ret = strlen(*data_ret); + char *tmp = malloc(size + 1); + if (tmp) + { + strncpy(tmp, data, size); + tmp[size] = 0; + *data_ret = tmp; + if (size_ret && *data_ret) *size_ret = strlen(*data_ret); + } + else return EINA_FALSE; } else if (format & EFL_SELECTION_FORMAT_IMAGE) { @@ -5308,7 +5323,7 @@ _efl_selection_manager_efl_object_constructor(Eo *obj, Efl_Selection_Manager_Dat #endif pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].name = "text/plain;charset=utf-8"; - pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML; + pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].format = EFL_SELECTION_FORMAT_TEXT; #ifdef HAVE_ELEMENTARY_X pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].x_converter = _x11_text_converter; pd->atom_list[SELECTION_ATOM_TEXT_PLAIN_UTF8].x_data_preparer = _x11_data_preparer_text; @@ -5319,7 +5334,7 @@ _efl_selection_manager_efl_object_constructor(Eo *obj, Efl_Selection_Manager_Dat #endif pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].name = "text/plain"; - pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].format = EFL_SELECTION_FORMAT_TEXT | EFL_SELECTION_FORMAT_MARKUP | EFL_SELECTION_FORMAT_HTML; + pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].format = EFL_SELECTION_FORMAT_TEXT; #ifdef HAVE_ELEMENTARY_X pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].x_converter = _x11_text_converter; pd->atom_list[SELECTION_ATOM_TEXT_PLAIN].x_data_preparer = _x11_data_preparer_text;