绑定检查和整数溢出

时间:2013-02-08 05:06:18

标签: c

问题很简单:给定start_indexcount,我想看看这些组合是否可用于安全访问具有length元素的数组。我暂时拥有以下内容:

uint32_t start_index = (value from somewhere);
uint32_t count = (value from somewhere);
uint32_t length = (value set earlier);
char *array = (memory allocated earlier);

if(start_index + count < length) {
    // access array starting at start_index
} else {
    // bailout
}

当然,检查是不合适的,因为start_index + count可以超过uint32_t的最大可能值并回绕到一个小值。为了解决这个问题,我想知道将变量提升到64位还是放入第二个条件start_index + count > start_index是否更有效。或许还有其他一些聪明的方法来处理这个问题?

1 个答案:

答案 0 :(得分:2)

您可以通过稍微不同的方式避免溢出:首先检查count是否小于length(否则纾困),然后您可以安全地将start_index与{{1}进行比较}}