【发布时间】:2021-10-16 13:50:47
【问题描述】:
有一个问题,coverity 在语义上不会出现此问题的代码位置发现了一个错误(潜在的 OoB)。因为静态分析器的消息,我不想在蓝图中对这个地方做额外的检查。是否可以使用代码注释来抑制此警告?
static struct rule *Rule_sort(struct rule *rp){
int i;
struct rule *pNext;
struct rule *x[32];
memset(x, 0, sizeof(x));
while( rp ){
pNext = rp->next;
rp->next = 0;
for(i=0; i<sizeof(x)/sizeof(x[0]) && x[i]; i++){
rp = Rule_merge(x[i], rp);
x[i] = 0;
}
// potential OoB
x[i] = rp;
rp = pNext;
}
rp = 0;
for(i=0; i<sizeof(x)/sizeof(x[0]); i++){
rp = Rule_merge(x[i], rp);
}
return rp;
}
【问题讨论】:
-
在语义上不会出现这个问题你怎么这么确定?
-
@AndrewHenle,是的,我确定。使用的数组中的单元数与输入列表的大小成对数关系。要使数组溢出,您需要一个包含 2 ^ 33 个元素的列表。之前的代码有一个限制,无法创建这样的列表。我想禁用此功能的检查。
-
所用数组中的单元格数量与输入列表的大小成对数关系。 哦。而且您确定代码没有错误并且永远没有错误?
-
@AndrewHenle,是的,我只是找不到 CWE-119 验证标签来使用代码注释将其标记为故意
-
与修复代码以确保没有溢出并返回或记录错误以提醒所有人存在相比,您在尝试避免修复潜在的缓冲区溢出方面付出了更多的努力是一个错误,万一发生了。这似乎……被误导了。您依赖于一种毫无根据的信念,即某个特定错误“永远不会发生”(这是一个可笑的断言......),并且该代码将来永远不会以它会发生的方式使用。
标签: c code-analysis static-code-analysis coverity