Merge branch '2.7'
diff --git a/release-notes/CREDITS b/release-notes/CREDITS
index c5e54ca..4aaca26 100644
--- a/release-notes/CREDITS
+++ b/release-notes/CREDITS
@@ -95,6 +95,11 @@
input of a certain size
(2.7.7)
+Allar Haav (haav@github)
+ * Reportef #317: ArrayIndexOutOfBoundsException: 200 on floating point number with exactly
+ 200-length decimal part
+ (2.7.8)
+
Mikael Staldal (mikaelstaldal@github)
* Contributed fix for #265: `JsonStringEncoder` should allow passing `CharSequence`
(2.8.0)
diff --git a/release-notes/VERSION b/release-notes/VERSION
index 64ec14c..787f7d6 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -50,7 +50,13 @@
for `getCurrentToken()` and `getCurrentTokenId()`, respectively. Existing methods
will likely be deprecated in 2.9.
-2.7.7 (not yet released)
+2.7.8 (not yet released)
+
+#317: ArrayIndexOutOfBoundsException: 200 on floating point number with exactly
+ 200-length decimal part
+ (reported by Allar H)
+
+2.7.7 (27-Aug-2016)
#307: JsonGenerationException: Split surrogate on writeRaw() input thrown for
input of a certain size
diff --git a/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java b/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java
index 5f0515a..dc80f62 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java
@@ -1479,6 +1479,10 @@
int fractLen = 0;
// And then see if we get other parts
if (c == '.') { // yes, fraction
+ if (outPtr >= outBuf.length) {
+ outBuf = _textBuffer.finishCurrentSegment();
+ outPtr = 0;
+ }
outBuf[outPtr++] = c;
fract_loop:
diff --git a/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java b/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
index 83e6309..5a0dcda 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/UTF8StreamJsonParser.java
@@ -1573,6 +1573,10 @@
// And then see if we get other parts
if (c == INT_PERIOD) { // yes, fraction
+ if (outPtr >= outBuf.length) {
+ outBuf = _textBuffer.finishCurrentSegment();
+ outPtr = 0;
+ }
outBuf[outPtr++] = (char) c;
fract_loop:
@@ -1647,7 +1651,7 @@
// Ok; unless we hit end-of-input, need to push last char read back
if (!eof) {
--_inputPtr;
- // As per #105, need separating space between root values; check here
+ // As per [core#105], need separating space between root values; check here
if (_parsingContext.inRoot()) {
_verifyRootSpace(c);
}
diff --git a/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java b/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java
index d91f5e9..6c8da43 100644
--- a/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java
+++ b/src/test/java/com/fasterxml/jackson/core/read/NumberParsingTest.java
@@ -1,5 +1,8 @@
package com.fasterxml.jackson.core.read;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringReader;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -561,7 +564,36 @@
}
p.close();
}
-
+
+ // [core#317]
+ public void testLongerFloatingPoint() throws Exception
+ {
+ StringBuilder input = new StringBuilder();
+ for (int i = 1; i < 201; i++) {
+ input.append(1);
+ }
+ input.append(".0");
+ final String DOC = input.toString();
+
+ // test out with both Reader and ByteArrayInputStream
+ JsonParser p;
+
+ p = FACTORY.createParser(new StringReader(DOC));
+ _testLongerFloat(p, DOC);
+ p.close();
+
+ p = FACTORY.createParser(new ByteArrayInputStream(DOC.getBytes("UTF-8")));
+ _testLongerFloat(p, DOC);
+ p.close();
+ }
+
+ private void _testLongerFloat(JsonParser p, String text) throws IOException
+ {
+ assertToken(JsonToken.VALUE_NUMBER_FLOAT, p.nextToken());
+ assertEquals(text, p.getText());
+ assertNull(p.nextToken());
+ }
+
/*
/**********************************************************
/* Helper methods