From 906bab78f99e87c1794745f37620943c115c154f Mon Sep 17 00:00:00 2001 From: Amer Banet Date: Wed, 13 Dec 2017 20:57:59 +0100 Subject: [PATCH] Added pointer index check to StructReader._pointerFieldIsNull and StructBuilder._pointerFieldIsNull This fixes an IndexOutOfBoundsException when checking for existence of later added fields which are only known on the receiver side (working with different schema versions) --- runtime/src/main/java/org/capnproto/StructBuilder.java | 2 +- runtime/src/main/java/org/capnproto/StructReader.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/StructBuilder.java b/runtime/src/main/java/org/capnproto/StructBuilder.java index 548e6a0..caa3e6a 100644 --- a/runtime/src/main/java/org/capnproto/StructBuilder.java +++ b/runtime/src/main/java/org/capnproto/StructBuilder.java @@ -167,7 +167,7 @@ public class StructBuilder { } protected final boolean _pointerFieldIsNull(int ptrIndex) { - return this.segment.buffer.getLong((this.pointers + ptrIndex) * Constants.BYTES_PER_WORD) == 0; + return ptrIndex >= this.pointerCount || this.segment.buffer.getLong((this.pointers + ptrIndex) * Constants.BYTES_PER_WORD) == 0; } protected final void _clearPointerField(int ptrIndex) { diff --git a/runtime/src/main/java/org/capnproto/StructReader.java b/runtime/src/main/java/org/capnproto/StructReader.java index 1bc7e4f..8a21a21 100644 --- a/runtime/src/main/java/org/capnproto/StructReader.java +++ b/runtime/src/main/java/org/capnproto/StructReader.java @@ -151,7 +151,7 @@ public class StructReader { } protected final boolean _pointerFieldIsNull(int ptrIndex) { - return this.segment.buffer.getLong((this.pointers + ptrIndex) * Constants.BYTES_PER_WORD) == 0; + return ptrIndex >= this.pointerCount || this.segment.buffer.getLong((this.pointers + ptrIndex) * Constants.BYTES_PER_WORD) == 0; } protected final T _getPointerField(FromPointerReader factory, int ptrIndex) {