Fix integer underflow bug.

This commit is contained in:
David Renshaw 2015-03-08 20:09:56 -04:00
parent 6cd61ff149
commit 2b1d5c201e
2 changed files with 12 additions and 2 deletions

View file

@ -379,6 +379,12 @@ class EncodingSuite extends FunSuite {
} }
} }
test("TextBuilderIntUnderflow") {
val message = new MessageBuilder();
val root = message.initRoot(TestAnyPointer.factory);
root.getAnyPointerField.initAs(org.capnproto.Data.factory, 0);
a [DecodeException] should be thrownBy root.getAnyPointerField.getAs(org.capnproto.Text.factory);
}
test("VoidListAmplification") { test("VoidListAmplification") {
val builder = new MessageBuilder(); val builder = new MessageBuilder();

View file

@ -807,9 +807,13 @@ final class WireHelpers {
} }
//# Subtract 1 from the size for the NUL terminator. int size = ListPointer.elementCount(resolved.ref);
if (size == 0 ||
resolved.segment.buffer.get(resolved.ptr * Constants.BYTES_PER_WORD + size - 1) != 0) {
throw new DecodeException("Text blob missing NUL terminator.");
}
return new Text.Builder(resolved.segment.buffer, resolved.ptr * Constants.BYTES_PER_WORD, return new Text.Builder(resolved.segment.buffer, resolved.ptr * Constants.BYTES_PER_WORD,
ListPointer.elementCount(resolved.ref) - 1); size - 1);
} }