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);


Reply via email to