Tests use files from readdir() as input, but do no sanitation of the
names, and therefore things like editor temp files can cause havoc
with the HTTP request parser.
The solution is to trap dodgy characters in the filenames, and ignore
those files. Initially, trap HTTP's "unsafe" and "reserved" characters.
Signed-off-by: Phil Carmody <phil@dovecot.fi>
/*
* Test files
*/
+static const char unsafe_characters[] = "\"<>#%{}|\\^~[]` ;/?:@=&";
static ARRAY_TYPE(const_string) files;
static pool_t files_pool;
errno = 0;
if ((dp=readdir(dirp)) == NULL)
break;
- if (*dp->d_name == '.')
+ if (*dp->d_name == '.' ||
+ dp->d_name[strcspn(dp->d_name, unsafe_characters)] != '\0')
continue;
file = t_abspath_to(dp->d_name, path);