Issue #15: add a way to set a JSON_TOKENER_STRICT flag to forbid commas at the end of arrays and objects.
diff --git a/json_tokener.c b/json_tokener.c
index 6d50bc2..b2b47f9 100644
--- a/json_tokener.c
+++ b/json_tokener.c
@@ -624,8 +624,15 @@
}
break;
+ case json_tokener_state_array_after_sep:
case json_tokener_state_array:
if(c == ']') {
+ if (state == json_tokener_state_array_after_sep &&
+ (tok->flags & JSON_TOKENER_STRICT))
+ {
+ tok->err = json_tokener_error_parse_unexpected;
+ goto out;
+ }
saved_state = json_tokener_state_finish;
state = json_tokener_state_eatws;
} else {
@@ -651,7 +658,7 @@
saved_state = json_tokener_state_finish;
state = json_tokener_state_eatws;
} else if(c == ',') {
- saved_state = json_tokener_state_array;
+ saved_state = json_tokener_state_array_after_sep;
state = json_tokener_state_eatws;
} else {
tok->err = json_tokener_error_parse_array;
@@ -660,7 +667,14 @@
break;
case json_tokener_state_object_field_start:
+ case json_tokener_state_object_field_start_after_sep:
if(c == '}') {
+ if (state == json_tokener_state_object_field_start_after_sep &&
+ (tok->flags & JSON_TOKENER_STRICT))
+ {
+ tok->err = json_tokener_error_parse_unexpected;
+ goto out;
+ }
saved_state = json_tokener_state_finish;
state = json_tokener_state_eatws;
} else if (c == '"' || c == '\'') {
@@ -731,7 +745,7 @@
saved_state = json_tokener_state_finish;
state = json_tokener_state_eatws;
} else if(c == ',') {
- saved_state = json_tokener_state_object_field_start;
+ saved_state = json_tokener_state_object_field_start_after_sep;
state = json_tokener_state_eatws;
} else {
tok->err = json_tokener_error_parse_object_value_sep;
@@ -771,3 +785,8 @@
json_tokener_errors[tok->err], tok->char_offset);
return NULL;
}
+
+void json_tokener_set_flags(struct json_tokener *tok, int flags)
+{
+ tok->flags = flags;
+}