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