Abort on invalid format
There is no way we can guess the width of the argument when we cannot infer its type from the format specifier.master
parent
27c96dde77
commit
2da784ce8f
|
@ -826,10 +826,8 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
|
|||
}
|
||||
|
||||
fmt_invalid:
|
||||
/* Consume and discard vararg */
|
||||
va_arg(ap,void);
|
||||
va_end(_cpy);
|
||||
break;
|
||||
goto err;
|
||||
|
||||
fmt_valid:
|
||||
_l = (_p+1)-c;
|
||||
|
|
6
test.c
6
test.c
|
@ -162,11 +162,9 @@ static void test_format_commands(void) {
|
|||
len == 4+4+(8+2)+4+(3+2));
|
||||
free(cmd);
|
||||
|
||||
test("Format command with wrong printf format and extra interpolation: ");
|
||||
test("Format command with invalid printf format: ");
|
||||
len = redisFormatCommand(&cmd,"key:%08p %b",1234,"foo",3);
|
||||
test_cond(strncmp(cmd,"*2\r\n$6\r\nkey:8p\r\n$3\r\nfoo\r\n",len) == 0 &&
|
||||
len == 4+4+(6+2)+4+(3+2));
|
||||
free(cmd);
|
||||
test_cond(len == -1);
|
||||
|
||||
const char *argv[3];
|
||||
argv[0] = "SET";
|
||||
|
|
Loading…
Reference in New Issue