From 19f7d5cf0bcfc3563b69c001eb6f45b8d04c2d9e Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Sat, 12 Sep 2020 14:31:01 +0100 Subject: [PATCH] proc_view: defense --- src/bin/ui/ui_process_view.c | 43 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/bin/ui/ui_process_view.c b/src/bin/ui/ui_process_view.c index cb7b513..8fd6765 100644 --- a/src/bin/ui/ui_process_view.c +++ b/src/bin/ui/ui_process_view.c @@ -326,12 +326,17 @@ _thread_info_set(Ui_Process *ui, Proc_Info *proc) EINA_LIST_FREE(threads, t) { - Thread_Info *prev = elm_object_item_data_get(it); - if (prev) - _item_del(prev, NULL); - elm_object_item_data_set(it, t); - elm_genlist_item_update(it); - it = elm_genlist_item_next_get(it); + if (!it) + _item_del(t, NULL); + else + { + Thread_Info *prev = elm_object_item_data_get(it); + if (prev) + _item_del(prev, NULL); + elm_object_item_data_set(it, t); + elm_genlist_item_update(it); + it = elm_genlist_item_next_get(it); + } } eina_lock_release(&_lock); } @@ -929,7 +934,7 @@ _btn_info_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ui_Process *ui; - char *cmd, *t; + Eina_List *lines = NULL; ui = data; @@ -938,16 +943,16 @@ _btn_info_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, if (ui->info_init) return; - cmd = t = strdup(ui->selected_cmd); - while (!isspace(*t)) t++; - if (isspace(*t)) *t = '\0'; + if (ui->selected_cmd && ui->selected_cmd[0] && !strchr(ui->selected_cmd, ' ')) + lines =_exe_response(eina_slstr_printf("man %s | col -b", ui->selected_cmd)); - Eina_List *lines = - _exe_response(eina_slstr_printf("man %s | col -b", cmd)); - - free(cmd); - - if (lines) + if (!lines) + { + elm_object_text_set(ui->entry_info, + eina_slstr_printf(_("No documentation found for %s."), + ui->selected_cmd)); + } + else { char *line; int n = 1; @@ -966,12 +971,6 @@ _btn_info_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, elm_object_text_set(ui->entry_info, eina_strbuf_string_get(buf)); eina_strbuf_free(buf); } - else - { - elm_object_text_set(ui->entry_info, - eina_slstr_printf(_("No documentation found for %s."), - ui->selected_cmd)); - } ui->info_init = EINA_TRUE; }