summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Reiss <dreiss@apache.org>2010-04-26 19:37:44 +0000
committerDavid Reiss <dreiss@apache.org>2010-04-26 19:37:44 +0000
commita005777ae5dabb49ade7d6d6306bd3391210e3aa (patch)
tree83a0a12a75fb50b7ef9ab74e3a5d69420bd00112
parent97d21c853d543dbba497650badcf10334910edaf (diff)
downloadthrift-a005777ae5dabb49ade7d6d6306bd3391210e3aa.tar.gz
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
-rw-r--r--lib/java/src/org/apache/thrift/transport/TFramedTransport.java23
1 files changed, 22 insertions, 1 deletions
diff --git a/lib/java/src/org/apache/thrift/transport/TFramedTransport.java b/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
index 1387ac131..fab9c9b64 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);