Fix [JACKSON-889] for 1.9.x
diff --git a/release-notes/VERSION b/release-notes/VERSION
index 8a7494a..cfffe0e 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -7,6 +7,7 @@
* [JACKSON-887]: StackOverflow with parameterized sub-class field
(reported by Alexander M)
+* [JACKSON-889]: Parsing error in 'nextFieldName()'
------------------------------------------------------------------------
=== History: ===
diff --git a/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java b/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java
index 2c3db93..9ff753e 100644
--- a/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java
+++ b/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java
@@ -730,7 +730,7 @@
{
// very first thing: common case, colon, value, no white space
int i;
- if (_inputPtr < _inputEnd && _inputBuffer[_inputPtr] == INT_COLON) { // fast case first
+ if (_inputPtr < (_inputEnd-1) && _inputBuffer[_inputPtr] == INT_COLON) { // fast case first
++_inputPtr;
i = _inputBuffer[_inputPtr++];
if (i == INT_QUOTE) {
diff --git a/src/test/org/codehaus/jackson/impl/TestUtf8Parser.java b/src/test/org/codehaus/jackson/impl/TestUtf8Parser.java
index a7c7771..002e683 100644
--- a/src/test/org/codehaus/jackson/impl/TestUtf8Parser.java
+++ b/src/test/org/codehaus/jackson/impl/TestUtf8Parser.java
@@ -3,6 +3,7 @@
import main.BaseTest;
import org.codehaus.jackson.*;
+import org.codehaus.jackson.io.SerializedString;
import java.io.*;
import java.util.Random;
@@ -168,4 +169,26 @@
assertEquals(VALUE, act);
jp.close();
}
+
+ // [JACKSON-889]
+ public void testNextFieldName() throws IOException
+ {
+ JsonFactory f = new JsonFactory();
+ SerializedString id = new SerializedString("id");
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ os.write('{');
+ for (int i = 0; i < 3994; i++) {
+ os.write(' ');
+ }
+ os.write("\"id\":2".getBytes("UTF-8"));
+ os.write('}');
+
+ JsonParser parser = f.createJsonParser(new ByteArrayInputStream(os.toByteArray()));
+ assertEquals(parser.nextToken(), JsonToken.START_OBJECT);
+ assertTrue(parser.nextFieldName(id));
+ assertEquals(parser.nextToken(), JsonToken.VALUE_NUMBER_INT);
+ assertEquals(parser.nextToken(), JsonToken.END_OBJECT);
+ parser.close();
+ }
}