From 177af59b29b85111e27c1b877c498a1add3c83fd Mon Sep 17 00:00:00 2001 From: Matheus Nogueira Date: Sun, 25 Feb 2024 16:13:33 -0300 Subject: [PATCH 1/3] fix: unescape filter argument before running filter --- server/expression/executor.go | 2 +- server/expression/filters/json_path_test.go | 5 +++++ server/expression/value/value.go | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/server/expression/executor.go b/server/expression/executor.go index 3f3d0b40c7..c4e21b9e40 100644 --- a/server/expression/executor.go +++ b/server/expression/executor.go @@ -341,7 +341,7 @@ func (e Executor) executeFilter(input value.Value, filter *Filter) (value.Value, return value.Nil, err } - args = append(args, resolvedArg.Value().Value) + args = append(args, resolvedArg.UnescappedString()) } newValue, err := executeFilter(input, filter.Name, args) diff --git a/server/expression/filters/json_path_test.go b/server/expression/filters/json_path_test.go index a3ff1cbc7c..1f93444e89 100644 --- a/server/expression/filters/json_path_test.go +++ b/server/expression/filters/json_path_test.go @@ -40,6 +40,11 @@ func TestJSONPath(t *testing.T) { Query: `$.array[*]..['id', 'name']`, ExpectedOutput: `[38, "Tracetest", 39, "Kusk"]`, }, + { + JSON: `{"results":[{"count(*)":{"result":3}}]}`, + Query: `$.results[0]['count(*)'].result`, + ExpectedOutput: `3`, + }, } for _, testCase := range testCases { diff --git a/server/expression/value/value.go b/server/expression/value/value.go index c67a602a01..2b1aa731fd 100644 --- a/server/expression/value/value.go +++ b/server/expression/value/value.go @@ -83,3 +83,11 @@ func (v Value) String() string { return v.Value().Value } + +func (v Value) UnescappedString() string { + output := v.String() + output = strings.ReplaceAll(output, `\'`, `'`) + output = strings.ReplaceAll(output, `\"`, `"`) + + return output +} From 8f2670e596a0ddaa113503f722a7556409c82d14 Mon Sep 17 00:00:00 2001 From: Matheus Nogueira Date: Sun, 25 Feb 2024 16:19:29 -0300 Subject: [PATCH 2/3] add test --- server/expression/executor_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/server/expression/executor_test.go b/server/expression/executor_test.go index c6cf3448e4..6480f46072 100644 --- a/server/expression/executor_test.go +++ b/server/expression/executor_test.go @@ -182,6 +182,13 @@ func TestStringInterpolationExecution(t *testing.T) { } func TestFilterExecution(t *testing.T) { + jsonResponseSpan := traces.Span{ + ID: id.NewRandGenerator().SpanID(), + Attributes: traces.NewAttributes(), + } + + jsonResponseSpan.Attributes.Set("tracetest.response.body", `{"results":[{"count(*)":{"result":3}}]}`) + testCases := []executorTestCase{ { Name: "should_extract_id_from_json", @@ -216,6 +223,14 @@ func TestFilterExecution(t *testing.T) { Query: `'{ "array": [1, 2, 5] }' | json_path '$.array[*]' | get_index 'last' = 5`, ShouldPass: true, }, + { + Name: "should_unescape_filter_arg", + Query: `attr:tracetest.response.body | json_path '$.results[0][\'count(*)\'].result' = 3`, + ShouldPass: true, + AttributeDataStore: expression.AttributeDataStore{ + Span: jsonResponseSpan, + }, + }, } executeTestCases(t, testCases) From 189eff160436987c40518109819f9aaff683aa0d Mon Sep 17 00:00:00 2001 From: Matheus Nogueira Date: Sun, 25 Feb 2024 16:20:05 -0300 Subject: [PATCH 3/3] remove old test --- server/expression/filters/json_path_test.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/server/expression/filters/json_path_test.go b/server/expression/filters/json_path_test.go index 1f93444e89..a3ff1cbc7c 100644 --- a/server/expression/filters/json_path_test.go +++ b/server/expression/filters/json_path_test.go @@ -40,11 +40,6 @@ func TestJSONPath(t *testing.T) { Query: `$.array[*]..['id', 'name']`, ExpectedOutput: `[38, "Tracetest", 39, "Kusk"]`, }, - { - JSON: `{"results":[{"count(*)":{"result":3}}]}`, - Query: `$.results[0]['count(*)'].result`, - ExpectedOutput: `3`, - }, } for _, testCase := range testCases {