mirror of
https://github.com/stleary/JSON-java.git
synced 2025-08-02 19:15:27 -04:00
fix(#887): complete strictMode for JSONArray
This commit is contained in:
parent
d02ac0f2a3
commit
fe597d296e
@ -144,6 +144,42 @@ public class JSONArray implements Iterable<Object> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (jsonParserConfiguration.isStrictMode()) {
|
||||||
|
validateInput(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if Array adheres to strict mode guidelines, if not, throws JSONException providing back the input in the
|
||||||
|
* error message.
|
||||||
|
*
|
||||||
|
* @param x tokener used to examine input.
|
||||||
|
* @throws JSONException if input is not compliant with strict mode guidelines;
|
||||||
|
*/
|
||||||
|
private void validateInput(JSONTokener x) {
|
||||||
|
char nextChar = x.getPrevious();
|
||||||
|
|
||||||
|
boolean isEndOfArray = nextChar == ']';
|
||||||
|
boolean nextCharacterIsNotEoF = x.nextClean() != 0;
|
||||||
|
|
||||||
|
if (isEndOfArray && nextCharacterIsNotEoF) {
|
||||||
|
String completeInput = collectCompleteInput(x);
|
||||||
|
throw new JSONException("Provided Array is not compliant with strict mode guidelines: " + completeInput);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String collectCompleteInput(JSONTokener x) {
|
||||||
|
String nonCompliantStringAfterArray = collectNonCompliantStringAfterArray(x);
|
||||||
|
return myArrayList + nonCompliantStringAfterArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String collectNonCompliantStringAfterArray(JSONTokener x) {
|
||||||
|
StringBuilder sb = new StringBuilder().append(x.getPrevious());
|
||||||
|
while(x.nextClean() != 0){
|
||||||
|
sb.append(x.getPrevious());
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -46,6 +46,16 @@ public class JSONParserConfigurationTest {
|
|||||||
() -> new JSONArray(testCase, jsonParserConfiguration)));
|
() -> new JSONArray(testCase, jsonParserConfiguration)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenValidDoubleArray_testStrictModeTrue_shouldNotThrowJsonException() {
|
||||||
|
JSONParserConfiguration jsonParserConfiguration = new JSONParserConfiguration()
|
||||||
|
.withStrictMode(true);
|
||||||
|
|
||||||
|
String testCase = "[[\"c\"],[\"a\"]]";
|
||||||
|
|
||||||
|
new JSONArray(testCase, jsonParserConfiguration);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenCompliantJSONArrayFile_testStrictModeTrue_shouldNotThrowAnyException() throws IOException {
|
public void givenCompliantJSONArrayFile_testStrictModeTrue_shouldNotThrowAnyException() throws IOException {
|
||||||
try (Stream<String> lines = Files.lines(Paths.get("src/test/resources/compliantJsonArray.json"))) {
|
try (Stream<String> lines = Files.lines(Paths.get("src/test/resources/compliantJsonArray.json"))) {
|
||||||
@ -208,6 +218,15 @@ public class JSONParserConfigurationTest {
|
|||||||
*/
|
*/
|
||||||
private List<String> getNonCompliantJSONList() {
|
private List<String> getNonCompliantJSONList() {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
|
"[]asdf",
|
||||||
|
"[]]",
|
||||||
|
"[]}",
|
||||||
|
"[][",
|
||||||
|
"[]{",
|
||||||
|
"[],",
|
||||||
|
"[]:",
|
||||||
|
"[],[",
|
||||||
|
"[],{",
|
||||||
"[1,2];[3,4]",
|
"[1,2];[3,4]",
|
||||||
"[test]",
|
"[test]",
|
||||||
"[{'testSingleQuote': 'testSingleQuote'}]",
|
"[{'testSingleQuote': 'testSingleQuote'}]",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user