Author: sseifert
Date: Fri Nov 6 12:43:34 2015
New Revision: 1712953
URL: http://svn.apache.org/viewvc?rev=1712953&view=rev
Log:
SLING-5270 JSON Validator does not fail on too many closing brackets
Modified:
sling/trunk/bundles/commons/json/src/main/java/org/apache/sling/commons/json/util/Validator.java
sling/trunk/bundles/commons/json/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java
Modified:
sling/trunk/bundles/commons/json/src/main/java/org/apache/sling/commons/json/util/Validator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/json/src/main/java/org/apache/sling/commons/json/util/Validator.java?rev=1712953&r1=1712952&r2=1712953&view=diff
==============================================================================
---
sling/trunk/bundles/commons/json/src/main/java/org/apache/sling/commons/json/util/Validator.java
(original)
+++
sling/trunk/bundles/commons/json/src/main/java/org/apache/sling/commons/json/util/Validator.java
Fri Nov 6 12:43:34 2015
@@ -32,9 +32,15 @@ public class Validator {
* @param text The text to check.
* @throws JSONException If the text is not valid.
*/
- public static void validate(final String text)
- throws JSONException {
- validate(new JSONTokener(text));
+ public static void validate(final String text) throws JSONException {
+ JSONTokener x = new JSONTokener(text);
+ validate(x);
+
+ // make sure nothing more is present after last array or object
+ char c = x.nextClean();
+ if ( c != 0 ) {
+ throw x.syntaxError("Unexpected '" + c + "' at end of file.");
+ }
}
/**
@@ -42,8 +48,7 @@ public class Validator {
* @param x The tokener to check.
* @throws JSONException If the text is not valid.
*/
- public static void validate(JSONTokener x)
- throws JSONException {
+ public static void validate(JSONTokener x) throws JSONException {
char c = x.nextClean();
if ( c == 0 ) {
// no tokens at all - we consider this valid
Modified:
sling/trunk/bundles/commons/json/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/json/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java?rev=1712953&r1=1712952&r2=1712953&view=diff
==============================================================================
---
sling/trunk/bundles/commons/json/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java
(original)
+++
sling/trunk/bundles/commons/json/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java
Fri Nov 6 12:43:34 2015
@@ -46,11 +46,73 @@ public class ValidatorTest {
@Test(expected=JSONException.class)
public void testTrailingCharsArray() throws JSONException {
Validator.validate("[1,true,\"hallo\",]");
+ //---------------------------invalid ^
}
@Test(expected=JSONException.class)
public void testTrailingCharsObject() throws JSONException {
Validator.validate("{a:\"you\", b:2, c:true,}");
+ //---------------------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyClosingBracketsArray1() throws JSONException {
+ Validator.validate("[1,true,\"hallo\"]]");
+ //----------------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyClosingBracketsArray2() throws JSONException {
+ Validator.validate("[1,true,\"hallo\"]}");
+ //----------------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyClosingBracketsArrayNested() throws JSONException {
+ Validator.validate("{myobj:[1,true,\"hallo\"]],myobj2:5}");
+ //-----------------------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyClosingBracketsObject1() throws JSONException {
+ Validator.validate("{a:\"you\", b:2, c:true}}");
+ //----------------------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyClosingBracketsObject2() throws JSONException {
+ Validator.validate("{a:\"you\", b:2, c:true}]");
+ //----------------------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyClosingBracketsObjectNested() throws JSONException {
+ Validator.validate("{myobj:{a:\"you\", b:2, c:true}},myobj2:5}");
+ //-----------------------------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyOpeningBracketsArray() throws JSONException {
+ Validator.validate("[[1,true,\"hallo\"]");
+ //-----------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyOpeningBracketsArrayNested() throws JSONException {
+ Validator.validate("{myobj:[[1,true,\"hallo\"],myobj2:5}");
+ //------------------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyOpeningBracketsObject() throws JSONException {
+ Validator.validate("{{a:\"you\", b:2, c:true}");
+ //-----------invalid ^
+ }
+
+ @Test(expected=JSONException.class)
+ public void testTooManyOpeningBracketsObjectNested() throws JSONException {
+ Validator.validate("{myobj:{{a:\"you\", b:2, c:true},myobj2:5}");
+ //------------------invalid ^
}
}