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