From 4bfa932cdffbc6b28ab2152ef5bd39bee40833ee Mon Sep 17 00:00:00 2001 From: Jochen Berger Date: Thu, 18 Feb 2016 12:34:35 +0100 Subject: [PATCH] fail when there are spaces inside array indexes --- .../jsonpath/internal/path/ArrayIndexOperation.java | 9 ++++++--- .../com/jayway/jsonpath/internal/path/PathCompiler.java | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexOperation.java b/json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexOperation.java index 0fd833a0..8fde93a9 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexOperation.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/path/ArrayIndexOperation.java @@ -6,11 +6,14 @@ import com.jayway.jsonpath.internal.Utils; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.regex.Pattern; import static java.lang.Character.isDigit; public class ArrayIndexOperation { + private final static Pattern COMMA = Pattern.compile("\\s*,\\s*"); + private final List indexes; private ArrayIndexOperation(List indexes) { @@ -39,13 +42,13 @@ public class ArrayIndexOperation { //check valid chars for (int i = 0; i < operation.length(); i++) { char c = operation.charAt(i); - if (!isDigit(c) && c != ',') { + if (!isDigit(c) && c != ',' && c != ' ') { throw new InvalidPathException("Failed to parse ArrayIndexOperation: " + operation); } } - String[] tokens = operation.split(","); + String[] tokens = COMMA.split(operation, -1); - List tempIndexes = new ArrayList(); + List tempIndexes = new ArrayList(tokens.length); for (String token : tokens) { tempIndexes.add(parseInteger(token)); } 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 b8039b9f..bb860afe 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 @@ -512,7 +512,7 @@ public class PathCompiler { return false; } - String expression = path.subSequence(expressionBeginIndex, expressionEndIndex).toString().replace(" ", ""); + String expression = path.subSequence(expressionBeginIndex, expressionEndIndex).toString().trim(); if ("*".equals(expression)) { return false; @@ -521,7 +521,7 @@ public class PathCompiler { //check valid chars for (int i = 0; i < expression.length(); i++) { char c = expression.charAt(i); - if (!isDigit(c) && c != COMMA && c != MINUS && c != SPLIT) { + if (!isDigit(c) && c != COMMA && c != MINUS && c != SPLIT && c != SPACE) { return false; } }