Commit 4780fe78 authored by WuYunlong's avatar WuYunlong Committed by antirez
Browse files

Fix potential memory leak of clusterLoadConfig().

parent f3b77510
...@@ -157,7 +157,10 @@ int clusterLoadConfig(char *filename) { ...@@ -157,7 +157,10 @@ int clusterLoadConfig(char *filename) {
} }
/* Regular config lines have at least eight fields */ /* Regular config lines have at least eight fields */
if (argc < 8) goto fmterr; if (argc < 8) {
sdsfreesplitres(argv,argc);
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]);
...@@ -166,7 +169,10 @@ int clusterLoadConfig(char *filename) { ...@@ -166,7 +169,10 @@ int clusterLoadConfig(char *filename) {
clusterAddNode(n); clusterAddNode(n);
} }
/* Address and port */ /* Address and port */
if ((p = strrchr(argv[1],':')) == NULL) goto fmterr; if ((p = strrchr(argv[1],':')) == NULL) {
sdsfreesplitres(argv,argc);
goto fmterr;
}
*p = '\0'; *p = '\0';
memcpy(n->ip,argv[1],strlen(argv[1])+1); memcpy(n->ip,argv[1],strlen(argv[1])+1);
char *port = p+1; char *port = p+1;
...@@ -247,7 +253,10 @@ int clusterLoadConfig(char *filename) { ...@@ -247,7 +253,10 @@ int clusterLoadConfig(char *filename) {
*p = '\0'; *p = '\0';
direction = p[1]; /* Either '>' or '<' */ direction = p[1]; /* Either '>' or '<' */
slot = atoi(argv[j]+1); slot = atoi(argv[j]+1);
if (slot < 0 || slot >= CLUSTER_SLOTS) goto fmterr; if (slot < 0 || slot >= CLUSTER_SLOTS) {
sdsfreesplitres(argv,argc);
goto fmterr;
}
p += 3; p += 3;
cn = clusterLookupNode(p); cn = clusterLookupNode(p);
if (!cn) { if (!cn) {
...@@ -267,8 +276,14 @@ int clusterLoadConfig(char *filename) { ...@@ -267,8 +276,14 @@ int clusterLoadConfig(char *filename) {
} else { } else {
start = stop = atoi(argv[j]); start = stop = atoi(argv[j]);
} }
if (start < 0 || start >= CLUSTER_SLOTS) goto fmterr; if (start < 0 || start >= CLUSTER_SLOTS) {
if (stop < 0 || stop >= CLUSTER_SLOTS) goto fmterr; sdsfreesplitres(argv,argc);
goto fmterr;
}
if (stop < 0 || stop >= CLUSTER_SLOTS) {
sdsfreesplitres(argv,argc);
goto fmterr;
}
while(start <= stop) clusterAddSlot(n, start++); while(start <= stop) clusterAddSlot(n, start++);
} }
......
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