diff options
author | smitsohu <smitsohu@gmail.com> | 2020-01-17 19:10:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-17 19:10:40 +0100 |
commit | db16ce56f8b1c559dfac360600ef69d046682ed1 (patch) | |
tree | df9359cc0ded72b32227e40ca95d75116761134a /src | |
parent | print rejected character in invalid filenames (diff) | |
download | firejail-db16ce56f8b1c559dfac360600ef69d046682ed1.tar.gz firejail-db16ce56f8b1c559dfac360600ef69d046682ed1.tar.zst firejail-db16ce56f8b1c559dfac360600ef69d046682ed1.zip |
reject control characters in file names
Diffstat (limited to 'src')
-rw-r--r-- | src/firejail/macros.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/firejail/macros.c b/src/firejail/macros.c index 874180ad1..ccd201956 100644 --- a/src/firejail/macros.c +++ b/src/firejail/macros.c | |||
@@ -275,12 +275,19 @@ void invalid_filename(const char *fname, int globbing) { | |||
275 | return; | 275 | return; |
276 | } | 276 | } |
277 | 277 | ||
278 | size_t i; | ||
279 | for (i = 0; ptr[i]; i++) { | ||
280 | if (iscntrl((unsigned char) ptr[i])) { | ||
281 | fprintf(stderr, "Error: invalid filename: contains a control character\n"); | ||
282 | exit(1); | ||
283 | } | ||
284 | } | ||
285 | |||
278 | char *reject; | 286 | char *reject; |
279 | if (globbing) | 287 | if (globbing) |
280 | reject = "\\&!\"'<>%^(){};,"; // file globbing ('*?[]') is allowed | 288 | reject = "\\&!\"'<>%^(){};,"; // file globbing ('*?[]') is allowed |
281 | else | 289 | else |
282 | reject = "\\&!?\"'<>%^(){};,*[]"; | 290 | reject = "\\&!?\"'<>%^(){};,*[]"; |
283 | |||
284 | char *c = strpbrk(ptr, reject); | 291 | char *c = strpbrk(ptr, reject); |
285 | if (c) { | 292 | if (c) { |
286 | fprintf(stderr, "Error: \"%s\" is an invalid filename: rejected character: \"%c\"\n", ptr, *c); | 293 | fprintf(stderr, "Error: \"%s\" is an invalid filename: rejected character: \"%c\"\n", ptr, *c); |