[maven-release-plugin] copy for tag org.apache.sling.commons.json-2.0.14

git-svn-id: https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.json-2.0.14@1713379 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/commons/json/util/Validator.java b/src/main/java/org/apache/sling/commons/json/util/Validator.java
index ca357aa..f8bf974 100644
--- a/src/main/java/org/apache/sling/commons/json/util/Validator.java
+++ b/src/main/java/org/apache/sling/commons/json/util/Validator.java
@@ -54,9 +54,13 @@
             // no tokens at all - we consider this valid
             return;
         } else  if (c == '[') {
-            if (x.nextClean() == ']') {
+            char nextChar = x.nextClean();
+            if (nextChar == ']') {
                 return;
             }
+            else if (nextChar == 0) {
+                throw x.syntaxError("Detected unclosed array.");
+            }
             x.back();
             for (;;) {
                 if (x.nextClean() == ',') {
@@ -66,7 +70,7 @@
                     c = x.nextClean();
                     x.back();
                     if ( c == '{' || c == '[') {
-                        // recursiv validation for object and array
+                        // recursive validation for object and array
                         validate(x);
                     } else {
                         x.nextValue();
diff --git a/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java b/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java
index 9f79880..a7273cd 100644
--- a/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java
+++ b/src/test/java/org/apache/sling/commons/json/util/ValidatorTest.java
@@ -25,21 +25,37 @@
 public class ValidatorTest {
 
     @Test
-    public void testSimpleJSON() throws JSONException {
+    public void testEmptyString() throws JSONException {
         Validator.validate("");
+    }
+
+    @Test
+    public void testEmptyArray() throws JSONException {
         Validator.validate("[]");
+    }
+
+    @Test
+    public void testEmptyObject() throws JSONException {
         Validator.validate("{}");
     }
 
     @Test
-    public void testBasicJSON() throws JSONException {
+    public void testSimpleArray() throws JSONException {
         Validator.validate("[1,true,\"hallo\"]");
+    }
+
+    @Test
+    public void testSimpleObject() throws JSONException {
         Validator.validate("{a:\"you\", b:2, c:true}");
     }
 
     @Test
-    public void testNestedJSON() throws JSONException {
+    public void testNestedJSONArray() throws JSONException {
         Validator.validate("[1,true,\"hallo\", {a:1}, [1,2]]");
+    }
+
+    @Test
+    public void testNestedJSONObject() throws JSONException {
         Validator.validate("{a:\"you\", b:2, c:true, d: {d:1}, e: []}");
     }
 
@@ -115,4 +131,24 @@
         //------------------invalid ^ 
     }
 
+    @Test(expected=JSONException.class)
+    public void testOpeningBrackedOnlyArray() throws JSONException {
+        Validator.validate("[");
+    }
+
+    @Test(expected=JSONException.class)
+    public void testOpeningBrackedOnlyObject() throws JSONException {
+        Validator.validate("{");
+    }
+
+    @Test(expected=JSONException.class)
+    public void testUnclosedArray() throws JSONException {
+        Validator.validate("[1,true,\"hallo\"");
+    }
+
+    @Test(expected=JSONException.class)
+    public void testUnclosedObject() throws JSONException {
+        Validator.validate("{a:\"you\", b:2, c:true");
+    }
+
 }