summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2013-07-02 12:14:28 +0200
committerantirez <antirez@gmail.com>2013-07-02 12:14:28 +0200
commit1b10522a08284d563b2876e9deb827dbc6697742 (patch)
tree86237dfa73f7496c390708d752de42ddc088828d
parent6978aeb3bf2c44bdfe2422847a52f22d61ed034b (diff)
downloadredis-1b10522a08284d563b2876e9deb827dbc6697742.tar.gz
Only allow basenames for dbfilename and appendfilename.
This fixes issue #1094.
-rw-r--r--src/config.c12
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")) {