Commit 60c448b5 authored by Matt Stancliff's avatar Matt Stancliff Committed by antirez
Browse files

Cluster: Fix segfault if cluster config corrupt

This commit adds a size check after initial config
line parsing to make sure we have *at least* 8 arguments
per line.

Also, instead of asserting for cluster->myself, we just test
and error out normally (since the error does a hard exit anyway).

Closes #1597
parent 879e18b7
...@@ -168,6 +168,9 @@ int clusterLoadConfig(char *filename) { ...@@ -168,6 +168,9 @@ int clusterLoadConfig(char *filename) {
continue; continue;
} }
/* Regular config lines have at least eight fields */
if (argc < 8) goto fmterr;
/* Create this node if it does not exist */ /* Create this node if it does not exist */
n = clusterLookupNode(argv[0]); n = clusterLookupNode(argv[0]);
if (!n) { if (!n) {
...@@ -268,11 +271,12 @@ int clusterLoadConfig(char *filename) { ...@@ -268,11 +271,12 @@ int clusterLoadConfig(char *filename) {
sdsfreesplitres(argv,argc); sdsfreesplitres(argv,argc);
} }
/* Config sanity check */
if (server.cluster->myself == NULL) goto fmterr;
zfree(line); zfree(line);
fclose(fp); fclose(fp);
/* Config sanity check */
redisAssert(server.cluster->myself != NULL);
redisLog(REDIS_NOTICE,"Node configuration loaded, I'm %.40s", myself->name); redisLog(REDIS_NOTICE,"Node configuration loaded, I'm %.40s", myself->name);
/* Something that should never happen: currentEpoch smaller than /* Something that should never happen: currentEpoch smaller than
...@@ -287,7 +291,7 @@ fmterr: ...@@ -287,7 +291,7 @@ fmterr:
redisLog(REDIS_WARNING, redisLog(REDIS_WARNING,
"Unrecoverable error: corrupted cluster config file."); "Unrecoverable error: corrupted cluster config file.");
zfree(line); zfree(line);
fclose(fp); if (fp) fclose(fp);
exit(1); exit(1);
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment