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 ^ 
     }
 
 }


Reply via email to