THRIFT-1537:TFramedTransport issues
authorJake Farrell <jfarrell@apache.org>
Thu, 22 Mar 2012 02:40:45 +0000 (02:40 +0000)
committerJake Farrell <jfarrell@apache.org>
Thu, 22 Mar 2012 02:40:45 +0000 (02:40 +0000)
Client: delphi
Patch: Jens Geyer

TFramedTransport fixes for:
 - The offset "off" is ignored, instead always 0 is used fpor reads and writes
 - Trying to write an empty byte array results in range check exceptions

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1303637 13f79535-47bb-0310-9956-ffa450edef68

lib/delphi/src/Thrift.Protocol.pas
lib/delphi/src/Thrift.Transport.pas

index 82c58b1..a54008f 100644 (file)
@@ -972,9 +972,11 @@ begin
 end;\r
 \r
 procedure TBinaryProtocolImpl.WriteBinary( const b: TBytes);\r
+var iLen : Integer;\r
 begin\r
-  WriteI32( Length(b));\r
-  FTrans.Write(b, 0, Length( b));\r
+  iLen := Length(b);\r
+  WriteI32( iLen);\r
+  if iLen > 0 then FTrans.Write(b, 0, iLen);\r
 end;\r
 \r
 procedure TBinaryProtocolImpl.WriteBool(b: Boolean);\r
index f5ccf6e..8464e35 100644 (file)
@@ -1136,7 +1136,9 @@ var
 begin\r
   if FReadBuffer <> nil then\r
   begin\r
-    got := FReadBuffer.Read( Pointer(@buf[0])^, len );\r
+    if len > 0\r
+    then got := FReadBuffer.Read( Pointer(@buf[off])^, len )\r
+    else got := 0;\r
     if got > 0 then\r
     begin\r
       Result := got;\r
@@ -1145,7 +1147,9 @@ begin
   end;\r
 \r
   ReadFrame;\r
-  Result := FReadBuffer.Read( Pointer(@buf[0])^, len );\r
+  if len > 0\r
+  then Result := FReadBuffer.Read( Pointer(@buf[off])^, len)\r
+  else Result := 0;\r
 end;\r
 \r
 procedure TFramedTransportImpl.ReadFrame;\r
@@ -1171,7 +1175,8 @@ end;
 \r
 procedure TFramedTransportImpl.Write(const buf: TBytes; off, len: Integer);\r
 begin\r
-  FWriteBuffer.Write( Pointer(@buf[0])^, len );\r
+  if len > 0\r
+  then FWriteBuffer.Write( Pointer(@buf[off])^, len );\r
 end;\r
 \r
 { TFramedTransport.TFactory }\r