diff options
Diffstat (limited to 'src/firejail/util.c')
-rw-r--r-- | src/firejail/util.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/firejail/util.c b/src/firejail/util.c index 4d1c94c25..559f7ee48 100644 --- a/src/firejail/util.c +++ b/src/firejail/util.c | |||
@@ -747,7 +747,7 @@ uid_t pid_get_uid(pid_t pid) { | |||
747 | } | 747 | } |
748 | 748 | ||
749 | 749 | ||
750 | void invalid_filename(const char *fname) { | 750 | void invalid_filename(const char *fname, int globbing) { |
751 | // EUID_ASSERT(); | 751 | // EUID_ASSERT(); |
752 | assert(fname); | 752 | assert(fname); |
753 | const char *ptr = fname; | 753 | const char *ptr = fname; |
@@ -763,10 +763,19 @@ void invalid_filename(const char *fname) { | |||
763 | return; | 763 | return; |
764 | 764 | ||
765 | int len = strlen(ptr); | 765 | int len = strlen(ptr); |
766 | // file globbing ('*') is allowed | 766 | |
767 | if (strcspn(ptr, "\\&!?\"'<>%^(){}[];,") != (size_t)len) { | 767 | if (globbing) { |
768 | fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr); | 768 | // file globbing ('*?[]') is allowed |
769 | exit(1); | 769 | if (strcspn(ptr, "\\&!\"'<>%^(){};,") != (size_t)len) { |
770 | fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr); | ||
771 | exit(1); | ||
772 | } | ||
773 | } | ||
774 | else { | ||
775 | if (strcspn(ptr, "\\&!?\"'<>%^(){};,*[]") != (size_t)len) { | ||
776 | fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr); | ||
777 | exit(1); | ||
778 | } | ||
770 | } | 779 | } |
771 | } | 780 | } |
772 | 781 | ||