You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "Antoine Pitrou (JIRA)" <ji...@apache.org> on 2018/12/13 13:08:00 UTC

[jira] [Created] (ARROW-4018) [C++] RLE decoder may not big-endian compatible

Antoine Pitrou created ARROW-4018:
-------------------------------------

             Summary: [C++] RLE decoder may not big-endian compatible
                 Key: ARROW-4018
                 URL: https://issues.apache.org/jira/browse/ARROW-4018
             Project: Apache Arrow
          Issue Type: Bug
          Components: C++
    Affects Versions: 0.11.1
            Reporter: Antoine Pitrou


This issue was found by Coverity. The {{RleDecoder::NextCounts}} method has the following code to fetch the repeated literal in repeated runs:

{code:c++}
    bool result =
        bit_reader_.GetAligned<T>(static_cast<int>(BitUtil::CeilDiv(bit_width_, 8)),
                                  reinterpret_cast<T*>(&current_value_));
{code}

Coverity says this:
bq. Pointer "&this->current_value_" points to an object whose effective type is "unsigned long long" (64 bits, unsigned) but is dereferenced as a narrower "unsigned int" (32 bits, unsigned). This may lead to unexpected results depending on machine endianness.
bq. 

In addition, it's not obvious whether {{current_value_}} also needs byte-swapping (presumably, at least in the Parquet file format, it's supposed to be stored in little-endian format in the RLE bitstream).




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)