diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/firejail/macros.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/firejail/macros.c b/src/firejail/macros.c index 9ed6b9715..874180ad1 100644 --- a/src/firejail/macros.c +++ b/src/firejail/macros.c | |||
@@ -275,19 +275,15 @@ void invalid_filename(const char *fname, int globbing) { | |||
275 | return; | 275 | return; |
276 | } | 276 | } |
277 | 277 | ||
278 | int len = strlen(ptr); | 278 | char *reject; |
279 | 279 | if (globbing) | |
280 | if (globbing) { | 280 | reject = "\\&!\"'<>%^(){};,"; // file globbing ('*?[]') is allowed |
281 | // file globbing ('*?[]') is allowed | 281 | else |
282 | if (strcspn(ptr, "\\&!\"'<>%^(){};,") != (size_t)len) { | 282 | reject = "\\&!?\"'<>%^(){};,*[]"; |
283 | fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr); | 283 | |
284 | exit(1); | 284 | char *c = strpbrk(ptr, reject); |
285 | } | 285 | if (c) { |
286 | } | 286 | fprintf(stderr, "Error: \"%s\" is an invalid filename: rejected character: \"%c\"\n", ptr, *c); |
287 | else { | 287 | exit(1); |
288 | if (strcspn(ptr, "\\&!?\"'<>%^(){};,*[]") != (size_t)len) { | ||
289 | fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr); | ||
290 | exit(1); | ||
291 | } | ||
292 | } | 288 | } |
293 | } | 289 | } |