From 062d3081287132443afe4dd44c7f5c1288ca5a12 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Mon, 20 Jul 2020 08:28:08 -0400 Subject: [PATCH] Scribunto: Do not return early in Gsub if source is String.empty [#731] --- .../xtns/scribunto/libs/Scrib_lib_ustring__gsub__tst.java | 6 ++++++ .../libs/patterns/Scrib_pattern_matcher__xowa.java | 5 ++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring__gsub__tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring__gsub__tst.java index 6f77b0708..a6d70fb5e 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring__gsub__tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring__gsub__tst.java @@ -49,6 +49,12 @@ public class Scrib_lib_ustring__gsub__tst { // TOMBSTONE: tested with local MW and {{#invoke:Test|test16|a|[^]|b}} -> Lua error: Missing close-bracket for character set beginning at pattern character 1.; DATE:2018-07-02 // Exec_gsub("a" , "[^]" , 1, "b" , "a;0"); // invalid regx should not fail; should return self; DATE:2013-10-20 } + @Test public void ReplaceEmptyWithPattern() { + Exec_gsub("", "a", -1, "A", ";0"); + } + @Test public void ReplaceEmptyWithFlag() { + Exec_gsub("", "$", -1, "A", "A;1"); + } @Test public void Find__int() {// PURPOSE: gsub with integer arg should not fail; DATE:2013-11-06 fxt.Test__proc__kvps__flat(lib, Scrib_lib_ustring.Invk_gsub, Scrib_kv_utl_.base1_many_(1, "[1]", "2", 1), "2;1"); // NOTE: text is integer (lua / php are type-less) } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/patterns/Scrib_pattern_matcher__xowa.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/patterns/Scrib_pattern_matcher__xowa.java index c4fe4934c..75537d9a9 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/patterns/Scrib_pattern_matcher__xowa.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/patterns/Scrib_pattern_matcher__xowa.java @@ -52,9 +52,8 @@ class Scrib_pattern_matcher__xowa extends Scrib_pattern_matcher { // get src vars String src_str = src_ucs.Src(); int src_len = src_ucs.Len_in_data(); - if (src_len == 0) { - return src_str; - } + // TOMBSTONE:do not return early if String.empty; allows `string.gsub('', '$', 'a')` ISSUE#:731; DATE:2020-07-20 + // if (src_len == 0) return src_str; int src_max = src_len + 1; // get pat vars