You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Gabriel Van Eyck (JIRA)" <ji...@apache.org> on 2015/06/25 22:25:04 UTC
[jira] [Created] (GROOVY-7476) JsonSlurper does not parse escaped
double quotes (sometimes) on parsing with JsonParsingUsingCharacterSource
Gabriel Van Eyck created GROOVY-7476:
----------------------------------------
Summary: JsonSlurper does not parse escaped double quotes (sometimes) on parsing with JsonParsingUsingCharacterSource
Key: GROOVY-7476
URL: https://issues.apache.org/jira/browse/GROOVY-7476
Project: Groovy
Issue Type: Bug
Components: JSON
Affects Versions: 2.4.3, 2.3.11
Reporter: Gabriel Van Eyck
Assignee: Guillaume Laforge
Priority: Minor
This came up when parsing a JSON string that had escaped JSON in it.
E.g. {"string": "{\"key\": \"value\"}"}
If the escape character used for ReaderCharacterSource.findNextChar is the last character in the buffer, then "foundEscape" status is not passed onto the recursion call (ReaderCharacterSource:229) and the match character is not added to the result.
{code}
import groovy.json.internal.ReaderCharacterSource
def testString = '"double\\"quote"'
def expectedString = testString.substring(1, testString.length() - 1)
def escapedQuotePos = testString.indexOf('"', 1)
int quoteChar = (int)'"'.toCharArray()[0]
int backslashChar = (int)'\\'.toCharArray()[0]
ReaderCharacterSource rcs
char[] result
rcs = new ReaderCharacterSource(new StringReader(testString), escapedQuotePos - 1)
result = rcs.findNextChar(quoteChar, backslashChar)
assert(expectedString == new String(result))
rcs = new ReaderCharacterSource(new StringReader(testString), escapedQuotePos + 1)
result = rcs.findNextChar(quoteChar, backslashChar)
assert(expectedString == new String(result))
// This one fails due to the backslash being the last character in the buffer
rcs = new ReaderCharacterSource(new StringReader(testString), escapedQuotePos)
result = rcs.findNextChar(quoteChar, backslashChar)
assert(expectedString == new String(result))
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)