diff options
author | Jaeun Choi <jaeun12.choi@samsung.com> | 2014-03-03 18:10:47 +0900 |
---|---|---|
committer | Daniel Juyung Seo <seojuyung2@gmail.com> | 2014-03-03 18:12:34 +0900 |
commit | ec8ef6518d483207a5e4a065f63fe7277cb92829 (patch) | |
tree | 907afb26f51930fea572e978771b810076a8ea0e | |
parent | e935bad365e7e7056b57412ee84f052fce2a3dc4 (diff) | |
download | elementary-ec8ef6518d483207a5e4a065f63fe7277cb92829.tar.gz |
diskselector: Fix segmentation fault
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
-rw-r--r-- | src/lib/elm_diskselector.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/lib/elm_diskselector.c b/src/lib/elm_diskselector.c index cf3c097e2..8a00fffc1 100644 --- a/src/lib/elm_diskselector.c +++ b/src/lib/elm_diskselector.c @@ -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); |