diff options
| author | Lars Hjemli <hjemli@gmail.com> | 2007-01-12 00:24:35 +0100 | 
|---|---|---|
| committer | Lars Hjemli <hjemli@gmail.com> | 2007-01-12 00:24:35 +0100 | 
| commit | 2c2047ff67a1e0053f95776e5079e432f69cea54 (patch) | |
| tree | 0572bd25c3f7ef43494664cca750c940c9e93ef1 | |
| parent | Move cache_prepare() to cgit (diff) | |
| download | cgit-2c2047ff67a1e0053f95776e5079e432f69cea54.tar.gz cgit-2c2047ff67a1e0053f95776e5079e432f69cea54.tar.bz2 cgit-2c2047ff67a1e0053f95776e5079e432f69cea54.zip | |
Remove troublesome chars from cachefile names
Add a funtion cache_safe_filename() which replaces possibly bad filename
characters with '_'.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
| -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
| @@ -10,6 +10,22 @@  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)  {  	if (stat(item->name, &item->st)) { @@ -22,7 +22,7 @@ static void cgit_prepare_cache(struct cacheitem *item)  	} else {  		item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root,   			   cgit_query_repo, cgit_query_page,  -			   cgit_querystring)); +			   cache_safe_filename(cgit_querystring)));  		if (cgit_query_has_symref)  			item->ttl = cgit_cache_dynamic_ttl;  		else if (cgit_query_has_sha1) @@ -87,6 +87,7 @@ extern int cgit_read_config(const char *filename, configfn fn);  extern int cgit_parse_query(char *txt, configfn fn);  extern struct commitinfo *cgit_parse_commit(struct commit *commit); +extern char *cache_safe_filename(const char *unsafe);  extern int cache_lock(struct cacheitem *item);  extern int cache_unlock(struct cacheitem *item);  extern int cache_cancel_lock(struct cacheitem *item); | 
