From 85d52b02e5eb9060d10e766830644dda94510e1e Mon Sep 17 00:00:00 2001 From: Sergeev Viktor Date: Wed, 28 Jan 2026 03:35:22 +0300 Subject: [PATCH] ISSUES-88: add check value of position in while cycle after increment --- .../java/com/dashjoin/jsonata/Tokenizer.java | 6 ++++- .../java/com/dashjoin/jsonata/RegexTest.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/dashjoin/jsonata/RegexTest.java diff --git a/src/main/java/com/dashjoin/jsonata/Tokenizer.java b/src/main/java/com/dashjoin/jsonata/Tokenizer.java index 308b006..1da1ec9 100644 --- a/src/main/java/com/dashjoin/jsonata/Tokenizer.java +++ b/src/main/java/com/dashjoin/jsonata/Tokenizer.java @@ -139,7 +139,11 @@ Pattern scanRegex() { throw new JException("S0301", position); } position++; - currentChar = path.charAt(position); + if (position < length) { + currentChar = path.charAt(position); + } else { + currentChar = 0; + } // flags start = position; while (currentChar == 'i' || currentChar == 'm') { diff --git a/src/test/java/com/dashjoin/jsonata/RegexTest.java b/src/test/java/com/dashjoin/jsonata/RegexTest.java new file mode 100644 index 0000000..079fb12 --- /dev/null +++ b/src/test/java/com/dashjoin/jsonata/RegexTest.java @@ -0,0 +1,22 @@ +package com.dashjoin.jsonata; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class RegexTest { + @Test + public void testRegex() { + var expression = Jsonata.jsonata("/^test.*$/"); + Object evaluate = expression.evaluate(null); + String expected = "^test.*$"; + Assertions.assertEquals(expected, evaluate.toString()); + } + + @Test + public void testEvalRegex() { + var expression = Jsonata.jsonata("$eval('/^test.*$/')"); + Object evaluate = expression.evaluate(null); + String expected = "^test.*$"; + Assertions.assertEquals(expected, evaluate.toString()); + } +}