json-c/94.patch

89 lines
2.5 KiB
Diff
Raw Normal View History

2013-08-24 08:13:01 +00:00
From a07ef3d19763094ab35cc009657c85bcbb9dd9ae Mon Sep 17 00:00:00 2001
From: Remi Collet <fedora@famillecollet.com>
Date: Tue, 6 Aug 2013 10:41:14 +0200
Subject: [PATCH 1/3] no single-quote string in strict mode
---
json_tokener.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/json_tokener.c b/json_tokener.c
index a6924a1..45390ac 100644
--- a/json_tokener.c
+++ b/json_tokener.c
@@ -293,8 +293,13 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
printbuf_reset(tok->pb);
tok->st_pos = 0;
goto redo_char;
- case '"':
case '\'':
+ if (tok->flags & JSON_TOKENER_STRICT) {
+ /* in STRICT mode only double-quote are allowed */
+ tok->err = json_tokener_error_parse_unexpected;
+ goto out;
+ }
+ case '"':
state = json_tokener_state_string;
printbuf_reset(tok->pb);
tok->quote_char = c;
--
1.8.1.6
From 87fa32dfe013d961ced5252ffacef0beefc8f62f Mon Sep 17 00:00:00 2001
From: Remi Collet <fedora@famillecollet.com>
Date: Wed, 21 Aug 2013 15:41:40 +0200
Subject: [PATCH 2/3] no comment in strict mode
---
json_tokener.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/json_tokener.c b/json_tokener.c
index 45390ac..7ce53ca 100644
--- a/json_tokener.c
+++ b/json_tokener.c
@@ -265,7 +265,7 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
if ((!ADVANCE_CHAR(str, tok)) || (!PEEK_CHAR(c, tok)))
goto out;
}
- if(c == '/') {
+ if(c == '/' && !(tok->flags & JSON_TOKENER_STRICT)) {
printbuf_reset(tok->pb);
printbuf_memappend_fast(tok->pb, &c, 1);
state = json_tokener_state_comment_start;
--
1.8.1.6
From 4039f91cab283b483094dbe59202818bb1733d66 Mon Sep 17 00:00:00 2001
From: Remi Collet <fedora@famillecollet.com>
Date: Fri, 23 Aug 2013 13:40:01 +0200
Subject: [PATCH 3/3] trailing char not allowed in strict mode
---
json_tokener.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/json_tokener.c b/json_tokener.c
index 7ce53ca..def6e10 100644
--- a/json_tokener.c
+++ b/json_tokener.c
@@ -769,6 +769,13 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
} /* while(POP_CHAR) */
out:
+ if (c &&
+ (state == json_tokener_state_finish) &&
+ (tok->depth == 0) &&
+ (tok->flags & JSON_TOKENER_STRICT)) {
+ /* unexpected char after JSON data */
+ tok->err = json_tokener_error_parse_unexpected;
+ }
if (!c) { /* We hit an eof char (0) */
if(state != json_tokener_state_finish &&
saved_state != json_tokener_state_finish)
--
1.8.1.6