aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorLibravatar layderv <20249311+layderv@users.noreply.github.com>2023-01-24 00:29:07 -0500
committerLibravatar layderv <20249311+layderv@users.noreply.github.com>2023-02-06 00:35:18 -0500
commit74e94458e77270b99f49fc0d95cea05b881411c0 (patch)
treef70d45976b471e95be970e8b88c539c29cb77ee9 /src/lib
parentEscape control characters (diff)
downloadfirejail-74e94458e77270b99f49fc0d95cea05b881411c0.tar.gz
firejail-74e94458e77270b99f49fc0d95cea05b881411c0.tar.zst
firejail-74e94458e77270b99f49fc0d95cea05b881411c0.zip
Style changes
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/common.c99
-rw-r--r--src/lib/pid.c12
2 files changed, 57 insertions, 54 deletions
diff --git a/src/lib/common.c b/src/lib/common.c
index 338e9316c..44ff2ab98 100644
--- a/src/lib/common.c
+++ b/src/lib/common.c
@@ -404,59 +404,62 @@ 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).
407char *escape_cntrl_chars(const char *str) { 409char *escape_cntrl_chars(const char *str) {
408 if (str) { 410 if (str == NULL)
409 unsigned int cntrl_chars = 0; 411 return NULL;
410 const char *c = str; 412
411 while (*c) { 413 unsigned int cntrl_chars = 0;
412 switch (*c++) { 414 const char *c = str;
413 case '\b': 415 while (*c) {
414 case '\a': 416 switch (*c++) {
415 case '\e': 417 case '\b':
416 case '\f': 418 case '\a':
417 case '\n': 419 case '\e':
418 case '\r': 420 case '\f':
419 case '\t': 421 case '\n':
420 case '\v': 422 case '\r':
421 case '\"': 423 case '\t':
422 case '\'': 424 case '\v':
423 case '\?': 425 case '\"':
424 case '\\': 426 case '\'':
425 ++cntrl_chars; 427 case '\?':
426 default: break; 428 case '\\':
427 } 429 ++cntrl_chars;
430 default:
431 break;
428 } 432 }
429 char *rv = malloc(strlen(str) + cntrl_chars + 1); 433 }
430 char *ptr = rv; 434 char *ptr, *rv = malloc(strlen(str) + cntrl_chars + 1);
431 if (!rv) 435 if (!rv)
432 errExit("malloc"); 436 errExit("malloc");
433 c = str; 437 ptr = rv;
434 while (*c) { 438 c = str;
435 if (iscntrl(*c)) { 439 while (*c) {
436 *ptr++ = '\\'; 440 if (iscntrl(*c)) {
437 switch (*c) { 441 *ptr++ = '\\';
438 case '\b': *ptr++ = 'b'; break; 442 switch (*c) {
439 case '\a': *ptr++ = 'a'; break; 443 case '\b': *ptr++ = 'b'; break;
440 case '\e': *ptr++ = 'e'; break; 444 case '\a': *ptr++ = 'a'; break;
441 case '\f': *ptr++ = 'f'; break; 445 case '\e': *ptr++ = 'e'; break;
442 case '\n': *ptr++ = 'n'; break; 446 case '\f': *ptr++ = 'f'; break;
443 case '\r': *ptr++ = 'r'; break; 447 case '\n': *ptr++ = 'n'; break;
444 case '\t': *ptr++ = 't'; break; 448 case '\r': *ptr++ = 'r'; break;
445 case '\v': *ptr++ = 'v'; break; 449 case '\t': *ptr++ = 't'; break;
446 case '\"': *ptr++ = '\"'; break; 450 case '\v': *ptr++ = 'v'; break;
447 case '\'': *ptr++ = '\''; break; 451 case '\"': *ptr++ = '\"'; break;
448 case '\?': *ptr++ = '?'; break; 452 case '\'': *ptr++ = '\''; break;
449 case '\\': *ptr++ = '\\'; break; 453 case '\?': *ptr++ = '?'; break;
450 } 454 case '\\': *ptr++ = '\\'; break;
451 } else {
452 *ptr++ = *c;
453 } 455 }
454 c++; 456 } else {
457 *ptr++ = *c;
455 } 458 }
456 *ptr = '\0'; 459 c++;
457 return rv;
458 } 460 }
459 return NULL; 461 *ptr = '\0';
462 return rv;
460} 463}
461 464
462int has_cntrl_chars(const char *str) { 465int has_cntrl_chars(const char *str) {
diff --git a/src/lib/pid.c b/src/lib/pid.c
index cb9686648..2e73e85f6 100644
--- a/src/lib/pid.c
+++ b/src/lib/pid.c
@@ -197,10 +197,10 @@ 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_escape = escape_cntrl_chars(cmd); 200 char *cmd_escaped = escape_cntrl_chars(cmd);
201 if (cmd_escape) { 201 if (cmd_escaped) {
202 free(cmd); 202 free(cmd);
203 cmd = cmd_escape; 203 cmd = cmd_escaped;
204 } 204 }
205 205
206 // extract sandbox name - pid == index 206 // extract sandbox name - pid == index
@@ -230,11 +230,11 @@ static void print_elem(unsigned index, int nowrap) {
230 } 230 }
231 free(fname); 231 free(fname);
232 232
233 char *sandbox_name_escape = escape_cntrl_chars(sandbox_name); 233 char *sandbox_name_escaped = escape_cntrl_chars(sandbox_name);
234 if (sandbox_name_escape) { 234 if (sandbox_name_escaped) {
235 if (sandbox_name_allocated) 235 if (sandbox_name_allocated)
236 free(sandbox_name_allocated); 236 free(sandbox_name_allocated);
237 sandbox_name = sandbox_name_escape; 237 sandbox_name = sandbox_name_escaped;
238 sandbox_name_allocated = sandbox_name; 238 sandbox_name_allocated = sandbox_name;
239 } 239 }
240 240