[jackson-dataformat-smile] 21/31: Fix [JACKSON-803] for 2.0
Hilko Bengen
bengen at alioth.debian.org
Mon Sep 2 17:37:26 UTC 2013
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 <tsaloranta at gmail.com>
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
More information about the pkg-java-commits
mailing list