From cc4fa2bbc833f4a141e8140004f28df8d329c027 Mon Sep 17 00:00:00 2001 From: Wim Dumon Date: Wed, 28 Apr 2021 17:47:58 +0200 Subject: [PATCH] Offer option to disable traversalLimitInWords Use case: large trusted input data file, mapped in memory by MappedByteBuffer, which is often re-queried so a sensible limit cannot be set. --- runtime/src/main/java/org/capnproto/ReaderArena.java | 8 +++++--- runtime/src/main/java/org/capnproto/Serialize.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/ReaderArena.java b/runtime/src/main/java/org/capnproto/ReaderArena.java index 13c9c87..63d8aa2 100644 --- a/runtime/src/main/java/org/capnproto/ReaderArena.java +++ b/runtime/src/main/java/org/capnproto/ReaderArena.java @@ -45,11 +45,13 @@ public final class ReaderArena implements Arena { } @Override - public final void checkReadLimit(int numBytes) { - if (numBytes > limit) { + public final void checkReadLimit(int numWords) { + if (limit == -1) { + return; + } else if (numWords > limit) { throw new DecodeException("Read limit exceeded."); } else { - limit -= numBytes; + limit -= numWords; } } } diff --git a/runtime/src/main/java/org/capnproto/Serialize.java b/runtime/src/main/java/org/capnproto/Serialize.java index 7dbfac0..4d9aeaa 100644 --- a/runtime/src/main/java/org/capnproto/Serialize.java +++ b/runtime/src/main/java/org/capnproto/Serialize.java @@ -145,7 +145,7 @@ public final class Serialize { } bb.position(segmentBase + totalWords * Constants.BYTES_PER_WORD); - if (totalWords > options.traversalLimitInWords) { + if (options.traversalLimitInWords != -1 && totalWords > options.traversalLimitInWords) { throw new DecodeException("Message size exceeds traversal limit."); }