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.
This commit is contained in:
Pieter Noordhuis 2011-07-09 15:05:53 +02:00
parent 27c96dde77
commit 2da784ce8f
2 changed files with 3 additions and 7 deletions

View File

@ -826,10 +826,8 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
} }
fmt_invalid: fmt_invalid:
/* Consume and discard vararg */
va_arg(ap,void);
va_end(_cpy); va_end(_cpy);
break; goto err;
fmt_valid: fmt_valid:
_l = (_p+1)-c; _l = (_p+1)-c;

6
test.c
View File

@ -162,11 +162,9 @@ static void test_format_commands(void) {
len == 4+4+(8+2)+4+(3+2)); len == 4+4+(8+2)+4+(3+2));
free(cmd); 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); 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 && test_cond(len == -1);
len == 4+4+(6+2)+4+(3+2));
free(cmd);
const char *argv[3]; const char *argv[3];
argv[0] = "SET"; argv[0] = "SET";