memcpy标记为缓冲区溢出

时间:2018-02-16 06:01:21

标签: c++ static-analysis buffer-overflow

我在一些旧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;
}

1 个答案:

答案 0 :(得分:0)

不确定您的代码分析器有多聪明,但如果对resize_arr函数进行足够的同步调用,arr_max最终会溢出并可能导致缓冲区溢出。