diff --git a/src/main/java/org/squiddev/cobalt/lib/StringMatch.java b/src/main/java/org/squiddev/cobalt/lib/StringMatch.java index acbf78cb..706e2d55 100644 --- a/src/main/java/org/squiddev/cobalt/lib/StringMatch.java +++ b/src/main/java/org/squiddev/cobalt/lib/StringMatch.java @@ -673,7 +673,7 @@ int end_capture(int soff, int poff) throws LuaError { int match_capture(int soff, int l) throws LuaError { l = check_capture(l); int len = clen[l]; - if ((s.length() - soff) >= len && + if (len >= 0 && (s.length() - soff) >= len && LuaString.equals(s, cinit[l], s, soff, len)) { return soff + len; } else { diff --git a/src/test/resources/spec/string_spec.lua b/src/test/resources/spec/string_spec.lua index 35a34c0a..82e1636c 100644 --- a/src/test/resources/spec/string_spec.lua +++ b/src/test/resources/spec/string_spec.lua @@ -130,6 +130,10 @@ describe("The string library", function() expect(result):eq("HELLO WORLD") expect(count):eq(10) end) + + it("no out-of-bounds with () (issue #78)", function() + string.gsub("foo", "()(%1)", "") + end) end) describe("string.len", function()