[ 
https://issues.apache.org/jira/browse/THRIFT-1240?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marimuthu Ponnambalam updated THRIFT-1240:
------------------------------------------

    Attachment: simple.thrift

Thrift IDL for simple test

> TBinarySerializer.php invalid serialization due to TBufferTransport not 
> flushing last chunk of data into TMemoryBuffer
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-1240
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1240
>             Project: Thrift
>          Issue Type: Bug
>          Components: PHP - Library
>    Affects Versions: 0.6.1
>         Environment: Cent OS and Mac OS 10.5
>            Reporter: Marimuthu Ponnambalam
>            Priority: Critical
>              Labels: TBinarySerializer, invalid, serialization
>             Fix For: 0.6.1
>
>         Attachments: simple.thrift
>
>
> Simple Serialization errors out, due to the TBufferTransport not flushing the 
> data into TMemoryBuffer after $object->write($protocol) in TBinarySerializer.
> Please find the error output of my test program below. It fixed after I added 
> the following line on the serialize method in TBinarySerializer.
> $protocol->getTransport()->flush();
> This because of TBinaryProtocolAccelerated internally wraps TMemoryBuffer 
> within TBufferTransport in its constructor.
>  TBufferTransport write only if the wbuf_ is full (512 bytes) into 
> TMemoryBuffer. Hence data smaller than 512 will not get written into 
> TMemoryBuffer. While getting serialized data from TMemoryBuffer it might not 
> have the last chunk of data which is less than 512 bytes. 
> This outputs invalid serialized data 
> TestSchema$ php testsimple.php 
> Serialized  .
>              mari
> Fatal error: Uncaught exception 'TTransportException' with message 
> 'TMemoryBuffer: Could not read 512 bytes from buffer.' in 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/transport/TMemoryBuffer.php
>  on line 58
> TTransportException: TMemoryBuffer: Could not read 512 bytes from buffer. in 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/transport/TMemoryBuffer.php
>  on line 58
> Call Stack:
>     0.0003     636976   1. {main}() 
> /Users/mponnambalam/work/eclipse/workspace/TestSchema/testsimple.php:0
>     0.0043    1509728   2. TBinarySerializer::deserialize() 
> /Users/mponnambalam/work/eclipse/workspace/TestSchema/testsimple.php:47
>     0.0043    1511808   3. thrift_protocol_read_binary() 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/protocol/TBinarySerializer.php:62
> thrift_protoco_read_binary disabled  ( I commented extension in 
> thrift_protocol.ini) 
>  
> TestSchema$ php testsimple.php 
> Serialized  .
> Fatal error: Uncaught exception 'TTransportException' with message 
> 'TMemoryBuffer: Could not read 1 bytes from buffer.' in 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/transport/TMemoryBuffer.php
>  on line 58
> TTransportException: TMemoryBuffer: Could not read 1 bytes from buffer. in 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/transport/TMemoryBuffer.php
>  on line 58
> Call Stack:
>     0.0003     636976   1. {main}() 
> /Users/mponnambalam/work/eclipse/workspace/TestSchema/testsimple.php:0
>     0.0041    1509944   2. TBinarySerializer::deserialize() 
> /Users/mponnambalam/work/eclipse/workspace/TestSchema/testsimple.php:47
>     0.0041    1512248   3. Person->read() 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/protocol/TBinarySerializer.php:66
>     0.0041    1512472   4. TBinaryProtocol->readFieldBegin() 
> /Users/mponnambalam/work/eclipse/workspace/TestSchema/gen-php/simple/simple_types.php:45
>     0.0041    1512472   5. TBinaryProtocol->readByte() 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/protocol/TBinaryProtocol.php:231
>     0.0041    1512520   6. TBufferedTransport->readAll() 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/protocol/TBinaryProtocol.php:283
>     0.0041    1512568   7. TTransport->readAll() 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/transport/TBufferedTransport.php:109
>     0.0041    1512744   8. TMemoryBuffer->read() 
> /Users/mponnambalam/work/eclipse/workspace/thrift0.6.1/lib/php/src/transport/TTransport.php:87

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to