Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
27dbec2a
Commit
27dbec2a
authored
Jul 01, 2016
by
antirez
Browse files
In Redis RDB check: more details in error reportings.
parent
41f30047
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/rdb.c
View file @
27dbec2a
...
@@ -45,22 +45,29 @@
...
@@ -45,22 +45,29 @@
#define RDB_LOAD_ENC (1<<0)
#define RDB_LOAD_ENC (1<<0)
#define RDB_LOAD_PLAIN (1<<1)
#define RDB_LOAD_PLAIN (1<<1)
#define rdbExitReportCorruptRDB(
reason
) rdbCheckThenExit(
reason, __LINE__);
#define rdbExitReportCorruptRDB(
...
) rdbCheckThenExit(
__LINE__,__VA_ARGS__)
extern int rdbCheckMode;
extern int rdbCheckMode;
void rdbCheckError(const char *fmt, ...);
void rdbCheckError(const char *fmt, ...);
void rdbCheckSetError(const char *fmt, ...);
void rdbCheckSetError(const char *fmt, ...);
void rdbCheckThenExit(char *reason, int where) {
void rdbCheckThenExit(int linenum, char *reason, ...) {
if (!rdbCheckMode) {
va_list ap;
serverLog(LL_WARNING, "Corrupt RDB detected at rdb.c:%d (%s). "
char msg[1024];
"Running 'redis-check-rdb %s'",
int len;
where, reason, server.rdb_filename);
len = snprintf(msg,sizeof(msg),
"Internal error in RDB reading function at rdb.c:%d -> ", linenum);
va_start(ap,reason);
vsnprintf(msg+len,sizeof(msg)-len,reason,ap);
va_end(ap);
if (!rdbCheckMode) {
serverLog(LL_WARNING, "%s", msg);
char *argv[2] = {"",server.rdb_filename};
char *argv[2] = {"",server.rdb_filename};
redis_check_rdb_main(2,argv);
redis_check_rdb_main(2,argv);
} else {
} else {
rdbCheckError("Internal error in RDB reading function at rdb.c:%d (%s)",
rdbCheckError("%s",msg);
where, reason);
}
}
exit(1);
exit(1);
}
}
...
@@ -152,10 +159,14 @@ uint32_t rdbLoadLen(rio *rdb, int *isencoded) {
...
@@ -152,10 +159,14 @@ uint32_t rdbLoadLen(rio *rdb, int *isencoded) {
/* Read a 14 bit len. */
/* Read a 14 bit len. */
if (rioRead(rdb,buf+1,1) == 0) return RDB_LENERR;
if (rioRead(rdb,buf+1,1) == 0) return RDB_LENERR;
return ((buf[0]&0x3F)<<8)|buf[1];
return ((buf[0]&0x3F)<<8)|buf[1];
} else {
} else
if (type == RDB_32BITLEN)
{
/* Read a 32 bit len. */
/* Read a 32 bit len. */
if (rioRead(rdb,&len,4) == 0) return RDB_LENERR;
if (rioRead(rdb,&len,4) == 0) return RDB_LENERR;
return ntohl(len);
return ntohl(len);
} else {
rdbExitReportCorruptRDB(
"Unknown length encoding %d in rdbLoadLen()",type);
return -1; /* Never reached. */
}
}
}
}
...
@@ -209,7 +220,7 @@ void *rdbLoadIntegerObject(rio *rdb, int enctype, int flags) {
...
@@ -209,7 +220,7 @@ void *rdbLoadIntegerObject(rio *rdb, int enctype, int flags) {
val = (int32_t)v;
val = (int32_t)v;
} else {
} else {
val = 0; /* anti-warning */
val = 0; /* anti-warning */
rdbExitReportCorruptRDB("Unknown RDB integer encoding type
"
);
rdbExitReportCorruptRDB("Unknown RDB integer encoding type
%d",enctype
);
}
}
if (plain) {
if (plain) {
char buf[LONG_STR_SIZE], *p;
char buf[LONG_STR_SIZE], *p;
...
@@ -419,7 +430,7 @@ void *rdbGenericLoadStringObject(rio *rdb, int flags) {
...
@@ -419,7 +430,7 @@ void *rdbGenericLoadStringObject(rio *rdb, int flags) {
case RDB_ENC_LZF:
case RDB_ENC_LZF:
return rdbLoadLzfStringObject(rdb,flags);
return rdbLoadLzfStringObject(rdb,flags);
default:
default:
rdbExitReportCorruptRDB("Unknown RDB encoding type
"
);
rdbExitReportCorruptRDB("Unknown RDB
string
encoding type
%d",len
);
}
}
}
}
...
@@ -1205,11 +1216,11 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) {
...
@@ -1205,11 +1216,11 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) {
hashTypeConvert(o, OBJ_ENCODING_HT);
hashTypeConvert(o, OBJ_ENCODING_HT);
break;
break;
default:
default:
rdbExitReportCorruptRDB("Unknown encoding
"
);
rdbExitReportCorruptRDB("Unknown
RDB
encoding
type %d",rdbtype
);
break;
break;
}
}
} else {
} else {
rdbExitReportCorruptRDB("Unknown
object type"
);
rdbExitReportCorruptRDB("Unknown
RDB encoding type %d",rdbtype
);
}
}
return o;
return o;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment