C ++中的fread和strncpy中的缓冲区溢出

问题描述

我正在从appscan获取以下代码集的缓冲区溢出情况。 我不确定其中有什么问题。 如果有人提出解决方案,那就太好了。通用代码适用于所有平台。

int main()
{
   char* src = NULL;
   char* chenv = getenv("HOME");
   if (chenv == NULL || strlen(chenv) == 0)
       return -1;
   else
   {
       int len = strlen(chenv);
       src = new char[len+1];
       strncpy(src,chenv,len); // AppScan throws buffer overflow
       src[len+1]='\0';
   }
   FILE* fp;
   char content[4096];
   int len = 0;
   fp = fopen("filename.txt","r");
   if(fp)
   {
       while( (len = fread(content,sizeof(char),sizeof(content),fp))> 0) // AppScan throws buffer overflow on content
       {
           docopy(content,len);// External funtion call. 
       }
   }

   return 0;  
}

解决方法

我尝试使用strdup()代替了strncpy,问题得以解决。但是恐惧仍然存在问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...