Re: [PATCH 1/2] Test if JSON parser fails on invalid input

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Nov 05, 2013 at 03:59:55PM +0100, Ján Tomko wrote:
> ---
>  tests/jsontest.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/tests/jsontest.c b/tests/jsontest.c
> index 6add816..808a2ea 100644
> --- a/tests/jsontest.c
> +++ b/tests/jsontest.c
> @@ -145,6 +145,10 @@ mymain(void)
>  #define DO_TEST_PARSE(name, doc)                \
>      DO_TEST_FULL(name, FromString, doc, NULL, true)
>  
> +#define DO_TEST_PARSE_FAIL(name, doc)           \
> +    DO_TEST_FULL(name, FromString, doc, NULL, false)
> +
> +

You're testing virJSONValueFromString() here ...

>      DO_TEST_PARSE("Simple", "{\"return\": {}, \"id\": \"libvirt-1\"}");
>      DO_TEST_PARSE("NotSoSimple", "{\"QMP\": {\"version\": {\"qemu\":"
>              "{\"micro\": 91, \"minor\": 13, \"major\": 0},"
> @@ -188,6 +192,15 @@ mymain(void)
>      DO_TEST_FULL("add and remove", AddRemove,
>                   "[ 1 ]", NULL, false);
>  
> +
> +    DO_TEST_PARSE_FAIL("nothing", "");
> +    DO_TEST_PARSE_FAIL("number with garbage", "2345b45");
> +    DO_TEST_PARSE_FAIL("float with garbage", "0.0314159ee+100");
> +    DO_TEST_PARSE_FAIL("unterminated string", "\"The meaning of lif");

... that not only cannot parse these, but it can't even parse proper
numbers (e.g. "12345", "1.2e+34"), because it expects object (array or
map).  You can do two things with this.  Either create new
testJSON...() which will test numbers only (requires v2) or squash
this in (which makes it work properly and shows that also):

diff --git a/tests/jsontest.c b/tests/jsontest.c
index e806b6f..a7ee2ef 100644
--- a/tests/jsontest.c
+++ b/tests/jsontest.c
@@ -193,10 +193,18 @@ mymain(void)
                  "[ 1 ]", NULL, false);


+    DO_TEST_PARSE("almost nothing", "[]");
     DO_TEST_PARSE_FAIL("nothing", "");
-    DO_TEST_PARSE_FAIL("number with garbage", "2345b45");
-    DO_TEST_PARSE_FAIL("float with garbage", "0.0314159ee+100");
-    DO_TEST_PARSE_FAIL("unterminated string", "\"The meaning of lif");
+
+    DO_TEST_PARSE("number without garbage", "[ 234545 ]");
+    DO_TEST_PARSE_FAIL("number with garbage", "[ 2345b45 ]");
+
+    DO_TEST_PARSE("float without garbage", "[ 0.0314159e+100 ]");
+    DO_TEST_PARSE_FAIL("float with garbage", "[ 0.0314159ee+100 ]");
+
+    DO_TEST_PARSE("string", "[ \"The meaning of life\" ]");
+    DO_TEST_PARSE_FAIL("unterminated string", "[ \"The meaning of lif ]");
+
     DO_TEST_PARSE_FAIL("unterminated array", "[ 1, 2, 3");
     DO_TEST_PARSE_FAIL("object with numeric keys", "{ 1:1, 2:1, 3:2 }");
     DO_TEST_PARSE_FAIL("unterminated object", "{ \"1\":1, \"2\":1, \"3\":2");
--

ACK if you want to use the second option.

Martin

Attachment: signature.asc
Description: Digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]