From c0ca7d2d31548793480110340b1318fa2a1ff481 Mon Sep 17 00:00:00 2001 From: simatosc Date: Mon, 15 May 2023 10:00:29 +0200 Subject: [PATCH] Bug fix for JSON Pointer parsing (#752) --- .../java/com/networknt/schema/PathType.java | 2 +- .../com/networknt/schema/Issue687Test.java | 35 ++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/networknt/schema/PathType.java b/src/main/java/com/networknt/schema/PathType.java index 0fc99c4c5..28631400b 100644 --- a/src/main/java/com/networknt/schema/PathType.java +++ b/src/main/java/com/networknt/schema/PathType.java @@ -41,7 +41,7 @@ public enum PathType { t = t.replace("'", "\\'"); } - return "['" + token + "']"; + return "['" + t + "']"; }, (index) -> "[" + index + "]"), /** diff --git a/src/test/java/com/networknt/schema/Issue687Test.java b/src/test/java/com/networknt/schema/Issue687Test.java index 4f5c07cf6..d1b1afe72 100644 --- a/src/test/java/com/networknt/schema/Issue687Test.java +++ b/src/test/java/com/networknt/schema/Issue687Test.java @@ -37,7 +37,8 @@ public static Stream appendTokens() { Arguments.of(PathType.JSON_PATH, "$.foo", "b.ar", "$.foo['b.ar']"), Arguments.of(PathType.JSON_PATH, "$.foo", "b~ar", "$.foo['b~ar']"), Arguments.of(PathType.JSON_PATH, "$.foo", "b/ar", "$.foo['b/ar']"), - Arguments.of(PathType.JSON_PATH, "$", "'", "$['\'']"), + Arguments.of(PathType.JSON_PATH, "$", "'", "$['\\'']"), + Arguments.of(PathType.JSON_PATH, "$", "b'ar", "$['b\\'ar']"), Arguments.of(PathType.JSON_POINTER, "/foo", "bar", "/foo/bar"), Arguments.of(PathType.JSON_POINTER, "/foo", "b.ar", "/foo/b.ar"), Arguments.of(PathType.JSON_POINTER, "/foo", "b~ar", "/foo/b~0ar"), @@ -122,4 +123,36 @@ void testDoubleQuotes() throws JsonProcessingException { assertEquals("$['\"']", validationMessages.iterator().next().getPath()); } + @Test + void testSingleQuotes() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + SchemaValidatorsConfig schemaValidatorsConfig = new SchemaValidatorsConfig(); + schemaValidatorsConfig.setPathType(PathType.JSON_PATH); + /* + { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "type": "object", + "properties": { + "'": { + "type": "boolean" + } + } + } + */ + JsonSchema schema = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V201909) + .getSchema(mapper.readTree("{\n" + + " \"$schema\": \"https://json-schema.org/draft/2019-09/schema\",\n" + + " \"type\": \"object\",\n" + + " \"properties\": {\n" + + " \"'\": {\n" + + " \"type\": \"boolean\"\n" + + " }\n" + + " }\n" + + "}"), schemaValidatorsConfig); + // {"\"": 1} + Set validationMessages = schema.validate(mapper.readTree("{\"'\": 1}")); + assertEquals(1, validationMessages.size()); + assertEquals("$['\\'']", validationMessages.iterator().next().getPath()); + } + }