diff --git a/runtime/src/main/java/org/capnproto/PointerReader.java b/runtime/src/main/java/org/capnproto/PointerReader.java index 0e0bc78..fbaef62 100644 --- a/runtime/src/main/java/org/capnproto/PointerReader.java +++ b/runtime/src/main/java/org/capnproto/PointerReader.java @@ -29,17 +29,27 @@ public final class PointerReader { } public StructReader getStruct() { - return WireHelpers.readStructPointer(this.segment, - this.pointer, - this.nestingLimit); + if (this.segment == null) { + return WireHelpers.readStructPointer(SegmentReader.EMPTY, 0, this.nestingLimit); + } else { + return WireHelpers.readStructPointer(this.segment, + this.pointer, + this.nestingLimit); + } } public ListReader getList(byte expectedElementSize) { - // TODO check nullness - return WireHelpers.readListPointer(this.segment, - this.pointer, - expectedElementSize, - this.nestingLimit); + if (this.segment == null) { + return WireHelpers.readListPointer(SegmentReader.EMPTY, + 0, + expectedElementSize, + this.nestingLimit); + } else { + return WireHelpers.readListPointer(this.segment, + this.pointer, + expectedElementSize, + this.nestingLimit); + } } public Text.Reader getText() { diff --git a/runtime/src/main/java/org/capnproto/SegmentReader.java b/runtime/src/main/java/org/capnproto/SegmentReader.java index 7a59e2e..0ffb294 100644 --- a/runtime/src/main/java/org/capnproto/SegmentReader.java +++ b/runtime/src/main/java/org/capnproto/SegmentReader.java @@ -13,4 +13,6 @@ public class SegmentReader { this.buffer = buffer; this.arena = arena; } + + public static final SegmentReader EMPTY = new SegmentReader(ByteBuffer.allocate(8), null); }