You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Juho Mäkinen (JIRA)" <ji...@apache.org> on 2010/06/02 11:05:38 UTC
[jira] Created: (THRIFT-796) TBinaryProtocolAccelerated changes
passed argument types
TBinaryProtocolAccelerated changes passed argument types
--------------------------------------------------------
Key: THRIFT-796
URL: https://issues.apache.org/jira/browse/THRIFT-796
Project: Thrift
Issue Type: Bug
Components: Library (PHP)
Affects Versions: 0.2
Environment: Redhat on x86_64 Intel Linux
Reporter: Juho Mäkinen
Thrift PHP TBinaryProtocolAccelerated has a bug which changes passed argument types outside of the function, polluting variables in other places of the program which uses thrift.
Consider we have a Thrift service with function specified as:
void foo(1:string s);
and we use it in the following way:
<?php
$str = 100;
var_dump($str);
$client->foo($str);
var_dump($str);
?>
results
int(100)
string(3) "100"
So thrift_protocol_write_binary takes $str as an argument and internally converts the passed argument to the type specified in thrift interface (string in this case). This results that $str type is casted from int to string. It's a big problem because TBinaryProtocol doesn't do this, but changing it to use TBinaryProtocolAccelerated instead breaks working programs (it took me a day to figure that thrift was causing a very weird bug in our program).
My teammate digged into the thrift php extension (check his email: http://mail-archives.apache.org/mod_mbox/incubator-thrift-user/201006.mbox/browser) and said this:
"""I looked through the extension code and there's convert_to_* calls on the input
variables, which causes this suprising behaviour. I also tried to replace
convert_to_* calls in binary_serialize with _ex counterparts, but something
went completely wrong."""
I believe that correct way would be that the extension would check if a type conversion needs to be done and makes a copy of the zval before conversion.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.