diff options
author | Mark Pulford <mark@kyne.com.au> | 2012-01-17 23:28:10 +1030 |
---|---|---|
committer | Mark Pulford <mark@kyne.com.au> | 2012-03-04 18:54:35 +1030 |
commit | 8faf8490e518315a8eff17a76b019debe48104b4 (patch) | |
tree | 3ab249cd8b9ce70ada61425d2749e0c3b3196f60 /tests | |
parent | e3b3da50f10096de12bb6b47156dd2c94c373a19 (diff) | |
download | lua-cjson-8faf8490e518315a8eff17a76b019debe48104b4.tar.gz lua-cjson-8faf8490e518315a8eff17a76b019debe48104b4.tar.bz2 lua-cjson-8faf8490e518315a8eff17a76b019debe48104b4.zip |
Fix Lua C function stack overflow during encoding
Ensure there are enough Lua stack slots available before descending into
another table during encoding. This fixes a segfault when encoding
deeply nested tables.
This bug wasn't noticed earlier due to the previous limit of 20 nested
tables.
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/test.lua | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/tests/test.lua b/tests/test.lua index a827e6a..4c00453 100755 --- a/tests/test.lua +++ b/tests/test.lua | |||
@@ -67,6 +67,12 @@ function load_testdata() | |||
67 | data.table_cycle = {} | 67 | data.table_cycle = {} |
68 | data.table_cycle[1] = data.table_cycle | 68 | data.table_cycle[1] = data.table_cycle |
69 | 69 | ||
70 | local big = {} | ||
71 | for i = 1, 1100 do | ||
72 | big = { { 10, false, true, cjson.null }, "string", a = big } | ||
73 | end | ||
74 | data.deeply_nested_data = big | ||
75 | |||
70 | return data | 76 | return data |
71 | end | 77 | end |
72 | 78 | ||
@@ -185,6 +191,9 @@ local cjson_tests = { | |||
185 | false, { "Cannot serialise, excessive nesting (6)" } }, | 191 | false, { "Cannot serialise, excessive nesting (6)" } }, |
186 | { "Set encode_max_depth(1000)", | 192 | { "Set encode_max_depth(1000)", |
187 | json.encode_max_depth, { 1000 }, true, { 1000 } }, | 193 | json.encode_max_depth, { 1000 }, true, { 1000 } }, |
194 | { "Encode deeply nested data [throw error]", | ||
195 | json.encode, { testdata.deeply_nested_data }, | ||
196 | false, { "Cannot serialise, excessive nesting (1001)" } }, | ||
188 | 197 | ||
189 | -- Test encoding simple types | 198 | -- Test encoding simple types |
190 | { "Encode null", | 199 | { "Encode null", |