Dongchao Ding created THRIFT-3767:
-------------------------------------

             Summary: Read error value in  TCompactProtocol  when reading a 
compact Bool value
                 Key: THRIFT-3767
                 URL: https://issues.apache.org/jira/browse/THRIFT-3767
             Project: Thrift
          Issue Type: Bug
          Components: Python - Library
    Affects Versions: 0.9.1
            Reporter: Dongchao Ding
            Priority: Critical


In TCompactProtocol, bool-value and FieldBegin(TFiled)will be encoded in one 
byte(00010001/00010010, express TRUE and FALSE) .
In python client lib,the code for decoding is as follows :

$result = $this->readUByte($field_type);
    if (($field_type & 0x0f) == TType::STOP) {
      $field_id = 0;
      return $result;
    }
    $delta = $field_type >> 4;
    if ($delta == 0) {
      $result += $this->readI16($field_id);
    } else {
      $field_id = $this->lastFid + $delta;
    }
    $this->lastFid = $field_id;
    // Error , this method always returns a constant value(TType::BOOL).
    $field_type = $this->getTType($field_type & 0x0f);
    if ($field_type == TCompactProtocol::COMPACT_TRUE) {
      $this->state = TCompactProtocol::STATE_BOOL_READ;
      $this->boolValue = true;
    } elseif ($field_type == TCompactProtocol::COMPACT_FALSE) {
      $this->state = TCompactProtocol::STATE_BOOL_READ;
      $this->boolValue = false;
    } else {
      $this->state = TCompactProtocol::STATE_VALUE_READ;
    }
    return $result;


    



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to