diff options
-rw-r--r-- | README | 1 | ||||
-rw-r--r-- | src/firejail/cmdline.c | 12 | ||||
-rw-r--r-- | src/firejail/main.c | 8 |
3 files changed, 19 insertions, 2 deletions
@@ -38,6 +38,7 @@ Aleksey Manevich (https://github.com/manevich) | |||
38 | - spliting up cmdline.c | 38 | - spliting up cmdline.c |
39 | - Busybox support | 39 | - Busybox support |
40 | - X11 support rewrite | 40 | - X11 support rewrite |
41 | - gether shell selection code in one place | ||
41 | Franco (nextime) Lanza (https://github.com/nextime) | 42 | Franco (nextime) Lanza (https://github.com/nextime) |
42 | - added --private-template | 43 | - added --private-template |
43 | xee5ch (https://github.com/xee5ch) | 44 | 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 @@ | |||
26 | #include <assert.h> | 26 | #include <assert.h> |
27 | #include <errno.h> | 27 | #include <errno.h> |
28 | 28 | ||
29 | int cmdline_length(int argc, char **argv, int index) { | 29 | static int cmdline_length(int argc, char **argv, int index) { |
30 | assert(index != -1); | ||
31 | |||
30 | unsigned i,j; | 32 | unsigned i,j; |
31 | int len = 0; | 33 | int len = 0; |
32 | unsigned argcnt = argc - index; | 34 | unsigned argcnt = argc - index; |
@@ -62,7 +64,9 @@ int cmdline_length(int argc, char **argv, int index) { | |||
62 | return len; | 64 | return len; |
63 | } | 65 | } |
64 | 66 | ||
65 | void quote_cmdline(char *command_line, char *window_title, int len, int argc, char **argv, int index) { | 67 | static void quote_cmdline(char *command_line, char *window_title, int len, int argc, char **argv, int index) { |
68 | assert(index != -1); | ||
69 | |||
66 | unsigned i,j; | 70 | unsigned i,j; |
67 | unsigned argcnt = argc - index; | 71 | unsigned argcnt = argc - index; |
68 | bool in_quotes = false; | 72 | bool in_quotes = false; |
@@ -131,6 +135,10 @@ void quote_cmdline(char *command_line, char *window_title, int len, int argc, ch | |||
131 | } | 135 | } |
132 | 136 | ||
133 | void build_cmdline(char **command_line, char **window_title, int argc, char **argv, int index) { | 137 | void build_cmdline(char **command_line, char **window_title, int argc, char **argv, int index) { |
138 | // index == -1 could happen if we have --shell=none and no program was specified | ||
139 | // the program should exit with an error before entering this function | ||
140 | assert(index != -1); | ||
141 | |||
134 | int len = cmdline_length(argc, argv, index); | 142 | int len = cmdline_length(argc, argv, index); |
135 | if (len > ARG_MAX) { | 143 | if (len > ARG_MAX) { |
136 | errno = E2BIG; | 144 | 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) { | |||
1974 | break; | 1974 | break; |
1975 | } | 1975 | } |
1976 | } | 1976 | } |
1977 | |||
1978 | // prog_index could still be -1 if no program was specified | ||
1979 | if (prog_index == -1 && arg_shell_none) { | ||
1980 | fprintf(stderr, "shell=none configured, but no program specified\n"); | ||
1981 | exit(1); | ||
1982 | } | ||
1977 | 1983 | ||
1978 | // check trace configuration | 1984 | // check trace configuration |
1979 | if (arg_trace && arg_tracelog) { | 1985 | if (arg_trace && arg_tracelog) { |
@@ -2027,7 +2033,9 @@ int main(int argc, char **argv) { | |||
2027 | cfg.window_title = "appimage"; | 2033 | cfg.window_title = "appimage"; |
2028 | } | 2034 | } |
2029 | else { | 2035 | else { |
2036 | printf("here %d\n", __LINE__); | ||
2030 | build_cmdline(&cfg.command_line, &cfg.window_title, argc, argv, prog_index); | 2037 | build_cmdline(&cfg.command_line, &cfg.window_title, argc, argv, prog_index); |
2038 | printf("here %d\n", __LINE__); | ||
2031 | } | 2039 | } |
2032 | /* else { | 2040 | /* else { |
2033 | fprintf(stderr, "Error: command must be specified when --shell=none used.\n"); | 2041 | fprintf(stderr, "Error: command must be specified when --shell=none used.\n"); |