From 560a4694e454c6e449d29ef6fc3b5c67452cb2ee Mon Sep 17 00:00:00 2001 From: Enrico Horn Date: Fri, 9 Jul 2021 23:46:34 +0200 Subject: [PATCH] Fix string.gsub behaviour with negative n --- .../main/java/org/luaj/vm2/lib/StringLib.java | 2 ++ .../resources/compatibility/jme/stringlib.out | Bin 10276 -> 10318 bytes .../resources/compatibility/jse/stringlib.out | Bin 10276 -> 10318 bytes .../compatibility/luajit/stringlib.out | Bin 10276 -> 10318 bytes .../resources/compatibility/stringlib.lua | 3 +++ 5 files changed, 5 insertions(+) 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 7ebe326d4b15ea19da3261eb265cabe9c46b4859..9cb6e786dac720ef53f9403134bcf6e91f5ac3c1 100644 GIT binary patch delta 52 pcmZ1ya4ukii>8aKn*tPb8gn^1IV(UhrvVpC4k*HDw9)yYIskeq4YL3M delta 10 RcmX>Xuq0rD%f`G1>Hr+y1q}cI diff --git a/luaj-test/src/test/resources/compatibility/jse/stringlib.out b/luaj-test/src/test/resources/compatibility/jse/stringlib.out index 7ebe326d4b15ea19da3261eb265cabe9c46b4859..9cb6e786dac720ef53f9403134bcf6e91f5ac3c1 100644 GIT binary patch delta 52 pcmZ1ya4ukii>8aKn*tPb8gn^1IV(UhrvVpC4k*HDw9)yYIskeq4YL3M delta 10 RcmX>Xuq0rD%f`G1>Hr+y1q}cI diff --git a/luaj-test/src/test/resources/compatibility/luajit/stringlib.out b/luaj-test/src/test/resources/compatibility/luajit/stringlib.out index 7ebe326d4b15ea19da3261eb265cabe9c46b4859..3ffabfe02fd6990be8004575c9604eead6d569c8 100644 GIT binary patch delta 49 ncmZ1ya4ukiyPATdlQRf&8gM~bP@apcn*s=fXuq0rD`^Lh%>Hr+^1rPuL 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) )