From 8830f43b7dab79ee6acea72f6028c5f2f770ed41 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 6 Dec 2012 08:15:08 +0000 Subject: [PATCH] elementary: improve stability/safety of quicklaunch. SVN revision: 80308 --- legacy/elementary/ChangeLog | 4 ++++ legacy/elementary/NEWS | 1 + legacy/elementary/src/bin/quicklaunch.c | 20 ++++++++++++-------- legacy/elementary/src/lib/elm_main.c | 10 +++++++--- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index b9bafe7b60..51f6e844f0 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -767,3 +767,7 @@ * Fix naviframe to not send hide signals even before item doens't created yet. + +2012-12-06 Cedric Bail + + * Fix possible segv in elm_quicklaunch infrastructure. diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index fd5aef3045..1c0467d1dd 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -76,6 +76,7 @@ Fixes: * Fix possible divide by zero in els_scroller animator. * Fix uninitialized data path in elm_flip, elm_gesture_layer, elm_interface_scrollable, els_scroller. + * Fix possible segv in elm_quicklaunch infrastructure. Removals: diff --git a/legacy/elementary/src/bin/quicklaunch.c b/legacy/elementary/src/bin/quicklaunch.c index 0f0be70397..e84612bc08 100644 --- a/legacy/elementary/src/bin/quicklaunch.c +++ b/legacy/elementary/src/bin/quicklaunch.c @@ -114,19 +114,23 @@ handle_run(int fd, unsigned long bytes) argc = ((unsigned long *)(buf))[0]; envnum = ((unsigned long *)(buf))[1]; + + if (argc <= 0) + { + CRITICAL("no executable specified"); + close(fd); + return; + } - if (argc > 0) argv = alloca(argc * sizeof(char *)); + argv = alloca(argc * sizeof(char *)); if (envnum > 0) envir = alloca(envnum * sizeof(char *)); off = ((unsigned long *)(buf))[2 + argc + envnum] - sizeof(unsigned long); cwd = (char *)(buf + off); - - if (argv) + + for (i = 0; i < argc; i++) { - for (i = 0; i < argc; i++) - { - off = ((unsigned long *)(buf))[2 + i] - sizeof(unsigned long); - argv[i] = (char *)(buf + off); - } + off = ((unsigned long *)(buf))[2 + i] - sizeof(unsigned long); + argv[i] = (char *)(buf + off); } #ifdef HAVE_ENVIRON diff --git a/legacy/elementary/src/lib/elm_main.c b/legacy/elementary/src/lib/elm_main.c index fa254f1d34..12330369c0 100644 --- a/legacy/elementary/src/lib/elm_main.c +++ b/legacy/elementary/src/lib/elm_main.c @@ -692,11 +692,15 @@ static int (*qr_main)(int argc, char **argv) = NULL; EAPI Eina_Bool -elm_quicklaunch_prepare(int argc __UNUSED__, - char **argv) +elm_quicklaunch_prepare(int argc, + char **argv) { #ifdef HAVE_FORK - char *exe = elm_quicklaunch_exe_path_get(argv[0]); + char *exe; + + if (argc <= 0 || argv == NULL) return EINA_FALSE; + + exe = elm_quicklaunch_exe_path_get(argv[0]); if (!exe) { ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);