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]

Reply via email to