From c85c8d2c7f23ab03276fcd7ae052a18a68e05d16 Mon Sep 17 00:00:00 2001 From: netblue30 Date: Sun, 14 Aug 2016 10:06:13 -0400 Subject: gether shell selection code in one place --- README | 1 + src/firejail/cmdline.c | 12 ++++++++++-- src/firejail/main.c | 8 ++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/README b/README index 292d9a522..c843610a0 100644 --- a/README +++ b/README @@ -38,6 +38,7 @@ Aleksey Manevich (https://github.com/manevich) - spliting up cmdline.c - Busybox support - X11 support rewrite + - gether shell selection code in one place Franco (nextime) Lanza (https://github.com/nextime) - added --private-template xee5ch (https://github.com/xee5ch) diff --git a/src/firejail/cmdline.c b/src/firejail/cmdline.c index 48cbaffb7..cadf4795d 100644 --- a/src/firejail/cmdline.c +++ b/src/firejail/cmdline.c @@ -26,7 +26,9 @@ #include #include -int cmdline_length(int argc, char **argv, int index) { +static int cmdline_length(int argc, char **argv, int index) { + assert(index != -1); + unsigned i,j; int len = 0; unsigned argcnt = argc - index; @@ -62,7 +64,9 @@ int cmdline_length(int argc, char **argv, int index) { return len; } -void quote_cmdline(char *command_line, char *window_title, int len, int argc, char **argv, int index) { +static void quote_cmdline(char *command_line, char *window_title, int len, int argc, char **argv, int index) { + assert(index != -1); + unsigned i,j; unsigned argcnt = argc - index; bool in_quotes = false; @@ -131,6 +135,10 @@ void quote_cmdline(char *command_line, char *window_title, int len, int argc, ch } void build_cmdline(char **command_line, char **window_title, int argc, char **argv, int index) { + // index == -1 could happen if we have --shell=none and no program was specified + // the program should exit with an error before entering this function + assert(index != -1); + int len = cmdline_length(argc, argv, index); if (len > ARG_MAX) { errno = E2BIG; diff --git a/src/firejail/main.c b/src/firejail/main.c index 7cc9f9bf6..49018860a 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c @@ -1974,6 +1974,12 @@ int main(int argc, char **argv) { break; } } + + // prog_index could still be -1 if no program was specified + if (prog_index == -1 && arg_shell_none) { + fprintf(stderr, "shell=none configured, but no program specified\n"); + exit(1); + } // check trace configuration if (arg_trace && arg_tracelog) { @@ -2027,7 +2033,9 @@ int main(int argc, char **argv) { cfg.window_title = "appimage"; } else { +printf("here %d\n", __LINE__); build_cmdline(&cfg.command_line, &cfg.window_title, argc, argv, prog_index); +printf("here %d\n", __LINE__); } /* else { fprintf(stderr, "Error: command must be specified when --shell=none used.\n"); -- cgit v1.2.3-70-g09d2