Author: dreiss
Date: Mon Apr 26 19:37:44 2010
New Revision: 938205
URL: http://svn.apache.org/viewvc?rev=938205&view=rev
Log:
THRIFT-601. java: Allow a maximum frame size for TFramedTransport
Modified:
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
Modified:
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java?rev=938205&r1=938204&r2=938205&view=diff
==============================================================================
---
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
(original)
+++
incubator/thrift/trunk/lib/java/src/org/apache/thrift/transport/TFramedTransport.java
Mon Apr 26 19:37:44 2010
@@ -27,6 +27,10 @@ import org.apache.thrift.TByteArrayOutpu
*/
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 TT
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 TT
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);