From a005777ae5dabb49ade7d6d6306bd3391210e3aa Mon Sep 17 00:00:00 2001 From: David Reiss Date: Mon, 26 Apr 2010 19:37:44 +0000 Subject: [PATCH] THRIFT-601. java: Allow a maximum frame size for TFramedTransport git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@938205 13f79535-47bb-0310-9956-ffa450edef68 --- .../thrift/transport/TFramedTransport.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/java/src/org/apache/thrift/transport/TFramedTransport.java b/lib/java/src/org/apache/thrift/transport/TFramedTransport.java index 1387ac13..fab9c9b6 100644 --- a/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +++ b/lib/java/src/org/apache/thrift/transport/TFramedTransport.java @@ -27,6 +27,10 @@ import org.apache.thrift.TByteArrayOutputStream; */ public class TFramedTransport extends TTransport { + protected static final int DEFAULT_MAX_LENGTH = 0x7FFFFFFF; + + private int maxLength_; + /** * Underlying transport */ @@ -44,19 +48,32 @@ public class TFramedTransport extends TTransport { private TMemoryInputTransport readBuffer_ = new TMemoryInputTransport(new byte[0]); public static class Factory extends TTransportFactory { + private int maxLength_; + public Factory() { + maxLength_ = TFramedTransport.DEFAULT_MAX_LENGTH; + } + + public Factory(int maxLength) { + maxLength_ = maxLength; } public TTransport getTransport(TTransport base) { - return new TFramedTransport(base); + return new TFramedTransport(base, maxLength_); } } /** * Constructor wraps around another tranpsort */ + public TFramedTransport(TTransport transport, int maxLength) { + transport_ = transport; + maxLength_ = maxLength; + } + public TFramedTransport(TTransport transport) { transport_ = transport; + maxLength_ = TFramedTransport.DEFAULT_MAX_LENGTH; } public void open() throws TTransportException { @@ -118,6 +135,10 @@ public class TFramedTransport extends TTransport { throw new TTransportException("Read a negative frame size (" + size + ")!"); } + if (size > maxLength_) { + throw new TTransportException("Frame size (" + size + ") larger than max length (" + maxLength_ + ")!"); + } + byte[] buff = new byte[size]; transport_.readAll(buff, 0, size); readBuffer_.reset(buff); -- 2.17.1