diff options
author | antirez <antirez@gmail.com> | 2013-07-02 12:14:28 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2013-07-02 12:14:28 +0200 |
commit | 1b10522a08284d563b2876e9deb827dbc6697742 (patch) | |
tree | 86237dfa73f7496c390708d752de42ddc088828d | |
parent | 6978aeb3bf2c44bdfe2422847a52f22d61ed034b (diff) | |
download | redis-1b10522a08284d563b2876e9deb827dbc6697742.tar.gz |
Only allow basenames for dbfilename and appendfilename.
This fixes issue #1094.
-rw-r--r-- | src/config.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c index ae1c7abc3..01bcafb7a 100644 --- a/src/config.c +++ b/src/config.c @@ -306,6 +306,10 @@ void loadServerConfigFromString(char *config) { } server.aof_state = yes ? REDIS_AOF_ON : REDIS_AOF_OFF; } else if (!strcasecmp(argv[0],"appendfilename") && argc == 2) { + if (!pathIsBaseName(argv[1])) { + err = "appendfilename can't be a path, just a filename"; + goto loaderr; + } zfree(server.aof_filename); server.aof_filename = zstrdup(argv[1]); } else if (!strcasecmp(argv[0],"no-appendfsync-on-rewrite") @@ -352,6 +356,10 @@ void loadServerConfigFromString(char *config) { zfree(server.pidfile); server.pidfile = zstrdup(argv[1]); } else if (!strcasecmp(argv[0],"dbfilename") && argc == 2) { + if (!pathIsBaseName(argv[1])) { + err = "dbfilename can't be a path, just a filename"; + goto loaderr; + } zfree(server.rdb_filename); server.rdb_filename = zstrdup(argv[1]); } else if (!strcasecmp(argv[0],"hash-max-ziplist-entries") && argc == 2) { @@ -540,6 +548,10 @@ void configSetCommand(redisClient *c) { o = c->argv[3]; if (!strcasecmp(c->argv[2]->ptr,"dbfilename")) { + if (!pathIsBaseName(o->ptr)) { + addReplyError(c, "dbfilename can't be a path, just a filename"); + return; + } zfree(server.rdb_filename); server.rdb_filename = zstrdup(o->ptr); } else if (!strcasecmp(c->argv[2]->ptr,"requirepass")) { |