Exception from mistake in fn:replace

Saturday, 20 June 2026 · 3 messages · last reply 21 Jun 2026
AG
Amanda Galtman20 Jun 2026 15:01 #
Hi, BaseX team. I'm reporting an exception I saw in BaseX 12.4 in a function call where the fn:replace function refers to $1 in the third argument without having any parenthesized expressions in the second argument. The function call has a mistake, but I'm assuming BaseX should respond differently. replace('full stop.','\.','\\$1')
Could not execute XQUERY replace('full stop.','\.','\\$1'):
Improper use? Potential bug? Your feedback is welcome:
Contact: basex-talk at mailman.uni-konstanz.de
Version: BaseX 12.4
Java: Eclipse Adoptium, 17.0.17
OS: Windows 11, amd64
Stack Trace:
java.lang.IndexOutOfBoundsException: No group 1
at java.base/java.util.regex.Matcher.start(Matcher.java:482)
at java.base/java.util.regex.Matcher.appendExpandedReplacement(Matcher.java:1090)
at java.base/java.util.regex.Matcher.appendReplacement(Matcher.java:997)
at java.base/java.util.regex.Matcher.replaceAll(Matcher.java:1181)
at org.basex.query.func.fn.FnReplace.item(FnReplace.java:103)
at org.basex.query.func.fn.FnReplace.item(FnReplace.java:22)
at org.basex.query.expr.ParseExpr.value(ParseExpr.java:71)
at org.basex.query.CompileContext.preEval(CompileContext.java:257)
at org.basex.query.func.StandardFunc.optimize(StandardFunc.java:79)
at org.basex.query.expr.Arr.compile(Arr.java:49)
at org.basex.query.func.StaticFuncs$FuncRef.compile(StaticFuncs.java:358)
at org.basex.query.scope.MainModule.compile(MainModule.java:38)
at org.basex.query.QueryCompiler.compile(QueryCompiler.java:41)
at org.basex.query.QueryContext.compile(QueryContext.java:369)
at org.basex.query.QueryContext.lambda$compile$2(QueryContext.java:312)
at org.basex.query.QueryContext.run(QueryContext.java:792)
at org.basex.query.QueryContext.compile(QueryContext.java:298)
at org.basex.query.QueryProcessor.compile(QueryProcessor.java:78)
at org.basex.core.cmd.AQuery.init(AQuery.java:203)
at org.basex.core.cmd.AQuery.updating(AQuery.java:150)
at org.basex.gui.GUI.execute(GUI.java:421)
at org.basex.gui.GUI.lambda$execute$5(GUI.java:375) at java.base/java.lang.Thread.run(Thread.java:840)
Best regards, Amanda
GR
Gunther Rademacher21 Jun 2026 08:54 #
Hi Amanda, thank you for reporting this. It has been fixed by PR 2698 [1], and the fix is now in the main branch. Best regards, Gunther [1] https://github.com/BaseXdb/basex/pull/2698
Quoted text · Amanda Galtman · 48 lines
On 6/20/2026 3:01 PM, Amanda Galtman via BaseX-Talk wrote: > Hi, BaseX team. > > I'm reporting an exception I saw in BaseX 12.4 in a function call where > the fn:replace function refers to $1 in the third argument without > having any parenthesized expressions in the second argument. The > function call has a mistake, but I'm assuming BaseX should respond > differently. > > replace('full stop.','\.','\\$1') > > Could not execute XQUERY replace('full stop.','\.','\\$1'): > Improper use? Potential bug? Your feedback is welcome: > Contact: basex-talk at mailman.uni-konstanz.de <mailto:basex- > talk at mailman.uni-konstanz.de> > Version: BaseX 12.4 > Java: Eclipse Adoptium, 17.0.17 > OS: Windows 11, amd64 > Stack Trace: > java.lang.IndexOutOfBoundsException: No group 1 > at java.base/java.util.regex.Matcher.start(Matcher.java:482) > at java.base/ > java.util.regex.Matcher.appendExpandedReplacement(Matcher.java:1090) > at java.base/java.util.regex.Matcher.appendReplacement(Matcher.java:997) > at java.base/java.util.regex.Matcher.replaceAll(Matcher.java:1181) > at org.basex.query.func.fn.FnReplace.item(FnReplace.java:103) > at org.basex.query.func.fn.FnReplace.item(FnReplace.java:22) > at org.basex.query.expr.ParseExpr.value(ParseExpr.java:71) > at org.basex.query.CompileContext.preEval(CompileContext.java:257) > at org.basex.query.func.StandardFunc.optimize(StandardFunc.java:79) > at org.basex.query.expr.Arr.compile(Arr.java:49) > at org.basex.query.func.StaticFuncs$FuncRef.compile(StaticFuncs.java:358) > at org.basex.query.scope.MainModule.compile(MainModule.java:38) > at org.basex.query.QueryCompiler.compile(QueryCompiler.java:41) > at org.basex.query.QueryContext.compile(QueryContext.java:369) > at org.basex.query.QueryContext.lambda$compile$2(QueryContext.java:312) > at org.basex.query.QueryContext.run(QueryContext.java:792) > at org.basex.query.QueryContext.compile(QueryContext.java:298) > at org.basex.query.QueryProcessor.compile(QueryProcessor.java:78) > at org.basex.core.cmd.AQuery.init(AQuery.java:203) > at org.basex.core.cmd.AQuery.updating(AQuery.java:150) > at org.basex.gui.GUI.execute(GUI.java:421) > at org.basex.gui.GUI.lambda$execute$5(GUI.java:375) > at java.base/java.lang.Thread.run(Thread.java:840) > > Best regards, > Amanda >
AG
Amanda Galtman21 Jun 2026 22:10 #
Thanks, Gunther. Best regards, Amanda
Quoted text · Gunther Rademacher · 63 lines
On Sunday, June 21st, 2026 at 2:54 AM, Gunther Rademacher <grd at gmx.net> wrote: > Hi Amanda, > > thank you for reporting this. > > It has been fixed by PR 2698 [1], and the fix is now in the main branch. > > Best regards, > Gunther > > [1] https://github.com/BaseXdb/basex/pull/2698 > > > On 6/20/2026 3:01 PM, Amanda Galtman via BaseX-Talk wrote: > > Hi, BaseX team. > > > > I'm reporting an exception I saw in BaseX 12.4 in a function call where > > the fn:replace function refers to $1 in the third argument without > > having any parenthesized expressions in the second argument. The > > function call has a mistake, but I'm assuming BaseX should respond > > differently. > > > > replace('full stop.','\.','\\$1') > > > > Could not execute XQUERY replace('full stop.','\.','\\$1'): > > Improper use? Potential bug? Your feedback is welcome: > > Contact: basex-talk at mailman.uni-konstanz.de <mailto:basex- > > talk at mailman.uni-konstanz.de> > > Version: BaseX 12.4 > > Java: Eclipse Adoptium, 17.0.17 > > OS: Windows 11, amd64 > > Stack Trace: > > java.lang.IndexOutOfBoundsException: No group 1 > > at java.base/java.util.regex.Matcher.start(Matcher.java:482) > > at java.base/ > > java.util.regex.Matcher.appendExpandedReplacement(Matcher.java:1090) > > at java.base/java.util.regex.Matcher.appendReplacement(Matcher.java:997) > > at java.base/java.util.regex.Matcher.replaceAll(Matcher.java:1181) > > at org.basex.query.func.fn.FnReplace.item(FnReplace.java:103) > > at org.basex.query.func.fn.FnReplace.item(FnReplace.java:22) > > at org.basex.query.expr.ParseExpr.value(ParseExpr.java:71) > > at org.basex.query.CompileContext.preEval(CompileContext.java:257) > > at org.basex.query.func.StandardFunc.optimize(StandardFunc.java:79) > > at org.basex.query.expr.Arr.compile(Arr.java:49) > > at org.basex.query.func.StaticFuncs$FuncRef.compile(StaticFuncs.java:358) > > at org.basex.query.scope.MainModule.compile(MainModule.java:38) > > at org.basex.query.QueryCompiler.compile(QueryCompiler.java:41) > > at org.basex.query.QueryContext.compile(QueryContext.java:369) > > at org.basex.query.QueryContext.lambda$compile$2(QueryContext.java:312) > > at org.basex.query.QueryContext.run(QueryContext.java:792) > > at org.basex.query.QueryContext.compile(QueryContext.java:298) > > at org.basex.query.QueryProcessor.compile(QueryProcessor.java:78) > > at org.basex.core.cmd.AQuery.init(AQuery.java:203) > > at org.basex.core.cmd.AQuery.updating(AQuery.java:150) > > at org.basex.gui.GUI.execute(GUI.java:421) > > at org.basex.gui.GUI.lambda$execute$5(GUI.java:375) > > at java.base/java.lang.Thread.run(Thread.java:840) > > > > Best regards, > > Amanda > > > >

⚡Generated with XQuery