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); + } }