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(); + } }