From d6ccc64c794bd54bfa70bd510e217cdb72c10268 Mon Sep 17 00:00:00 2001 From: Shashank Sabniveesu Date: Sun, 28 Feb 2021 16:01:59 -0500 Subject: [PATCH] Closes 563: As never defined in RFC 6901 Section 3, do not handle backslashes (\) and quotes(") as anything special --- src/main/java/org/json/JSONPointer.java | 16 +++++++-------- .../java/org/json/junit/JSONPointerTest.java | 20 ++++++++++++++----- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/json/JSONPointer.java b/src/main/java/org/json/JSONPointer.java index e8a0b78c9..a3d1c1a2a 100644 --- a/src/main/java/org/json/JSONPointer.java +++ b/src/main/java/org/json/JSONPointer.java @@ -187,10 +187,11 @@ public JSONPointer(List refTokens) { this.refTokens = new ArrayList(refTokens); } + /** + * @see https://tools.ietf.org/html/rfc6901#section-3 + */ private static String unescape(String token) { - return token.replace("~1", "/").replace("~0", "~") - .replace("\\\"", "\"") - .replace("\\\\", "\\"); + return token.replace("~1", "/").replace("~0", "~"); } /** @@ -263,16 +264,15 @@ public String toString() { /** * Escapes path segment values to an unambiguous form. * The escape char to be inserted is '~'. The chars to be escaped - * are ~, which maps to ~0, and /, which maps to ~1. Backslashes - * and double quote chars are also escaped. + * are ~, which maps to ~0, and /, which maps to ~1. * @param token the JSONPointer segment value to be escaped * @return the escaped value for the token + * + * @see https://tools.ietf.org/html/rfc6901#section-3 */ private static String escape(String token) { return token.replace("~", "~0") - .replace("/", "~1") - .replace("\\", "\\\\") - .replace("\"", "\\\""); + .replace("/", "~1"); } /** diff --git a/src/test/java/org/json/junit/JSONPointerTest.java b/src/test/java/org/json/junit/JSONPointerTest.java index e06851eb7..f1b96849c 100644 --- a/src/test/java/org/json/junit/JSONPointerTest.java +++ b/src/test/java/org/json/junit/JSONPointerTest.java @@ -117,14 +117,24 @@ public void tildeEscaping() { assertSame(document.get("m~n"), query("/m~0n")); } + /** + * We pass backslashes as-is + * + * @see https://tools.ietf.org/html/rfc6901#section-3 + */ @Test - public void backslashEscaping() { - assertSame(document.get("i\\j"), query("/i\\\\j")); + public void backslashHandling() { + assertSame(document.get("i\\j"), query("/i\\j")); } + /** + * We pass quotations as-is + * + * @see https://tools.ietf.org/html/rfc6901#section-3 + */ @Test - public void quotationEscaping() { - assertSame(document.get("k\"l"), query("/k\\\\\\\"l")); + public void quotationHandling() { + assertSame(document.get("k\"l"), query("/k\"l")); } @Test @@ -189,7 +199,7 @@ public void toStringEscaping() { .append("\"") .append(0) .build(); - assertEquals("/obj/other~0key/another~1key/\\\"/0", pointer.toString()); + assertEquals("/obj/other~0key/another~1key/\"/0", pointer.toString()); } @Test