summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrouzier <rouzier@gmail.com>2017-10-13 13:20:45 -0400
committerGitHub <noreply@github.com>2017-10-13 13:20:45 -0400
commit6eb996540c662832370ddaac25484c4cbbca4e7a (patch)
tree8251e6b3027a7c872bb555f21585b53d4ea5ab38
parent2bf8c2c1300da1909cc8c8c35d13e46bcf59aa31 (diff)
downloadredis-6eb996540c662832370ddaac25484c4cbbca4e7a.tar.gz
Fix file descriptor leak and error handling
-rw-r--r--src/redis-check-rdb.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/redis-check-rdb.c b/src/redis-check-rdb.c
index 4027536e5..71ac50d03 100644
--- a/src/redis-check-rdb.c
+++ b/src/redis-check-rdb.c
@@ -193,12 +193,12 @@ int redis_check_rdb(char *rdbfilename, FILE *fp) {
buf[9] = '\0';
if (memcmp(buf,"REDIS",5) != 0) {
rdbCheckError("Wrong signature trying to load DB from file");
- return 1;
+ goto err;
}
rdbver = atoi(buf+5);
if (rdbver < 1 || rdbver > RDB_VERSION) {
rdbCheckError("Can't handle RDB format version %d",rdbver);
- return 1;
+ goto err;
}
startLoading(fp);
@@ -270,7 +270,7 @@ int redis_check_rdb(char *rdbfilename, FILE *fp) {
} else {
if (!rdbIsObjectType(type)) {
rdbCheckError("Invalid object type: %d", type);
- return 1;
+ goto err;
}
rdbstate.key_type = type;
}
@@ -307,6 +307,7 @@ int redis_check_rdb(char *rdbfilename, FILE *fp) {
rdbCheckInfo("RDB file was saved with checksum disabled: no check performed.");
} else if (cksum != expected) {
rdbCheckError("RDB CRC error");
+ goto err;
} else {
rdbCheckInfo("Checksum OK");
}
@@ -321,6 +322,8 @@ eoferr: /* unexpected end of file is handled here with a fatal exit */
} else {
rdbCheckError("Unexpected EOF reading RDB file");
}
+err:
+ if (closefile) fclose(fp);
return 1;
}