You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@arrow.apache.org by "Antoine Pitrou (Jira)" <ji...@apache.org> on 2020/05/11 13:21:00 UTC
[jira] [Resolved] (ARROW-4018) [C++] RLE decoder may not big-endian
compatible
[ https://issues.apache.org/jira/browse/ARROW-4018?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Antoine Pitrou resolved ARROW-4018.
-----------------------------------
Fix Version/s: 1.0.0
Resolution: Fixed
Issue resolved by pull request 7144
[https://github.com/apache/arrow/pull/7144]
> [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
> Assignee: Kazuaki Ishizaki
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.0.0
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> 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*>(¤t_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
(v8.3.4#803005)