mirror of
https://github.com/stleary/JSON-java.git
synced 2025-08-02 11:05:28 -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)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenValidDoubleArray_testStrictModeTrue_shouldNotThrowJsonException() {
|
||||
JSONParserConfiguration jsonParserConfiguration = new JSONParserConfiguration()
|
||||
.withStrictMode(true);
|
||||
|
||||
String testCase = "[[\"c\"],[\"a\"]]";
|
||||
|
||||
new JSONArray(testCase, jsonParserConfiguration);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenCompliantJSONArrayFile_testStrictModeTrue_shouldNotThrowAnyException() throws IOException {
|
||||
try (Stream<String> lines = Files.lines(Paths.get("src/test/resources/compliantJsonArray.json"))) {
|
||||
@ -208,6 +218,15 @@ public class JSONParserConfigurationTest {
|
||||
*/
|
||||
private List<String> getNonCompliantJSONList() {
|
||||
return Arrays.asList(
|
||||
"[]asdf",
|
||||
"[]]",
|
||||
"[]}",
|
||||
"[][",
|
||||
"[]{",
|
||||
"[],",
|
||||
"[]:",
|
||||
"[],[",
|
||||
"[],{",
|
||||
"[1,2];[3,4]",
|
||||
"[test]",
|
||||
"[{'testSingleQuote': 'testSingleQuote'}]",
|
||||
|
Loading…
x
Reference in New Issue
Block a user