Oh these are good points

On Mon, May 22, 2017 at 4:25 AM Stefan Schmidt <ste...@osg.samsung.com>
wrote:

> Hello.
>
> The patch never made it to the git commit list (I guess it was pushed
> int a branch before and merge into master). Re-creating it here to point
> to some problems Coverity found.
>
>
> commit 0b2e15db0f63735b4ba56b3876779aaa4119fd46
> Author: Mike Blumenkrantz <zm...@osg.samsung.com>
> Date:   Wed May 17 16:02:53 2017 -0400
>
>      elm_cnp: add event for selection change
>
>      @feature
>
> diff --git a/src/lib/elementary/elm_cnp.c b/src/lib/elementary/elm_cnp.c
> index eff4c14..23b2970 100644
> --- a/src/lib/elementary/elm_cnp.c
> +++ b/src/lib/elementary/elm_cnp.c
> @@ -17,6 +17,8 @@
>
>   #define ARRAYINIT(foo)  [foo] =
>
> +EAPI int ELM_CNP_EVENT_SELECTION_CHANGED = -1;
> +
>   // common stuff
>   enum
>   {
> @@ -822,6 +824,32 @@ _x11_selection_clear(void *udata EINA_UNUSED, int
> type EINA_UNUSED, void *event)
>      return ECORE_CALLBACK_PASS_ON;
>   }
>
> +static Eina_Bool
> +_x11_fixes_selection_notify(void *d EINA_UNUSED, int t EINA_UNUSED,
> void *event)
> +{
> +   Elm_Cnp_Event_Selection_Changed *e;
> +   Ecore_X_Event_Fixes_Selection_Notify *ev = event;
> +   Elm_Sel_Type type;
> +
> +   switch (ev->selection)
> +     {
> +      case ECORE_X_SELECTION_CLIPBOARD:
> +        type = ELM_SEL_TYPE_CLIPBOARD;
> +        break;
> +      case ECORE_X_SELECTION_PRIMARY:
> +        type = ELM_SEL_TYPE_PRIMARY;
> +        break;
> +      default: return ECORE_CALLBACK_RENEW;
> +     }
> +   e = calloc(1, sizeof(Elm_Cnp_Event_Selection_Changed));
> +   EINA_SAFETY_ON_NULL_RETURN_VAL(e, ECORE_CALLBACK_RENEW);
> +   e->type = type;
> +   e->seat_id = 1; /* under x11 this is always the default seat */
> +   e->exists = !!ev->owner;
>
>
> You are allocating e here and filling up member values but you do
> nothing with it before returning. Same situation in
> _wl_selection_changed further below. Coverity reports two resource leaks
> ion this case but it looks more like you intended to do something with e
> but you simply did not.
>
>
> +   ecore_event_add(ELM_CNP_EVENT_SELECTION_CHANGED, ev, NULL, NULL);
> +   return ECORE_CALLBACK_RENEW;
> +}
> +
>   /*
>    * Response to a selection notify:
>    *  - So we have asked for the selection list.
> @@ -1931,6 +1959,7 @@ _x11_elm_cnp_init(void)
>      //XXX delete handlers?
>      ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR,
> _x11_selection_clear, NULL);
>      ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY,
> _x11_selection_notify, NULL);
> +   ecore_event_handler_add(ECORE_X_EVENT_FIXES_SELECTION_NOTIFY,
> _x11_fixes_selection_notify, NULL);
>      return EINA_TRUE;
>   }
>
> @@ -3149,6 +3178,32 @@ _wl_elm_cnp_selection_clear(Evas_Object *obj,
> Elm_Sel_Type selection EINA_UNUSED
>      return EINA_TRUE;
>   }
>
> +static void
> +_wl_selection_changed_free(void *data, void *ev EINA_UNUSED)
> +{
> +   ecore_wl2_display_disconnect(data);
> +}
> +
> +static Eina_Bool
> +_wl_selection_changed(void *data EINA_UNUSED, int type EINA_UNUSED,
> void *event)
> +{
> +   Elm_Cnp_Event_Selection_Changed *e;
> +   Ecore_Wl2_Event_Seat_Selection *ev = event;
> +   Ecore_Wl2_Input *seat;
> +
> +   seat = ecore_wl2_display_input_find(ev->display, ev->seat);
> +   EINA_SAFETY_ON_NULL_RETURN_VAL(seat, ECORE_CALLBACK_RENEW);
> +   e = calloc(1, sizeof(Elm_Cnp_Event_Selection_Changed));
> +   EINA_SAFETY_ON_NULL_RETURN_VAL(e, ECORE_CALLBACK_RENEW);
> +   e->type = ELM_SEL_TYPE_CLIPBOARD;
> +   e->seat_id = ev->seat;
> +   /* connect again to add ref */
> +   e->display =
> ecore_wl2_display_connect(ecore_wl2_display_name_get(ev->display));
> +   e->exists = !!ecore_wl2_dnd_selection_get(seat);
> +   ecore_event_add(ELM_CNP_EVENT_SELECTION_CHANGED, ev,
> _wl_selection_changed_free, ev->display);
> +   return ECORE_CALLBACK_RENEW;
> +}
> +
>   static Eina_Bool
>   _wl_selection_send(void *data, int type EINA_UNUSED, void *event)
>   {
> @@ -3220,6 +3275,8 @@ _wl_elm_cnp_init(void)
>
>      ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_SEND,
>                              _wl_selection_send, &wl_cnp_selection);
> +   ecore_event_handler_add(ECORE_WL2_EVENT_SEAT_SELECTION,
>
> regards
> Stefan Schmidt
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to