diff options
-rw-r--r-- | lua_cjson.c | 5 | ||||
-rwxr-xr-x | tests/test.lua | 7 |
2 files changed, 8 insertions, 4 deletions
diff --git a/lua_cjson.c b/lua_cjson.c index 4a2ce0f..b64ed62 100644 --- a/lua_cjson.c +++ b/lua_cjson.c | |||
@@ -1034,7 +1034,7 @@ static void json_next_number_token(json_parse_t *json, json_token_t *token) | |||
1034 | */ | 1034 | */ |
1035 | static void json_next_token(json_parse_t *json, json_token_t *token) | 1035 | static void json_next_token(json_parse_t *json, json_token_t *token) |
1036 | { | 1036 | { |
1037 | json_token_type_t *ch2token = json->cfg->ch2token; | 1037 | const json_token_type_t *ch2token = json->cfg->ch2token; |
1038 | int ch; | 1038 | int ch; |
1039 | 1039 | ||
1040 | /* Eat whitespace. */ | 1040 | /* Eat whitespace. */ |
@@ -1149,7 +1149,8 @@ static void json_decode_descend(lua_State *l, json_parse_t *json, int slots) | |||
1149 | } | 1149 | } |
1150 | 1150 | ||
1151 | strbuf_free(json->tmp); | 1151 | strbuf_free(json->tmp); |
1152 | luaL_error(l, "Too many nested data structures"); | 1152 | luaL_error(l, "Found too many nested data structures (%d) at character %d", |
1153 | json->current_depth, json->ptr - json->data); | ||
1153 | } | 1154 | } |
1154 | 1155 | ||
1155 | static void json_parse_object_context(lua_State *l, json_parse_t *json) | 1156 | static void json_parse_object_context(lua_State *l, json_parse_t *json) |
diff --git a/tests/test.lua b/tests/test.lua index 4c00453..8bb5b95 100755 --- a/tests/test.lua +++ b/tests/test.lua | |||
@@ -162,15 +162,18 @@ local cjson_tests = { | |||
162 | true, { {{{{{ "nested" }}}}} } }, | 162 | true, { {{{{{ "nested" }}}}} } }, |
163 | { "Decode array over nested limit [throw error]", | 163 | { "Decode array over nested limit [throw error]", |
164 | json.decode, { '[[[[[[ "nested" ]]]]]]' }, | 164 | json.decode, { '[[[[[[ "nested" ]]]]]]' }, |
165 | false, { "Too many nested data structures" } }, | 165 | false, { "Found too many nested data structures (6) at character 6" } }, |
166 | { "Decode object at nested limit", | 166 | { "Decode object at nested limit", |
167 | json.decode, { '{"a":{"b":{"c":{"d":{"e":"nested"}}}}}' }, | 167 | json.decode, { '{"a":{"b":{"c":{"d":{"e":"nested"}}}}}' }, |
168 | true, { {a={b={c={d={e="nested"}}}}} } }, | 168 | true, { {a={b={c={d={e="nested"}}}}} } }, |
169 | { "Decode object over nested limit [throw error]", | 169 | { "Decode object over nested limit [throw error]", |
170 | json.decode, { '{"a":{"b":{"c":{"d":{"e":{"f":"nested"}}}}}}' }, | 170 | json.decode, { '{"a":{"b":{"c":{"d":{"e":{"f":"nested"}}}}}}' }, |
171 | false, { "Too many nested data structures" } }, | 171 | false, { "Found too many nested data structures (6) at character 26" } }, |
172 | { "Set decode_max_depth(1000)", | 172 | { "Set decode_max_depth(1000)", |
173 | json.decode_max_depth, { 1000 }, true, { 1000 } }, | 173 | json.decode_max_depth, { 1000 }, true, { 1000 } }, |
174 | { "Decode deeply nested array [throw error]", | ||
175 | json.decode, { string.rep("[", 1100) .. '1100' .. string.rep("]", 1100)}, | ||
176 | false, { "Found too many nested data structures (1001) at character 1001" } }, | ||
174 | 177 | ||
175 | -- Test encoding nested tables | 178 | -- Test encoding nested tables |
176 | { "Set encode_max_depth(5)", | 179 | { "Set encode_max_depth(5)", |