crunch icon indicating copy to clipboard operation
crunch copied to clipboard

`crunch/inc/crn_defs.h: warning #175: subscript out of range` with ICC

Open illwieckz opened this issue 1 year ago • 1 comments

I get this when building the Damon engine with ICC:

crunch/inc/crn_defs.h(236): warning #175: subscript out of range
          return (m_buf[0] << 24U) | (m_buf[1] << 16U) | (m_buf[2] << 8U) | (m_buf[3]);
                                                                            ^
          detected during instantiation of "crnd::crn_packed_uint<N>::operator unsigned int() const [with N=3U]" at line 2242 of "crunch/inc/crn_decomp.h"

crunch/inc/crn_defs.h(234): warning #175: subscript out of range
          return (m_buf[0] << 16U) | (m_buf[1] << 8U) | (m_buf[2]);
                                                        ^
          detected during instantiation of "crnd::crn_packed_uint<N>::operator unsigned int() const [with N=2U]" at line 2198 of "crunch/inc/crn_decomp.h"

crunch/inc/crn_defs.h(236): warning #175: subscript out of range
          return (m_buf[0] << 24U) | (m_buf[1] << 16U) | (m_buf[2] << 8U) | (m_buf[3]);
                                                          ^
          detected during instantiation of "crnd::crn_packed_uint<N>::operator unsigned int() const [with N=2U]" at line 2198 of "crunch/inc/crn_decomp.h"

crunch/inc/crn_defs.h(236): warning #175: subscript out of range
          return (m_buf[0] << 24U) | (m_buf[1] << 16U) | (m_buf[2] << 8U) | (m_buf[3]);
                                                                                  ^
          detected during instantiation of "crnd::crn_packed_uint<N>::operator unsigned int() const [with N=2U]" at line 2198 of "crunch/inc/crn_decomp.h"

illwieckz avatar Mar 03 '25 07:03 illwieckz

It looks to be the same problem CodeQL was reporting:

The following cpp/static-buffer-overflow critical error is dismissed as it is a false positive:

Potential buffer-overflow: 'm_buf' has size 2 but 'm_buf[3]' may be accessed here.

It is a false positive because the tool fails to understand that the value tested for the switch case is the array size itself.

See: https://github.com/DaemonEngine/crunch/pull/60#issue-2393352483

illwieckz avatar Mar 17 '25 12:03 illwieckz