You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by sa...@apache.org on 2014/10/07 20:26:54 UTC

[2/4] git commit: Bugfix to prevent a "bufferoverflow" in parser when working with a recycled buffer

Bugfix to prevent a "bufferoverflow" in parser when working with a recycled buffer


Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/7e12d894
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/7e12d894
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/7e12d894

Branch: refs/heads/master
Commit: 7e12d8947d68b6ea7928f94176dd0d44fb867351
Parents: 72d5dfe
Author: salyh <he...@gmail.com>
Authored: Tue Oct 7 19:57:37 2014 +0200
Committer: salyh <he...@gmail.com>
Committed: Tue Oct 7 19:57:37 2014 +0200

----------------------------------------------------------------------
 .../johnzon/core/JsonStreamParserImpl.java      |  6 ++
 .../org/apache/johnzon/core/JsonParserTest.java | 67 ++++++++++++++++++++
 2 files changed, 73 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/7e12d894/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
index 931f55f..115da54 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
@@ -279,6 +279,12 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
             bufferPos = 0;
             //end fillbuffer
         } else {
+            
+            //prevent "bufferoverflow
+            if(bufferPos + 1 >= availableCharsInBuffer) {
+                return EOF;
+            }
+            
             bufferPos++;
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/7e12d894/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
index 007a78f..3edd4e8 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
@@ -28,6 +28,7 @@ import java.io.ByteArrayInputStream;
 import java.io.CharArrayReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringReader;
 import java.math.BigDecimal;
 import java.nio.charset.Charset;
 import java.util.Collections;
@@ -653,6 +654,72 @@ public class JsonParserTest {
         assertEquals("\"s\\\"mit\\\"\"", new JsonStringImpl(parser.getString()).toString());
         parser.close();
     }
+    
+    @Test
+    public void bufferOverFlow() {
+        JsonParser parser1 = Json.createParser(new StringReader("{}{}"));
+        
+        try {
+            while(parser1.hasNext()) {
+                parser1.next();
+            }
+            fail();
+        } catch (Exception e1) {
+            //expected
+        } finally {
+            parser1.close();
+        }
+        
+        
+        
+        JsonParser parser2 = Json.createParser(new StringReader("{"));
+        int i=0;
+        try {
+            while(parser2.hasNext()) {
+                    parser2.next();                                
+            }
+            fail();
+        } catch (JsonParsingException e) {
+           //expected
+        } finally {
+            parser2.close();
+        }
+        
+        
+    }
+    
+    @Test
+    public void bufferOverFlow2() {
+        JsonParser parser1 = Json.createParser(new StringReader("{  }{}"));
+        
+        try {
+            while(parser1.hasNext()) {
+                parser1.next();
+            }
+            fail();
+        } catch (Exception e1) {
+            //expected
+        } finally {
+            parser1.close();
+        }
+        
+        
+        
+        JsonParser parser2 = Json.createParser(new StringReader("{"));
+        int i=0;
+        try {
+            while(parser2.hasNext()) {
+                    parser2.next();                                
+            }
+            fail();
+        } catch (JsonParsingException e) {
+           //expected
+        } finally {
+            parser2.close();
+        }
+        
+        
+    }
 
     @Test
     public void dosProtected() {