diskselector: Fix segmentation fault
authorJaeun Choi <jaeun12.choi@samsung.com>
Mon, 3 Mar 2014 09:10:47 +0000 (18:10 +0900)
committerDaniel Juyung Seo <seojuyung2@gmail.com>
Mon, 3 Mar 2014 09:20:50 +0000 (18:20 +0900)
Summary:
The code was missing null check of sd->items list.
If the deleted item is the only item of the list,
sd->items becomes empty after removing it.
In that case, sd->selected_item should be set as NULL.
@fix
Fixes T988

Test Plan: execute diskselector_example_02 > click "Delete item" button 3 times

Reviewers: raster, seoz

Reviewed By: seoz

CC: seoz
Maniphest Tasks: T988

Differential Revision: https://phab.enlightenment.org/D595

src/lib/elm_diskselector.c

index cf3c097e2bb0aaf03660ed83ed9fd6cb5eef0435..8a00fffc10d4051727ff12c72949e5ea7ca2e4a4 100644 (file)
@@ -357,14 +357,19 @@ _item_del_pre_hook(Elm_Object_Item *item)
 
    if (sd->selected_item == it)
      {
-        dit = (Elm_Diskselector_Item *)eina_list_nth(sd->items, 0);
+        if (sd->items)
+          {
+             dit = (Elm_Diskselector_Item *)eina_list_nth(sd->items, 0);
 
-        if (dit != it)
-          sd->selected_item = dit;
-        else
-          sd->selected_item = eina_list_nth(sd->items, 1);
+             if (dit != it)
+               sd->selected_item = dit;
+             else
+               sd->selected_item = eina_list_nth(sd->items, 1);
 
-        _selected_item_indicate(sd->selected_item);
+             _selected_item_indicate(sd->selected_item);
+          }
+        else
+          sd->selected_item = NULL;
      }
 
    _item_del(it);