From 58c454b52d40dbf6086a6e9cf41b38770f2dbec4 Mon Sep 17 00:00:00 2001 From: Alexey Makeyev Date: Wed, 23 Dec 2015 15:26:03 +0300 Subject: [PATCH] Fix issue #175 - Size evaluation could break indefinite path evaluation --- .../jayway/jsonpath/internal/filter/EvaluatorFactory.java | 3 +++ .../src/test/java/com/jayway/jsonpath/InlineFilterTest.java | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java index c103ab28..43b705a4 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java @@ -138,6 +138,9 @@ public class EvaluatorFactory { private static class SizeEvaluator implements Evaluator { @Override public boolean evaluate(ValueNode left, ValueNode right, Predicate.PredicateContext ctx) { + if (! right.isNumberNode()) { + return false; + } int expectedSize = right.asNumberNode().getNumber().intValue(); if(left.isStringNode()){ diff --git a/json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java b/json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java index 5f19a8df..1a130344 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/InlineFilterTest.java @@ -209,4 +209,9 @@ public class InlineFilterTest extends BaseTest { public void escape_pattern() { assertHasOneResult("[\"x\"]", "$[?(@ =~ /\\/|x/)]", conf); } + + @Test + public void filter_evaluation_does_not_break_path_evaluation() { + assertHasOneResult("[{\"s\": \"fo\", \"expected_size\": \"m\"}, {\"s\": \"lo\", \"expected_size\": 2}]", "$[?(@.s size @.expected_size)]", conf); + } }