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() {