Fixed [JACKSON-738], problems with Unicode surrogates, skipping
diff --git a/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java b/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java index 00527ed..24939c2 100644 --- a/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java +++ b/src/java/org/codehaus/jackson/impl/Utf8StreamParser.java
@@ -2029,7 +2029,7 @@ if (c == INT_QUOTE) { break main_loop; } - + switch (codes[c]) { case 1: // backslash _decodeEscaped(); @@ -2732,6 +2732,7 @@ if (_inputPtr >= _inputEnd) { loadMoreGuaranteed(); } + d = (int) _inputBuffer[_inputPtr++]; if ((d & 0xC0) != 0x080) { _reportInvalidOther(d & 0xFF, _inputPtr); }
diff --git a/src/test/org/codehaus/jackson/main/TestUnicode.java b/src/test/org/codehaus/jackson/main/TestUnicode.java new file mode 100644 index 0000000..c10813f --- /dev/null +++ b/src/test/org/codehaus/jackson/main/TestUnicode.java
@@ -0,0 +1,38 @@ +package org.codehaus.jackson.main; + +import java.io.IOException; + +import org.codehaus.jackson.*; + +public class TestUnicode extends main.BaseTest +{ + public void testSurrogates() throws Exception + { + JsonFactory f = new JsonFactory(); + _testSurrogates(f, true); + _testSurrogates(f, false); + } + + /* + /********************************************************** + /* Helper methods + /********************************************************** + */ + + private void _testSurrogates(JsonFactory f, boolean checkText) throws IOException + { + byte[] json = "{\"text\":\"\uD83D\uDE03\"}".getBytes("UTF-8"); + // first + JsonParser jp = f.createJsonParser(json); + assertToken(JsonToken.START_OBJECT, jp.nextToken()); + assertToken(JsonToken.FIELD_NAME, jp.nextToken()); + if (checkText) { + assertEquals("text", jp.getText()); + } + assertToken(JsonToken.VALUE_STRING, jp.nextToken()); + if (checkText) { + assertEquals("\uD83D\uDE03", jp.getText()); + } + assertToken(JsonToken.END_OBJECT, jp.nextToken()); + } +}