From 377472a6dd2c9bdff4d5667f5789c49aee2abb4c Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Fri, 7 Oct 2016 14:43:09 +0200 Subject: Added sol2 header only library as future replacement for luabridge (nw) --- 3rdparty/sol2/test_overflow.cpp | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 3rdparty/sol2/test_overflow.cpp (limited to '3rdparty/sol2/test_overflow.cpp') diff --git a/3rdparty/sol2/test_overflow.cpp b/3rdparty/sol2/test_overflow.cpp new file mode 100644 index 00000000000..68c11811a97 --- /dev/null +++ b/3rdparty/sol2/test_overflow.cpp @@ -0,0 +1,47 @@ +#define SOL_CHECK_ARGUMENTS + +#include +#include + + +TEST_CASE("issues/stack-overflow", "make sure various operations repeated don't trigger stack overflow") { + sol::state lua; + lua.script("t = {};t[0]=20"); + lua.script("lua_function=function(i)return i;end"); + + sol::function f = lua["lua_function"]; + std::string teststring = "testtext"; + REQUIRE_NOTHROW( + for (int i = 0; i < 1000000; ++i) { + std::string result = f(teststring); + if (result != teststring) throw std::logic_error("RIP"); + } + ); + sol::table t = lua["t"]; + int expected = 20; + REQUIRE_NOTHROW( + for (int i = 0; i < 1000000; ++i) { + int result = t[0]; + t.size(); + if (result != expected) + throw std::logic_error("RIP"); + } + ); +} + + +TEST_CASE("issues/stack-overflow-2", "make sure basic iterators clean up properly when they're not iterated through (e.g., with empty())") { + sol::state lua; + sol::table t = lua.create_table_with(1, "wut"); + int MAX = 50000; + auto fx = [&]() { + int a = 50; + for (int i = 0; i < MAX; ++i) { + if (t.empty()) { + a += 4; + } + a += 2; + } + }; + REQUIRE_NOTHROW(fx()); +} -- cgit v1.2.3-70-g09d2