Re: [Qemu-devel] [PATCH v2 1/3] add some tests for invalid JSON
On 05/24/2010 10:17 PM, Anthony Liguori wrote: On 05/24/2010 02:39 AM, Paolo Bonzini wrote: Signed-off-by: Paolo Bonzinipbonz...@redhat.com I think this series conflicts a bit with Luiz's series which I just pushed. Could you rebase against the latest? You didn't apply this one yet, at least I don't see it on qemu.git commit e546343ee0f3f904529d32c1a9a60f5baa181852 Author: Luiz Capitulino lcapitul...@redhat.com Date: Wed May 19 18:15:32 2010 -0300 json-lexer: Drop 'buf' QString supports adding a single char, 'buf' is unneeded. Signed-off-by: Luiz Capitulino lcapitul...@redhat.com I based my series on top of Luiz's, so it should apply. The above is the only commit that is actually required. I can ping the series once Luiz's patches are applied, so you can disregard it in the meanwhile. Paolo
Re: [Qemu-devel] [PATCH v2 1/3] add some tests for invalid JSON
On 05/25/2010 02:28 AM, Paolo Bonzini wrote: On 05/24/2010 10:17 PM, Anthony Liguori wrote: On 05/24/2010 02:39 AM, Paolo Bonzini wrote: Signed-off-by: Paolo Bonzinipbonz...@redhat.com I think this series conflicts a bit with Luiz's series which I just pushed. Could you rebase against the latest? You didn't apply this one yet, at least I don't see it on qemu.git commit e546343ee0f3f904529d32c1a9a60f5baa181852 Author: Luiz Capitulino lcapitul...@redhat.com Date: Wed May 19 18:15:32 2010 -0300 json-lexer: Drop 'buf' QString supports adding a single char, 'buf' is unneeded. Signed-off-by: Luiz Capitulino lcapitul...@redhat.com I based my series on top of Luiz's, so it should apply. Yeah, I confused myself into thinking that Luiz's series was more contentious than it is. Nevermind, your patches are fine on top of his. Regards, Anthony Liguori The above is the only commit that is actually required. I can ping the series once Luiz's patches are applied, so you can disregard it in the meanwhile. Paolo
[Qemu-devel] [PATCH v2 1/3] add some tests for invalid JSON
Signed-off-by: Paolo Bonzini pbonz...@redhat.com --- check-qjson.c | 98 - 1 files changed, 97 insertions(+), 1 deletions(-) diff --git a/check-qjson.c b/check-qjson.c index 109e777..a04e334 100644 --- a/check-qjson.c +++ b/check-qjson.c @@ -628,11 +628,90 @@ START_TEST(simple_varargs) } END_TEST +START_TEST(empty_input) +{ +QObject *obj = qobject_from_json(); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_string) +{ +QObject *obj = qobject_from_json(\abc); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_sq_string) +{ +QObject *obj = qobject_from_json('abc); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_escape) +{ +QObject *obj = qobject_from_json(\abc\\\); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_array) +{ +QObject *obj = qobject_from_json([32); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_array_comma) +{ +QObject *obj = qobject_from_json([32,); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(invalid_array_comma) +{ +QObject *obj = qobject_from_json([32,}); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_dict) +{ +QObject *obj = qobject_from_json({'abc':32); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_dict_comma) +{ +QObject *obj = qobject_from_json({'abc':32,); +fail_unless(obj == NULL); +} +END_TEST + +#if 0 +START_TEST(invalid_dict_comma) +{ +QObject *obj = qobject_from_json({'abc':32,}); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_literal) +{ +QObject *obj = qobject_from_json(nul); +fail_unless(obj == NULL); +} +END_TEST +#endif + static Suite *qjson_suite(void) { Suite *suite; TCase *string_literals, *number_literals, *keyword_literals; -TCase *dicts, *lists, *whitespace, *varargs; +TCase *dicts, *lists, *whitespace, *varargs, *errors; string_literals = tcase_create(String Literals); tcase_add_test(string_literals, simple_string); @@ -658,6 +737,22 @@ static Suite *qjson_suite(void) varargs = tcase_create(Varargs); tcase_add_test(varargs, simple_varargs); +errors = tcase_create(Invalid JSON); +tcase_add_test(errors, empty_input); +tcase_add_test(errors, unterminated_string); +tcase_add_test(errors, unterminated_escape); +tcase_add_test(errors, unterminated_sq_string); +tcase_add_test(errors, unterminated_array); +tcase_add_test(errors, unterminated_array_comma); +tcase_add_test(errors, invalid_array_comma); +tcase_add_test(errors, unterminated_dict); +tcase_add_test(errors, unterminated_dict_comma); +#if 0 +/* FIXME: this print parse error messages on stderr. */ +tcase_add_test(errors, invalid_dict_comma); +tcase_add_test(errors, unterminated_literal); +#endif + suite = suite_create(QJSON test-suite); suite_add_tcase(suite, string_literals); suite_add_tcase(suite, number_literals); @@ -666,6 +761,7 @@ static Suite *qjson_suite(void) suite_add_tcase(suite, lists); suite_add_tcase(suite, whitespace); suite_add_tcase(suite, varargs); +suite_add_tcase(suite, errors); return suite; } -- 1.6.6.1
Re: [Qemu-devel] [PATCH v2 1/3] add some tests for invalid JSON
On 05/24/2010 02:39 AM, Paolo Bonzini wrote: Signed-off-by: Paolo Bonzinipbonz...@redhat.com I think this series conflicts a bit with Luiz's series which I just pushed. Could you rebase against the latest? Regards, Anthony Liguori --- check-qjson.c | 98 - 1 files changed, 97 insertions(+), 1 deletions(-) diff --git a/check-qjson.c b/check-qjson.c index 109e777..a04e334 100644 --- a/check-qjson.c +++ b/check-qjson.c @@ -628,11 +628,90 @@ START_TEST(simple_varargs) } END_TEST +START_TEST(empty_input) +{ +QObject *obj = qobject_from_json(); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_string) +{ +QObject *obj = qobject_from_json(\abc); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_sq_string) +{ +QObject *obj = qobject_from_json('abc); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_escape) +{ +QObject *obj = qobject_from_json(\abc\\\); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_array) +{ +QObject *obj = qobject_from_json([32); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_array_comma) +{ +QObject *obj = qobject_from_json([32,); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(invalid_array_comma) +{ +QObject *obj = qobject_from_json([32,}); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_dict) +{ +QObject *obj = qobject_from_json({'abc':32); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_dict_comma) +{ +QObject *obj = qobject_from_json({'abc':32,); +fail_unless(obj == NULL); +} +END_TEST + +#if 0 +START_TEST(invalid_dict_comma) +{ +QObject *obj = qobject_from_json({'abc':32,}); +fail_unless(obj == NULL); +} +END_TEST + +START_TEST(unterminated_literal) +{ +QObject *obj = qobject_from_json(nul); +fail_unless(obj == NULL); +} +END_TEST +#endif + static Suite *qjson_suite(void) { Suite *suite; TCase *string_literals, *number_literals, *keyword_literals; -TCase *dicts, *lists, *whitespace, *varargs; +TCase *dicts, *lists, *whitespace, *varargs, *errors; string_literals = tcase_create(String Literals); tcase_add_test(string_literals, simple_string); @@ -658,6 +737,22 @@ static Suite *qjson_suite(void) varargs = tcase_create(Varargs); tcase_add_test(varargs, simple_varargs); +errors = tcase_create(Invalid JSON); +tcase_add_test(errors, empty_input); +tcase_add_test(errors, unterminated_string); +tcase_add_test(errors, unterminated_escape); +tcase_add_test(errors, unterminated_sq_string); +tcase_add_test(errors, unterminated_array); +tcase_add_test(errors, unterminated_array_comma); +tcase_add_test(errors, invalid_array_comma); +tcase_add_test(errors, unterminated_dict); +tcase_add_test(errors, unterminated_dict_comma); +#if 0 +/* FIXME: this print parse error messages on stderr. */ +tcase_add_test(errors, invalid_dict_comma); +tcase_add_test(errors, unterminated_literal); +#endif + suite = suite_create(QJSON test-suite); suite_add_tcase(suite, string_literals); suite_add_tcase(suite, number_literals); @@ -666,6 +761,7 @@ static Suite *qjson_suite(void) suite_add_tcase(suite, lists); suite_add_tcase(suite, whitespace); suite_add_tcase(suite, varargs); +suite_add_tcase(suite, errors); return suite; }