aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMark Pulford <mark@kyne.com.au>2012-01-17 23:28:10 +1030
committerMark Pulford <mark@kyne.com.au>2012-03-04 18:54:35 +1030
commit8faf8490e518315a8eff17a76b019debe48104b4 (patch)
tree3ab249cd8b9ce70ada61425d2749e0c3b3196f60 /tests
parente3b3da50f10096de12bb6b47156dd2c94c373a19 (diff)
downloadlua-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-xtests/test.lua9
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
71end 77end
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",