From: Jake Farrell Date: Thu, 22 Mar 2012 02:40:45 +0000 (+0000) Subject: THRIFT-1537:TFramedTransport issues X-Git-Tag: 0.9.1~426 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=9c6773aeef8ae25444bf9b4830edfe80b2e9aa7e;p=common%2Fthrift.git THRIFT-1537:TFramedTransport issues 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 --- diff --git a/lib/delphi/src/Thrift.Protocol.pas b/lib/delphi/src/Thrift.Protocol.pas index 82c58b1a..a54008f2 100644 --- a/lib/delphi/src/Thrift.Protocol.pas +++ b/lib/delphi/src/Thrift.Protocol.pas @@ -972,9 +972,11 @@ begin end; procedure TBinaryProtocolImpl.WriteBinary( const b: TBytes); +var iLen : Integer; begin - WriteI32( Length(b)); - FTrans.Write(b, 0, Length( b)); + iLen := Length(b); + WriteI32( iLen); + if iLen > 0 then FTrans.Write(b, 0, iLen); end; procedure TBinaryProtocolImpl.WriteBool(b: Boolean); diff --git a/lib/delphi/src/Thrift.Transport.pas b/lib/delphi/src/Thrift.Transport.pas index f5ccf6e3..8464e352 100644 --- a/lib/delphi/src/Thrift.Transport.pas +++ b/lib/delphi/src/Thrift.Transport.pas @@ -1136,7 +1136,9 @@ var begin if FReadBuffer <> nil then begin - got := FReadBuffer.Read( Pointer(@buf[0])^, len ); + if len > 0 + then got := FReadBuffer.Read( Pointer(@buf[off])^, len ) + else got := 0; if got > 0 then begin Result := got; @@ -1145,7 +1147,9 @@ begin end; ReadFrame; - Result := FReadBuffer.Read( Pointer(@buf[0])^, len ); + if len > 0 + then Result := FReadBuffer.Read( Pointer(@buf[off])^, len) + else Result := 0; end; procedure TFramedTransportImpl.ReadFrame; @@ -1171,7 +1175,8 @@ end; procedure TFramedTransportImpl.Write(const buf: TBytes; off, len: Integer); begin - FWriteBuffer.Write( Pointer(@buf[0])^, len ); + if len > 0 + then FWriteBuffer.Write( Pointer(@buf[off])^, len ); end; { TFramedTransport.TFactory }