thiep pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=bcba96656afc534a8ad70da772a95aba592878fc
commit bcba96656afc534a8ad70da772a95aba592878fc Author: Thiep Ha <thie...@gmail.com> Date: Tue May 3 10:41:00 2016 +0000 elm cnp/wl: add uri data type checking When selection owner provides uri type (uri/text-list), it should check if data is in correct format. --- src/lib/elementary/elm_cnp.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/lib/elementary/elm_cnp.c b/src/lib/elementary/elm_cnp.c index ab0951e..9808f45 100644 --- a/src/lib/elementary/elm_cnp.c +++ b/src/lib/elementary/elm_cnp.c @@ -2495,16 +2495,26 @@ _wl_targets_converter(char *target, Wl_Cnp_Selection *sel EINA_UNUSED, void *dat int len = 0; int i = 0; Elm_Sel_Format formats = ELM_SEL_FORMAT_NONE; - Cnp_Atom *atom = NULL; + Eina_Bool is_uri = EINA_FALSE; - atom = eina_hash_find(_types_hash, target); - if (atom) - formats = atom->formats; + if (sel->format) + { + formats = sel->format; + is_uri = _wl_is_uri_type_data(sel->selbuf, sel->buflen); + } + else + { + Cnp_Atom *atom = eina_hash_find(_types_hash, target); + if (atom) + formats = atom->formats; + } for (i = 0; i < CNP_N_ATOMS; i++) { if (formats & _atoms[i].formats) { - len += strlen(_atoms[i].name) + strlen(sep); + if ((is_uri) || ((!is_uri) && + strcmp(_atoms[i].name, "text/uri-list"))) + len += strlen(_atoms[i].name) + strlen(sep); } } aret = calloc(1, len * sizeof(char)); @@ -2513,8 +2523,12 @@ _wl_targets_converter(char *target, Wl_Cnp_Selection *sel EINA_UNUSED, void *dat { if (formats & _atoms[i].formats) { - aret = strcat(aret, _atoms[i].name); - aret = strcat(aret, sep); + if ((is_uri) || ((!is_uri) && + strcmp(_atoms[i].name, "text/uri-list"))) + { + aret = strcat(aret, _atoms[i].name); + aret = strcat(aret, sep); + } } } *data_ret = aret; --