This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag jackson-dataformat-smile-2.0.0
in repository jackson-dataformat-smile.

commit 97eaf00569cf71567815da3a7600aad0fd7c78a3
Author: Tatu Saloranta <[email protected]>
Date:   Tue Mar 6 19:46:54 2012 -0800

    Fix [JACKSON-803] for 2.0
---
 pom.xml                                            |    4 +-
 .../jackson/dataformat/smile/SmileParser.java      |   24 +++++--
 .../jackson/dataformat/smile/SmileTestBase.java    |   17 ++++-
 .../dataformat/smile/TestSmileParserNames.java     |   66 ++++++++++++++++++++
 4 files changed, 101 insertions(+), 10 deletions(-)

diff --git a/pom.xml b/pom.xml
index dbf0edb..59cab89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,7 @@
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-core</artifactId>
-      <version>${project.version}</version>
+      <version>2.0.0-RC2</version>
     </dependency>
 
      <!-- and for testing, JUnit (or TestNG?) is needed -->
@@ -65,7 +65,7 @@
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
-      <version>${project.version}</version>
+      <version>2.0.0-RC2</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git 
a/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java 
b/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java
index e3170c9..945dcf1 100644
--- a/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java
+++ b/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java
@@ -1544,7 +1544,7 @@ public class SmileParser
         }
         return _symbols.addName(baseName, quads, quadLen);
     }
-    
+
     private final void _handleLongFieldName() throws IOException, 
JsonParseException
     {
         // First: gather quads we need, looking for end marker
@@ -1554,24 +1554,36 @@ public class SmileParser
         int q = 0;
 
         while (true) {
+            if (_inputPtr >= _inputEnd) {
+                loadMoreGuaranteed();
+            }
             byte b = inBuf[_inputPtr++];
             if (BYTE_MARKER_END_OF_STRING == b) {
                 bytes = 0;
                 break;
             }
             q = ((int) b) & 0xFF;
+            if (_inputPtr >= _inputEnd) {
+                loadMoreGuaranteed();
+            }
             b = inBuf[_inputPtr++];
             if (BYTE_MARKER_END_OF_STRING == b) {
                 bytes = 1;
                 break;
             }
             q = (q << 8) | (b & 0xFF);
+            if (_inputPtr >= _inputEnd) {
+                loadMoreGuaranteed();
+            }
             b = inBuf[_inputPtr++];
             if (BYTE_MARKER_END_OF_STRING == b) {
                 bytes = 2;
                 break;
             }
             q = (q << 8) | (b & 0xFF);
+            if (_inputPtr >= _inputEnd) {
+                loadMoreGuaranteed();
+            }
             b = inBuf[_inputPtr++];
             if (BYTE_MARKER_END_OF_STRING == b) {
                 bytes = 3;
@@ -1620,8 +1632,8 @@ public class SmileParser
         if ((_inputEnd - _inputPtr) < len) {
             _loadToHaveAtLeast(len);
         }
-       // First: maybe we already have this name decoded?
-       if (len < 5) {
+        // First: maybe we already have this name decoded?
+        if (len < 5) {
            int inPtr = _inputPtr;
            final byte[] inBuf = _inputBuffer;
            int q = inBuf[inPtr] & 0xFF;
@@ -1636,7 +1648,7 @@ public class SmileParser
            }
            _quad1 = q;
            return _symbols.findName(q);
-       }
+        }
         if (len < 9) {
             int inPtr = _inputPtr;
             final byte[] inBuf = _inputBuffer;
@@ -1889,7 +1901,7 @@ public class SmileParser
     }
 
     private final void _finishBigInteger()
-       throws IOException, JsonParseException
+        throws IOException, JsonParseException
     {
         byte[] raw = _read7BitBinaryWithLength();
         _numberBigInt = new BigInteger(raw);
@@ -1900,7 +1912,7 @@ public class SmileParser
         throws IOException, JsonParseException
     {
         // just need 5 bytes to get int32 first; all are unsigned
-       int i = _fourBytesToInt();
+       int i = _fourBytesToInt();
        if (_inputPtr >= _inputEnd) {
                loadMoreGuaranteed();
        }
diff --git 
a/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileTestBase.java 
b/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileTestBase.java
index c01a509..7f8b8ea 100644
--- a/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileTestBase.java
+++ b/src/test/java/com/fasterxml/jackson/dataformat/smile/SmileTestBase.java
@@ -2,6 +2,7 @@ package com.fasterxml.jackson.dataformat.smile;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Arrays;
 
 import org.junit.Assert;
@@ -54,18 +55,30 @@ abstract class SmileTestBase
         return _smileParser(input, false);
     }
 
+    protected SmileParser _smileParser(InputStream in) throws IOException {
+        return _smileParser(in, false);
+    }
+    
     protected SmileParser _smileParser(byte[] input, boolean requireHeader) 
throws IOException
     {
         SmileFactory f = smileFactory(requireHeader, false, false);
        return _smileParser(f, input);
     }
 
-    protected SmileParser _smileParser(SmileFactory f, byte[] input)
-        throws IOException
+    protected SmileParser _smileParser(InputStream in, boolean requireHeader) 
throws IOException
     {
+        SmileFactory f = smileFactory(requireHeader, false, false);
+       return _smileParser(f, in);
+    }
+    
+    protected SmileParser _smileParser(SmileFactory f, byte[] input) throws 
IOException {
         return f.createJsonParser(input);
     }
 
+    protected SmileParser _smileParser(SmileFactory f, InputStream in) throws 
IOException {
+        return f.createJsonParser(in);
+    }
+    
     protected ObjectMapper smileMapper() {
         return smileMapper(false);
     }
diff --git 
a/src/test/java/com/fasterxml/jackson/dataformat/smile/TestSmileParserNames.java
 
b/src/test/java/com/fasterxml/jackson/dataformat/smile/TestSmileParserNames.java
new file mode 100644
index 0000000..7deab74
--- /dev/null
+++ 
b/src/test/java/com/fasterxml/jackson/dataformat/smile/TestSmileParserNames.java
@@ -0,0 +1,66 @@
+package com.fasterxml.jackson.dataformat.smile;
+
+import java.io.*;
+import java.util.Random;
+
+import com.fasterxml.jackson.core.*;
+
+public class TestSmileParserNames extends SmileTestBase
+{
+    public void testLongNames() throws IOException
+    {
+       _testWithName(generateName(5000));
+    }
+    
+    public void testJsonBinForLargeObjects() throws Exception
+    {
+       StringBuilder nameBuf = new StringBuilder("longString");
+           int minLength = 9000;
+           for (int i = 1; nameBuf.length() < minLength; ++i) {
+               nameBuf.append("." + i);
+           }
+           String name = nameBuf.toString();
+           _testWithName(name);
+    }
+    
+    /*
+    /**********************************************************
+    /* Helper methods
+    /**********************************************************
+     */
+    
+    private void _testWithName(String name) throws IOException
+    {
+       byte[] data = _smileDoc("{"+quote(name)+":13}");
+       // important: MUST use InputStream to enforce buffer boundaries!
+       SmileParser p = _smileParser(new ByteArrayInputStream(data));
+       assertNull(p.getCurrentToken());
+       assertToken(JsonToken.START_OBJECT, p.nextToken());
+       assertToken(JsonToken.FIELD_NAME, p.nextToken());
+       assertEquals(name, p.getCurrentName());
+       assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
+       assertEquals(13, p.getIntValue());
+       assertEquals(name, p.getCurrentName());
+       assertToken(JsonToken.END_OBJECT, p.nextToken());
+       assertNull(p.nextToken());
+       p.close();
+    }
+
+    
+    private String generateName(int minLen)
+    {
+       StringBuilder sb = new StringBuilder();
+       Random rnd = new Random(123);
+       while (sb.length() < minLen) {
+               int ch = rnd.nextInt(96);
+               if (ch < 32) { // ascii (single byte)
+                       sb.append((char) (48 + ch));
+               } else if (ch < 64) { // 2 byte
+                       sb.append((char) (128 + ch));
+               } else { // 3 byte
+                       sb.append((char) (4000 + ch));
+               }
+       }
+       return sb.toString();
+    }
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-java/jackson-dataformat-smile.git

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to