Skip to content

Commit d889d9a

Browse files
author
Mark
committed
fixed VPack parsing (issue #80)
1 parent 940f500 commit d889d9a

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/main/java/com/arangodb/velocypack/VPackBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -729,9 +729,9 @@ protected VPackBuilder close(final boolean sort)
729729
// subvalue
730730
// for the index table
731731
offsetSize = 1;
732-
} else if ((size - 1 - tos) + 2 * in.size() <= 0xffff) {
732+
} else if ((size - tos) + 2 * in.size() <= 0xffff) {
733733
offsetSize = 2;
734-
} else if (((size - 1 - tos) / 2) + 4 * in.size() / 2 <= Integer.MAX_VALUE/* 0xffffffffu */) {
734+
} else if (((size - tos) / 2) + 4 * in.size() / 2 <= Integer.MAX_VALUE/* 0xffffffffu */) {
735735
offsetSize = 4;
736736
} else {
737737
offsetSize = 8;

src/test/java/com/arangodb/velocypack/VPackBuilderTest.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import static org.junit.Assert.assertThat;
2626
import static org.junit.Assert.fail;
2727

28+
import java.io.UnsupportedEncodingException;
2829
import java.math.BigInteger;
30+
import java.nio.charset.Charset;
2931
import java.util.Date;
3032

3133
import org.junit.Test;
@@ -914,7 +916,28 @@ public void addBitInteger() {
914916
@Test
915917
public void objectWithByteSize256() {
916918
final StringBuilder aa = new StringBuilder();
917-
final int stringLength = 231;
919+
final int stringLength = 256 - 25;
920+
for (int i = 0; i < stringLength; ++i) {
921+
aa.append("a");
922+
}
923+
final String foo = "foo";
924+
final String bar1 = "bar1";
925+
final String bar2 = "bar2";
926+
final VPackSlice vpack = new VPackBuilder().add(ValueType.OBJECT).add(foo, ValueType.OBJECT).add(bar2, "")
927+
.add(bar1, aa.toString()).close().close().slice();
928+
929+
assertThat(vpack.isObject(), is(true));
930+
assertThat(vpack.get(foo).isObject(), is(true));
931+
assertThat(vpack.get(foo).get(bar1).isString(), is(true));
932+
assertThat(vpack.get(foo).get(bar1).getLength(), is(stringLength));
933+
assertThat(vpack.get(foo).get(bar2).isString(), is(true));
934+
assertThat(vpack.get(foo).get(bar2).getLength(), is(0));
935+
}
936+
937+
@Test
938+
public void objectWithByteSizeOver65536() {
939+
final StringBuilder aa = new StringBuilder();
940+
final int stringLength = 65536 - 25 - 8;
918941
for (int i = 0; i < stringLength; ++i) {
919942
aa.append("a");
920943
}

0 commit comments

Comments
 (0)