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