我在一些旧C++
代码上运行静态安全分析器。它将::memcpy
调用标记为缓冲区溢出违例。代码看起来很好。为什么抱怨?
#define ALLOC_SIZE 4 * 1024
int arr_max = ALLOC_SIZE;
int *arr = new int[arr_max];
// ...
void resize_arr() {
int* new_arr = new int[arr_max + ALLOC_SIZE];
::memcpy(new_arr, arr, arr_max * sizeof(int)); // BUFFER OVERFLOW
arr_max += ALLOC_SIZE;
delete [] arr;
arr = new_arr;
}
答案 0 :(得分:0)
不确定您的代码分析器有多聪明,但如果对resize_arr
函数进行足够的同步调用,arr_max
最终会溢出并可能导致缓冲区溢出。