奇怪的Klockwork发现(缓冲区溢出)

时间:2011-08-24 05:52:15

标签: c static-analysis klocwork

我无法弄清楚这一点。我有以下代码:

#define SIZE 1000
#define MEMORY 0x10000000

unsigned char table[SIZE];
int i;

for(i=0;i<SIZE;i++) {
    table[i] = *(unsigned char*)(MEMORY +i);
}

Klockwork告诉我

  

缓冲区溢出,'table'的数组索引可能超出范围。大小为1000(调整大小为250)的数组'表'可以使用索引值250..999。

这里有真正的问题吗?如果不存在,这似乎是非常明显的误报。

1 个答案:

答案 0 :(得分:4)

此代码没有问题:Frama-C确认使用此命令行: frama-c -val -absolute-valid-range 0x10000000-0x10001000 file.c 如果你把for循环放在一个函数体中。

根据Klockwork的说法,这个误报可能与你的演员有关:见http://developer.klocwork.com/community/forums/klocwork-general/general-discussion/buffer-overflow-adjusted-size