From 46632f324dce5325bd99c3e2740ac0c0f3177f54 Mon Sep 17 00:00:00 2001 From: abhishek kumar tiwari Date: Sun, 21 Jan 2024 21:38:29 +0530 Subject: [PATCH 1/2] Fix parsing logic of function parameters with closing parentheses Currently a function with parameter which have parentheses is wrongly parsed. As soon as a closing parentheses is encountered, the parsing logic assumes end state for the function parameter. For example, given `concat(sum(), 10)` then `sum(` is treated as first parameter. This is wrong parsing logic. A parameter should be treated completely parsed only when a `,` or, the last `)` is encountered ( that is groupParen == 0) --- .../java/com/jayway/jsonpath/internal/path/PathCompiler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java b/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java index 27b6e063..a910374f 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java @@ -353,6 +353,7 @@ else if (isPathContext(c)) { if (0 > groupParen || priorChar == '(') { parameter.append(c); } + if(groupParen > 0) break; case COMMA: // In this state we've reach the end of a function parameter and we can pass along the parameter string // to the parser From 8df4507e9c0db57df068c5f7b55548c95aea73eb Mon Sep 17 00:00:00 2001 From: abhishek kumar tiwari Date: Mon, 29 Jan 2024 16:18:36 +0530 Subject: [PATCH 2/2] Add test for fixing parsing login when path has a function as argument to another function Add test for fixing parsing login when path has a function as argument to another function --- .../test/java/com/jayway/jsonpath/PathCompilerTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java b/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java index ef220619..419b9bc1 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java @@ -323,4 +323,11 @@ public void accept_only_a_single_comma_between_indexes() { public void property_must_be_separated_by_commas() { compile("$['aaa'}'bbb']"); } + + @Test + public void function_parameter_with_closing_paren() { + String json = "{}"; + String result = JsonPath.read(json, "$.concat(\"Bob\", $.concat(\" Joe\", \" Alex\"))"); + assertThat(result).isEqualTo("Bob Joe Alex"); + } }