diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/common.c | 60 | ||||
-rw-r--r-- | src/lib/errno.c | 2 | ||||
-rw-r--r-- | src/lib/firejail_user.c | 2 | ||||
-rw-r--r-- | src/lib/ldd_utils.c | 2 | ||||
-rw-r--r-- | src/lib/pid.c | 10 | ||||
-rw-r--r-- | src/lib/syscall.c | 2 |
6 files changed, 71 insertions, 7 deletions
diff --git a/src/lib/common.c b/src/lib/common.c index 111366782..eee19c731 100644 --- a/src/lib/common.c +++ b/src/lib/common.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2014-2022 Firejail Authors | 2 | * Copyright (C) 2014-2023 Firejail Authors |
3 | * | 3 | * |
4 | * This file is part of firejail project | 4 | * This file is part of firejail project |
5 | * | 5 | * |
@@ -404,6 +404,64 @@ char *replace_cntrl_chars(const char *str, char c) { | |||
404 | return rv; | 404 | return rv; |
405 | } | 405 | } |
406 | 406 | ||
407 | // Replaces each control character in str with an escape sequence, such as by | ||
408 | // replacing '\n' (0x0a) with "\\n" (0x5c6e). | ||
409 | char *escape_cntrl_chars(const char *str) { | ||
410 | if (str == NULL) | ||
411 | return NULL; | ||
412 | |||
413 | unsigned int cntrl_chars = 0; | ||
414 | const char *c = str; | ||
415 | while (*c) { | ||
416 | switch (*c++) { | ||
417 | case '\b': | ||
418 | case '\a': | ||
419 | case '\e': | ||
420 | case '\f': | ||
421 | case '\n': | ||
422 | case '\r': | ||
423 | case '\t': | ||
424 | case '\v': | ||
425 | case '\"': | ||
426 | case '\'': | ||
427 | case '\?': | ||
428 | case '\\': | ||
429 | ++cntrl_chars; | ||
430 | default: | ||
431 | break; | ||
432 | } | ||
433 | } | ||
434 | char *ptr, *rv = malloc(strlen(str) + cntrl_chars + 1); | ||
435 | if (!rv) | ||
436 | errExit("malloc"); | ||
437 | ptr = rv; | ||
438 | c = str; | ||
439 | while (*c) { | ||
440 | if (iscntrl(*c)) { | ||
441 | *ptr++ = '\\'; | ||
442 | switch (*c) { | ||
443 | case '\b': *ptr++ = 'b'; break; | ||
444 | case '\a': *ptr++ = 'a'; break; | ||
445 | case '\e': *ptr++ = 'e'; break; | ||
446 | case '\f': *ptr++ = 'f'; break; | ||
447 | case '\n': *ptr++ = 'n'; break; | ||
448 | case '\r': *ptr++ = 'r'; break; | ||
449 | case '\t': *ptr++ = 't'; break; | ||
450 | case '\v': *ptr++ = 'v'; break; | ||
451 | case '\"': *ptr++ = '\"'; break; | ||
452 | case '\'': *ptr++ = '\''; break; | ||
453 | case '\?': *ptr++ = '?'; break; | ||
454 | case '\\': *ptr++ = '\\'; break; | ||
455 | } | ||
456 | } else { | ||
457 | *ptr++ = *c; | ||
458 | } | ||
459 | c++; | ||
460 | } | ||
461 | *ptr = '\0'; | ||
462 | return rv; | ||
463 | } | ||
464 | |||
407 | int has_cntrl_chars(const char *str) { | 465 | int has_cntrl_chars(const char *str) { |
408 | assert(str); | 466 | assert(str); |
409 | 467 | ||
diff --git a/src/lib/errno.c b/src/lib/errno.c index 99b028e27..8103dec3b 100644 --- a/src/lib/errno.c +++ b/src/lib/errno.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2014-2022 Firejail Authors | 2 | * Copyright (C) 2014-2023 Firejail Authors |
3 | * | 3 | * |
4 | * This file is part of firejail project | 4 | * This file is part of firejail project |
5 | * | 5 | * |
diff --git a/src/lib/firejail_user.c b/src/lib/firejail_user.c index bf338ee43..dc6361422 100644 --- a/src/lib/firejail_user.c +++ b/src/lib/firejail_user.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2014-2022 Firejail Authors | 2 | * Copyright (C) 2014-2023 Firejail Authors |
3 | * | 3 | * |
4 | * This file is part of firejail project | 4 | * This file is part of firejail project |
5 | * | 5 | * |
diff --git a/src/lib/ldd_utils.c b/src/lib/ldd_utils.c index a50b759c3..39a548887 100644 --- a/src/lib/ldd_utils.c +++ b/src/lib/ldd_utils.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2014-2022 Firejail Authors | 2 | * Copyright (C) 2014-2023 Firejail Authors |
3 | * | 3 | * |
4 | * This file is part of firejail project | 4 | * This file is part of firejail project |
5 | * | 5 | * |
diff --git a/src/lib/pid.c b/src/lib/pid.c index 5e9b20c94..e76f66910 100644 --- a/src/lib/pid.c +++ b/src/lib/pid.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2014-2022 Firejail Authors | 2 | * Copyright (C) 2014-2023 Firejail Authors |
3 | * | 3 | * |
4 | * This file is part of firejail project | 4 | * This file is part of firejail project |
5 | * | 5 | * |
@@ -197,6 +197,12 @@ static void print_elem(unsigned index, int nowrap) { | |||
197 | char *user = pid_get_user_name(uid); | 197 | char *user = pid_get_user_name(uid); |
198 | char *user_allocated = user; | 198 | char *user_allocated = user; |
199 | 199 | ||
200 | char *cmd_escaped = escape_cntrl_chars(cmd); | ||
201 | if (cmd_escaped) { | ||
202 | free(cmd); | ||
203 | cmd = cmd_escaped; | ||
204 | } | ||
205 | |||
200 | // extract sandbox name - pid == index | 206 | // extract sandbox name - pid == index |
201 | char *sandbox_name = ""; | 207 | char *sandbox_name = ""; |
202 | char *sandbox_name_allocated = NULL; | 208 | char *sandbox_name_allocated = NULL; |
@@ -224,7 +230,7 @@ static void print_elem(unsigned index, int nowrap) { | |||
224 | } | 230 | } |
225 | free(fname); | 231 | free(fname); |
226 | 232 | ||
227 | if (user ==NULL) | 233 | if (user == NULL) |
228 | user = ""; | 234 | user = ""; |
229 | if (cmd) { | 235 | if (cmd) { |
230 | if (col < 4 || nowrap) | 236 | if (col < 4 || nowrap) |
diff --git a/src/lib/syscall.c b/src/lib/syscall.c index 29cf6318f..ca7c61c8e 100644 --- a/src/lib/syscall.c +++ b/src/lib/syscall.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2014-2022 Firejail Authors | 2 | * Copyright (C) 2014-2023 Firejail Authors |
3 | * | 3 | * |
4 | * This file is part of firejail project | 4 | * This file is part of firejail project |
5 | * | 5 | * |