json: Fix error message for corner case in json_string_unescape().
authorBen Pfaff <blp@nicira.com>
Wed, 25 Feb 2015 16:46:02 +0000 (08:46 -0800)
committerBen Pfaff <blp@nicira.com>
Fri, 29 May 2015 22:19:00 +0000 (15:19 -0700)
The error message should not include bytes already copied from the input
string.

Found by inspection.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Alex Wang <alexw@nicira.com>
lib/json.c
tests/ovsdb-data.at

index 9c819d7..696b5d4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2010, 2011, 2012, 2014 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2014, 2015 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -830,6 +830,7 @@ json_string_unescape(const char *in, size_t in_len, char **outp)
              * lexer will never pass in a string that ends in a single
              * backslash, but json_string_unescape() has other callers that
              * are not as careful.*/
+            ds_clear(&out);
             ds_put_cstr(&out, "quoted string may not end with backslash");
             goto exit;
         }
index 51d32e7..f44d6d4 100644 (file)
@@ -286,6 +286,14 @@ OVSDB_CHECK_NEGATIVE([quotes must be balanced],
   [parse-atom-strings '[["string"]]' '"asdf'],
   ["asdf: missing quote at end of quoted string])
 
+OVSDB_CHECK_NEGATIVE([quoted string must not contain unescaped quote],
+  [parse-atom-strings '[["string"]]' '"as"df"'],
+  ["as"df": quoted string may not include unescaped "])
+
+OVSDB_CHECK_NEGATIVE([quoted string must not end with backslash],
+  [parse-atom-strings '[["string"]]' '"asdf\"'],
+  ["asdf\": quoted string may not end with backslash])
+
 OVSDB_CHECK_NEGATIVE([uuids must be valid],
   [parse-atom-strings '[["uuid"]]' '1234-5678'],
   ["1234-5678" is not a valid UUID])