CXX.SUSPICIOUS_INDEX_CHECK.CALL
当访问其他函数中的数组之前存在可疑的索引检查时,CXX.SUSPICIOUS_INDEX_CHECK.CALL 检查器将查找缺陷。
漏洞与风险
如果超出数组大小的索引访问数组,可能会导致数据损坏、操作不当或崩溃。
缓解与预防
在访问特定索引处的数组之前,执行适当的边界检查。
漏洞代码示例
复制
int get_index();
void set(int* arr, int index) {
arr[index] = 0;
}
int main() {
int SIZE = 15;
int arr[10];
int index = get_index();
if (index >= SIZE) {
return 0;
}
set(arr, index);
}
Klocwork 在第 15 行报告 CXX.SUSPICIOUS_INDEX_CHECK.CALL,提醒用户关注第 12 行的可疑索引检查。
在另一个函数集中,如果第 4 行的索引值范围为 10-14,则可能取消引用数组,这可能会导致缓冲区溢出。
修正代码示例
复制
int get_index();
void set(int* arr, int index) {
arr[index] = 0;
}
int main() {
int SIZE = 10;
int arr[10];
int index = get_index();
if (index >= SIZE) {
return 0;
}
set(arr, index);
}
不会发生缓冲区溢出,因为第 12 行的约束条件“index >= SIZE”排除了所有不良行为。