From 9eea382185f481b43bea852008edb686f8a2e3d4 Mon Sep 17 00:00:00 2001 From: gudzpoz Date: Fri, 28 Jun 2024 17:11:21 +0800 Subject: [PATCH] feat: always check stack size when popping --- .../src/main/java/party/iroiro/luajava/LuaTestSuite.java | 4 ++++ luajava/src/main/java/party/iroiro/luajava/AbstractLua.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/example/suite/src/main/java/party/iroiro/luajava/LuaTestSuite.java b/example/suite/src/main/java/party/iroiro/luajava/LuaTestSuite.java index 1a768c64..d80c75e5 100644 --- a/example/suite/src/main/java/party/iroiro/luajava/LuaTestSuite.java +++ b/example/suite/src/main/java/party/iroiro/luajava/LuaTestSuite.java @@ -684,6 +684,10 @@ private void testStackOperations() { try (Lua L = constructor.get()) { assertEquals(0, L.getTop()); assertEquals(0, L.newThread().getTop()); + assertThrowsLua(LuaError.MEMORY, () -> L.pop(-1), "invalid number of items to pop"); + assertThrowsLua(LuaError.MEMORY, () -> L.pop(10), "invalid number of items to pop"); + L.setTop(0); + assertThrowsLua(LuaError.MEMORY, () -> L.pop(1), "invalid number of items to pop"); } Lua sub = L.newThread(); diff --git a/luajava/src/main/java/party/iroiro/luajava/AbstractLua.java b/luajava/src/main/java/party/iroiro/luajava/AbstractLua.java index 3a5893ef..46a812a2 100644 --- a/luajava/src/main/java/party/iroiro/luajava/AbstractLua.java +++ b/luajava/src/main/java/party/iroiro/luajava/AbstractLua.java @@ -547,6 +547,12 @@ public void insert(int index) { @Override public void pop(int n) { + if (n < 0 || getTop() < n) { + throw new LuaException( + LuaException.LuaError.MEMORY, + "invalid number of items to pop" + ); + } C.lua_pop(L, n); }