Klocwork正在发出警报,这似乎是错误的。
它提到的错误描述了我们代码中全部错误的80%。
请指教,

以下是一个剪裁集(释义):-

//a snip set
// no bug here //

{
  char*     destStr;
  destStr = (char*)malloc(150);
  if (destStr != NULL) {
    destStr[0]= '\0';  //__here is the difference__
    char * myStr = malloc(200) ;
    if (myStr != NULL) {
      strcpy(myStr , destStr) ;
    }
    free(myStr);
  }
  free (destStr);
  destStr = NULL;
}

//__whereas a bug here__ !

{
  char* destStr;
  destStr = (char*) malloc(150);
  if (destStr != NULL) {
    destStr[0]= '\0'; // __here is the difference__
  }
  else {
    printf("hello world \n");
  }
  if (destStr != NULL) {
    char * myStr = malloc(200);
    if (myStr != NULL) {
      strcpy(myStr , destStr);   // __NNTS (not NULL terminated string) –  Buffer overflow of 'myStr' due to non null terminated string 'destStr'.__
    }
    free (myStr);
  }
  free (destStr);
  destStr = NULL;
}
//end of snip set

最佳答案

您正在使用哪个版本的Klocwork产品?我只是尝试分析提供的代码示例,但没有得到任何报告。向代码中添加有意的NPD确实会产生报告,只是为了证明我实际上正在运行该工具; p建议您是否没有运行尝试升级的最新产品(Insight 9.1是最新发布的产品集)。

问候,
格温·费舍尔
首席技术官兼研发副总裁Klocwork,Inc
gwyn-at-klocwork.com

08-08 03:13