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 8961bda5..1beeffcf 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 @@ -603,6 +603,10 @@ public class PathCompiler { readPosition++; } + if (inProperty){ + fail("Property has not been closed - missing closing " + potentialStringDelimiter); + } + int endBracketIndex = path.indexOfNextSignificantChar(endPosition, CLOSE_SQUARE_BRACKET) + 1; path.setPosition(endBracketIndex); diff --git a/json-path/src/test/java/com/jayway/jsonpath/old/JsonPathTest.java b/json-path/src/test/java/com/jayway/jsonpath/old/JsonPathTest.java index 81c6203d..cf22d105 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/old/JsonPathTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/old/JsonPathTest.java @@ -322,5 +322,10 @@ public class JsonPathTest extends BaseTest { } } + @Test(expected = InvalidPathException.class) + //see https://github.com/json-path/JsonPath/issues/428 + public void prevent_stack_overflow_error_when_unclosed_property() { + JsonPath.compile("$['boo','foo][?(@ =~ /bar/)]"); + } }