diff options
author | Leah Neukirchen <leah@vuxu.org> | 2020-08-05 13:31:15 +0200 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2020-08-05 13:31:15 +0200 |
commit | fec4e06671b9d896faeed90925ebf3b03679b90e (patch) | |
tree | 769fba21692d1308255afe3e0c1744ca5721c7ec | |
parent | 7e9e75bd8848102d073f6b2beb45bced6349afe9 (diff) | |
download | mblaze-fec4e06671b9d896faeed90925ebf3b03679b90e.tar.gz mblaze-fec4e06671b9d896faeed90925ebf3b03679b90e.tar.xz mblaze-fec4e06671b9d896faeed90925ebf3b03679b90e.zip |
mmime: be more strict when detecting content types for the include syntax
Previously, shebangs would be (mis)detected: #!/bin/sh -e
-rw-r--r-- | mmime.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/mmime.c b/mmime.c index 79e1ef0..da7f179 100644 --- a/mmime.c +++ b/mmime.c @@ -1,6 +1,7 @@ #include <sys/stat.h> #include <sys/types.h> +#include <ctype.h> #include <dirent.h> #include <errno.h> #include <fcntl.h> @@ -356,6 +357,22 @@ force_qp: printf("\n"); } +static int +valid_content_type(char *s) +{ + int slash = 0; + + for (; *s; s++) + if (*s == '/') + slash++; + else if (isalnum(*s) || *s == '-' || *s == '+' || *s == '.') + ; /* ok */ + else + return 0; + + return slash == 1; +} + int gen_build() { @@ -400,7 +417,7 @@ gen_build() if (f) { char of = *f; *f = 0; - if (strchr(line, '/')) { + if (valid_content_type(line+1)) { printf("\n--%s\n", sep); if (line[read-1] == '\n') line[read-1] = 0; |