THRIFT-1041. java: TDeserializer holds onto a reference of the array it reads after it is done deserializing

This patch makes sure that after using the bytes passed in, no references are retained.



git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1063820 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/java/src/org/apache/thrift/TDeserializer.java b/lib/java/src/org/apache/thrift/TDeserializer.java
index dbefcd8..803d9c6 100644
--- a/lib/java/src/org/apache/thrift/TDeserializer.java
+++ b/lib/java/src/org/apache/thrift/TDeserializer.java
@@ -68,6 +68,7 @@
       trans_.reset(bytes);
       base.read(protocol_);
     } finally {
+      trans_.clear();
       protocol_.reset();
     }
   }
@@ -108,6 +109,7 @@
     } catch (Exception e) {
       throw new TException(e);
     } finally {
+      trans_.clear();
       protocol_.reset();
     }
   }
@@ -228,6 +230,7 @@
     } catch (Exception e) {
       throw new TException(e);
     } finally {
+      trans_.clear();
       protocol_.reset();
     }
   }
@@ -284,6 +287,7 @@
     } catch (Exception e) {
       throw new TException(e);
     } finally {
+      trans_.clear();
       protocol_.reset();
     }
   }
diff --git a/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java b/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java
index 13b5f83..2530dcc 100644
--- a/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java
+++ b/lib/java/src/org/apache/thrift/transport/TMemoryInputTransport.java
@@ -45,6 +45,10 @@
     endPos_ = offset + length;
   }
 
+  public void clear() {
+    buf_ = null;
+  }
+
   @Override
   public void close() {}