-rw-r--r-- | cache.c | 16 | ||||
-rw-r--r-- | cgit.c | 2 | ||||
-rw-r--r-- | cgit.h | 1 |
3 files changed, 18 insertions, 1 deletions
@@ -12,2 +12,18 @@ const int NOLOCK = -1; +char *cache_safe_filename(const char *unsafe) +{ + static char buf[PATH_MAX]; + char *s = buf; + char c; + + while(unsafe && (c = *unsafe++) != 0) { + if (c == '/' || c == ' ' || c == '&' || c == '|' || + c == '>' || c == '<' || c == '.') + c = '_'; + *s++ = c; + } + *s = '\0'; + return buf; +} + int cache_exist(struct cacheitem *item) @@ -24,3 +24,3 @@ static void cgit_prepare_cache(struct cacheitem *item) cgit_query_repo, cgit_query_page, - cgit_querystring)); + cache_safe_filename(cgit_querystring))); if (cgit_query_has_symref) @@ -89,2 +89,3 @@ extern struct commitinfo *cgit_parse_commit(struct commit *commit); +extern char *cache_safe_filename(const char *unsafe); extern int cache_lock(struct cacheitem *item); |