[
https://issues.apache.org/jira/browse/THRIFT-1279?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jake Farrell closed THRIFT-1279.
--------------------------------
Resolution: Fixed
Committed, thanks for the patch
> type set is handled incorrectly when writing object
> ---------------------------------------------------
>
> Key: THRIFT-1279
> URL: https://issues.apache.org/jira/browse/THRIFT-1279
> Project: Thrift
> Issue Type: Bug
> Components: PHP - Compiler, PHP - Library
> Affects Versions: 0.7
> Reporter: Darius Staisiunas
> Fix For: 0.8
>
> Attachments: thrift-1279.patch
>
>
> Patch provided in https://issues.apache.org/jira/browse/THRIFT-342 doesn't
> handle object writing correctly:
> if one of the parameters is set
> struct MyStruct {
> 10: string id,
> 20: string name,
> 30: set<string> setOfIDs
> }
> in generated file de-serialization of object is
> public function read($input)
> ...
> $xfer += $input->readString($elem5);
> if (is_scalar($elem5)) {
> $this->setOfIDs[$elem5] = true;
> } else {
> $this->setOfIDs []= $elem5;
> }
> ...
> but when serializing, we are looping only through values of array:
> public function write($input)
> ...
> foreach ($this->setOfIDs as $iter6)
> {
> if (is_scalar($iter6)) {
> $this->setOfIDs[$iter6] = true;
> }
> $xfer += $output->writeString($iter6);
> }
> }
> ...
> But if our element is scalar - we should be iterating through keys.
> it should look like:
> foreach ($this->terminalIds as $iter6 => $iter7)
> {
> if (is_scalar($iter7)) {
> $xfer += $output->writeString($iter6);
> } else {
> $xfer += $output->writeString($iter7);
> }
> }
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira