WillAyd opened a new issue, #672:
URL: https://github.com/apache/arrow-nanoarrow/issues/672
Running clang-tidy locally I get the following error:
<details>
```
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:387:32:
warning: The left operand of '!=' is a garbage value due to array index out of
bounds [clang-analyzer-core.UndefinedBinaryOperatorResult]
if (words_little_endian[i] != 0) {
~~~~~~~~~~~~~~~~~~~~~~ ^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:363:7:
note: Assuming field 'low_word_index' is not equal to 0
if (decimal->low_word_index == 0) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:363:3:
note: Taking false branch
if (decimal->low_word_index == 0) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:367:21:
note: Assuming 'i' is >= field 'n_words'
for (int i = 0; i < decimal->n_words; i++) {
^~~~~~~~~~~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:367:5:
note: Loop condition is false. Execution continues on line 373
for (int i = 0; i < decimal->n_words; i++) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:373:7:
note: Assuming 'is_negative' is 0
if (is_negative) {
^~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:373:3:
note: Taking false branch
if (is_negative) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:386:38:
note: Assuming 'i' is >= 0
for (int i = decimal->n_words - 1; i >= 0; i--) {
^~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:386:3:
note: Loop condition is true. Entering loop body
for (int i = decimal->n_words - 1; i >= 0; i--) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:387:9:
note: Assuming the condition is false
if (words_little_endian[i] != 0) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:387:5:
note: Taking false branch
if (words_little_endian[i] != 0) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:386:46:
note: The value 2147483646 is assigned to 'i'
for (int i = decimal->n_words - 1; i >= 0; i--) {
^~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:386:3:
note: Loop condition is true. Entering loop body
for (int i = decimal->n_words - 1; i >= 0; i--) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:387:32:
note: The left operand of '!=' is a garbage value due to array index out of
bounds
if (words_little_endian[i] != 0) {
~~~~~~~~~~~~~~~~~~~~~~ ^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:420:38:
warning: The left operand of '>>' is a garbage value
[clang-analyzer-core.UndefinedBinaryOperatorResult]
uint32_t hi = (uint32_t)(*elem >> 32);
~~~~~ ^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:363:7:
note: Assuming field 'low_word_index' is not equal to 0
if (decimal->low_word_index == 0) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:363:3:
note: Taking false branch
if (decimal->low_word_index == 0) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:367:21:
note: Assuming 'i' is >= field 'n_words'
for (int i = 0; i < decimal->n_words; i++) {
^~~~~~~~~~~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:367:5:
note: Loop condition is false. Execution continues on line 373
for (int i = 0; i < decimal->n_words; i++) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:373:7:
note: Assuming 'is_negative' is 0
if (is_negative) {
^~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:373:3:
note: Taking false branch
if (is_negative) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:386:38:
note: Assuming 'i' is >= 0
for (int i = decimal->n_words - 1; i >= 0; i--) {
^~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:386:3:
note: Loop condition is true. Entering loop body
for (int i = decimal->n_words - 1; i >= 0; i--) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:387:9:
note: Assuming the condition is true
if (words_little_endian[i] != 0) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:387:5:
note: Taking true branch
if (words_little_endian[i] != 0) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:389:7:
note: Execution continues on line 394
break;
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:394:3:
note: Taking false branch
if (most_significant_elem_idx == -1) {
^
/home/willayd/clones/arrow-nanoarrow/builddir/../src/nanoarrow/common/utils.c:420:38:
note: The left operand of '>>' is a garbage value
uint32_t hi = (uint32_t)(*elem >> 32);
~~~~~ ^
2 warnings generated.
```
</details>
I think clang-tidy is missing the assurance that `decimal->n_words <=
sizeof(words_little_endian)` in this function. Is there a macro that should be
used to make that assertion?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]