Jens Geyer created THRIFT-5987:
----------------------------------

             Summary: Fix PHP protocol type-safety bugs in readBool and 
popContext
                 Key: THRIFT-5987
                 URL: https://issues.apache.org/jira/browse/THRIFT-5987
             Project: Thrift
          Issue Type: Bug
          Components: PHP - Library
            Reporter: Jens Geyer


Three type-safety bugs introduced when native PHP type declarations were added 
to the protocol classes.

h3. TCompactProtocol::readBool — integer written through a bool-typed reference

{{readBool(?bool &$bool)}} passes {{$bool}} directly to {{readByte(?int 
&$byte)}} in the {{STATE_CONTAINER_READ}} branch. {{readByte}} unpacks a raw 
byte and writes an integer back through the reference, leaving a 
{{?bool}}-declared variable holding an integer value.

*Fix:* route through a local {{?int $byte}} variable and cast {{(bool)$byte}} 
before assigning to {{$bool}}.

h3. TJSONProtocol::popContext — nullable array_pop result assigned to 
non-nullable property

{{popContext()}} does {{$this->context = array_pop($this->contextStack)}}. 
Because the declared type of {{$context}} is the non-nullable {{BaseContext}}, 
a context-stack underflow causes a {{TypeError}} instead of behaving gracefully.

*Fix:* use null-coalescing fallback: {{array_pop(...) ?? new BaseContext()}}.

h3. TCompactProtocolTest — missing $size assertion in testWriteListBegin / 
testWriteSettBegin

Both tests changed their {{writeCollectionBegin}} mock expectation from 
{{->with(TType::STRING, 1)}} to {{->with(TType::STRING)}}, silently dropping 
verification that the element count is forwarded correctly.

*Fix:* restore {{->with(TType::STRING, 1)}} in both test methods.

See also: https://github.com/apache/thrift/pull/3467



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to