diff --git a/luaj-core/src/main/java/org/luaj/vm2/lib/StringLib.java b/luaj-core/src/main/java/org/luaj/vm2/lib/StringLib.java index 713ab9be..c2351f3e 100644 --- a/luaj-core/src/main/java/org/luaj/vm2/lib/StringLib.java +++ b/luaj-core/src/main/java/org/luaj/vm2/lib/StringLib.java @@ -640,6 +640,8 @@ public class StringLib extends TwoArgFunction { int lastmatch = -1; /* end of last match */ LuaValue repl = args.arg(3); int max_s = args.optint(4, srclen+1); + if (max_s < 0) + max_s = srclen+1; final boolean anchor = p.length() > 0 && p.charAt(0) == '^'; Buffer lbuf = new Buffer(srclen); diff --git a/luaj-test/src/test/resources/compatibility/jme/stringlib.out b/luaj-test/src/test/resources/compatibility/jme/stringlib.out index 7ebe326d..9cb6e786 100644 Binary files a/luaj-test/src/test/resources/compatibility/jme/stringlib.out and b/luaj-test/src/test/resources/compatibility/jme/stringlib.out differ diff --git a/luaj-test/src/test/resources/compatibility/jse/stringlib.out b/luaj-test/src/test/resources/compatibility/jse/stringlib.out index 7ebe326d..9cb6e786 100644 Binary files a/luaj-test/src/test/resources/compatibility/jse/stringlib.out and b/luaj-test/src/test/resources/compatibility/jse/stringlib.out differ diff --git a/luaj-test/src/test/resources/compatibility/luajit/stringlib.out b/luaj-test/src/test/resources/compatibility/luajit/stringlib.out index 7ebe326d..3ffabfe0 100644 Binary files a/luaj-test/src/test/resources/compatibility/luajit/stringlib.out and b/luaj-test/src/test/resources/compatibility/luajit/stringlib.out differ diff --git a/luaj-test/src/test/resources/compatibility/stringlib.lua b/luaj-test/src/test/resources/compatibility/stringlib.lua index dbaf1931..40de55d0 100644 --- a/luaj-test/src/test/resources/compatibility/stringlib.lua +++ b/luaj-test/src/test/resources/compatibility/stringlib.lua @@ -21,6 +21,9 @@ print( string.match( "abbaaababaabaaabaa", "b(a*)()b", 12 ) ) print( string.byte("hi", -3) ) +print( string.gsub("ABC ABC ABC", "ABC", "DEF", -1) ) +print( string.gsub("ABC ABC ABC", "ABC", "DEF", 0) ) +print( string.gsub("ABC ABC ABC", "ABC", "DEF", 2) ) print( string.gsub("ABC", "@(%x+)", function(s) return "|abcd" end) ) print( string.gsub("@123", "@(%x+)", function(s) return "|abcd" end) ) print( string.gsub("ABC@123", "@(%x+)", function(s) return "|abcd" end) )