summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPieter Noordhuis <pcnoordhuis@gmail.com>2011-07-09 15:05:53 +0200
committerPieter Noordhuis <pcnoordhuis@gmail.com>2011-07-09 15:08:45 +0200
commit2da784ce8f911f0eb1ef83fbcf3e2ce2d7529d15 (patch)
tree09ab0159ea3800e08882faf6663b803ffb644f9a
parent27c96dde77e9a36602cc3c5040375b081652a4bf (diff)
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.
-rw-r--r--hiredis.c4
-rw-r--r--test.c6
2 files changed, 3 insertions, 7 deletions
diff --git a/hiredis.c b/hiredis.c
index 83218cd..dfee705 100644
--- a/hiredis.c
+++ b/hiredis.c
@@ -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;
diff --git a/test.c b/test.c
index d3a3dbd..0dae70a 100644
--- a/test.c
+++ b/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";