From 07e47d41044f96d212408122304cae2b3ad6a325 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sun, 9 May 2021 14:53:54 -0400 Subject: [PATCH] add some documentation about the new 'no limit' option --- runtime/src/main/java/org/capnproto/Arena.java | 2 +- runtime/src/main/java/org/capnproto/ReaderArena.java | 3 ++- .../src/main/java/org/capnproto/ReaderOptions.java | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/Arena.java b/runtime/src/main/java/org/capnproto/Arena.java index bb6c42e..2866f61 100644 --- a/runtime/src/main/java/org/capnproto/Arena.java +++ b/runtime/src/main/java/org/capnproto/Arena.java @@ -23,5 +23,5 @@ package org.capnproto; public interface Arena { public SegmentReader tryGetSegment(int id); - public void checkReadLimit(int numBytes); + public void checkReadLimit(int numWords); } diff --git a/runtime/src/main/java/org/capnproto/ReaderArena.java b/runtime/src/main/java/org/capnproto/ReaderArena.java index 63d8aa2..c499401 100644 --- a/runtime/src/main/java/org/capnproto/ReaderArena.java +++ b/runtime/src/main/java/org/capnproto/ReaderArena.java @@ -26,8 +26,8 @@ import java.nio.ByteBuffer; public final class ReaderArena implements Arena { + // Current limit. -1 means no limit. public long limit; - // current limit public final ArrayList segments; @@ -47,6 +47,7 @@ public final class ReaderArena implements Arena { @Override public final void checkReadLimit(int numWords) { if (limit == -1) { + // No limit. return; } else if (numWords > limit) { throw new DecodeException("Read limit exceeded."); diff --git a/runtime/src/main/java/org/capnproto/ReaderOptions.java b/runtime/src/main/java/org/capnproto/ReaderOptions.java index fa22b40..21cee6d 100644 --- a/runtime/src/main/java/org/capnproto/ReaderOptions.java +++ b/runtime/src/main/java/org/capnproto/ReaderOptions.java @@ -22,7 +22,18 @@ package org.capnproto; public final class ReaderOptions { + /** + How many words are allowed to be read before an exception is thrown, + to protect against denial of service attacks. + + -1 means "no limit". + */ public final long traversalLimitInWords; + + /** + How many pointer indirections deep a message may be before an exception + is thrown. + */ public final int nestingLimit; public ReaderOptions(long traversalLimitInWords, int nestingLimit) {