From 0e1be5347bc30f10f6a7e2190e6c1cb13304f465 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 13 Feb 2013 18:33:33 +0100 Subject: [PATCH] PSYNC: More robust handling of unexpected reply to PSYNC. --- src/replication.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/replication.c b/src/replication.c index 409d5a71..52ff1a74 100644 --- a/src/replication.c +++ b/src/replication.c @@ -956,6 +956,14 @@ int slaveTryPartialResynchronization(int fd) { if (!runid || !offset || (offset-runid-1) != REDIS_RUN_ID_SIZE) { redisLog(REDIS_WARNING, "Master replied with wrong +FULLRESYNC syntax."); + sdsfree(reply); + /* This is an unexpected condition, actually the +FULLRESYNC + * reply means that the master supports PSYNC, but the reply + * format seems wrong. To stay safe we blank the master + * runid to make sure next PSYNCs will fail, and return + * NOT_SUPPORTED to the caller to use SYNC instead. */ + memset(server.repl_master_runid,0,REDIS_RUN_ID_SIZE+1); + return PSYNC_NOT_SUPPORTED; } else { memcpy(server.repl_master_runid, runid, offset-runid-1); server.repl_master_runid[REDIS_RUN_ID_SIZE] = '\0';