[Genlist] Safety checks to avoid crashes
authorGodly T.Alias <godly.talias@samsung.com>
Tue, 14 Apr 2020 06:00:37 +0000 (11:30 +0530)
committerJongmin Lee <jm105.lee@samsung.com>
Fri, 17 Apr 2020 23:00:11 +0000 (08:00 +0900)
Change-Id: Ic951e1382b7e82488b82a2cec042bb0ab50b026c
Signed-off-by: Yukti Pandey <yukti.pandey@samsung.com>
src/lib/elementary_tizen/elm_genlist.c

index 843887316f1d36ce9ef3ab7f287152c2c57dd224..a36a834f0540cac8ef5914e90609ed599ec5490e 100644 (file)
@@ -1532,8 +1532,21 @@ _elm_genlist_scroll_item_align_highlight_cb(Evas_Object *obj, void *data EINA_UN
 
    if (sd->aligned_item)
      {
+        //TIZEN_ONLY(20200414): Codes for safety check
+        Elm_Gen_Item *temp = sd->aligned_item;
+        //
+
         evas_object_smart_callback_call(WIDGET(sd->aligned_item), SIG_ALIGNED_ITEM_DETECTED, EO_OBJ(sd->aligned_item));
 
+        //TIZEN_ONLY(20200414): During callback application can trigger item update
+        //operations which can reset align item for doing self align operation again
+        if (temp != sd->aligned_item)
+          {
+             ERR("Item update operations are not allowed in aligned,item,detected callback");
+             return;
+          }
+        //
+
         if (sd->aligned_item->selected && sd->aligned_item == sd->selecting_item)
           {
              if (GL_IT(sd->aligned_item)->highlight_timer)
@@ -3264,6 +3277,10 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data
         // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario
         if (psd->wsd->aligned_item)
           {
+             //TIZEN_ONLY(20200414): During callback application can trigger item update
+             //operations which can reset align item for doing self align operation again
+             edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm");
+             //
              evas_object_smart_callback_call(WIDGET(psd->wsd->aligned_item), SIG_ALIGNED_ITEM_DETECTED, NULL);
              edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm");
              psd->wsd->aligned_item = NULL;