Fixed [Issue-2], decoding problem with surrogate pairs, long strings.

diff --git a/release-notes/VERSION b/release-notes/VERSION
index 883816d..177281b 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -8,6 +8,9 @@
 
   Fixes:
 
+  * [Smile/Issue-2] SmileParser failed to decode surrogate-pair characters for
+    long Strings
+   (reported by Steven S)
   * [Issue-11] JsonParser.getValueAsLong() returning int, not long
    (reported by Daniel L)
   * [JACKSON-829] Custom serializers not working for List<String> properties,
diff --git a/src/smile/java/org/codehaus/jackson/smile/SmileParser.java b/src/smile/java/org/codehaus/jackson/smile/SmileParser.java
index 0d2c4bb..cf908e3 100644
--- a/src/smile/java/org/codehaus/jackson/smile/SmileParser.java
+++ b/src/smile/java/org/codehaus/jackson/smile/SmileParser.java
@@ -352,9 +352,10 @@
     @Override
     public JsonLocation getCurrentLocation()
     {
+        long byteOffset = _currInputProcessed + _inputPtr;
         return new JsonLocation(_ioContext.getSourceReference(),
-                _currInputProcessed + _inputPtr, // bytes
-                -1, -1, -1); // char offset, line, column
+                byteOffset, // bytes
+                -1, -1, (int) byteOffset); // char offset, line, column
     }
 
     /*
@@ -2220,7 +2221,7 @@
                     c = _decodeUtf8_3(c);
                 }
                 break;
-            case 4: // 4-byte UTF
+            case 3: // 4-byte UTF
                 c = _decodeUtf8_4(c);
                 // Let's add first part right away:
                 outBuf[outPtr++] = (char) (0xD800 | (c >> 10));
diff --git a/src/test/org/codehaus/jackson/smile/TestSmileParserUnicode.java b/src/test/org/codehaus/jackson/smile/TestSmileParserUnicode.java
new file mode 100644
index 0000000..b73ad3d
--- /dev/null
+++ b/src/test/org/codehaus/jackson/smile/TestSmileParserUnicode.java
@@ -0,0 +1,27 @@
+package org.codehaus.jackson.smile;
+
+import java.io.IOException;
+
+import org.codehaus.jackson.JsonToken;
+
+public class TestSmileParserUnicode extends SmileTestBase
+{
+    // [Issue-2]: probs with Surrogate handling
+    public void testLongUnicodeWithSurrogates() throws IOException
+    {
+        final String SURROGATE_CHARS = "\ud834\udd1e";
+        StringBuilder sb = new StringBuilder(300);
+        while (sb.length() < 300) {
+            sb.append(SURROGATE_CHARS);
+        }
+        final String TEXT = sb.toString();
+        byte[] data = _smileDoc(quote(TEXT));
+
+        SmileParser p = _smileParser(data);
+        assertNull(p.getCurrentToken());
+        assertToken(JsonToken.VALUE_STRING, p.nextToken());
+        assertEquals(TEXT, p.getText());
+        assertNull(p.nextToken());
+    }
+
+}