C和静态代码分析:这比memcpy更安全吗?

问题描述 投票:1回答:1

以下函数比使用memcpy更安全吗? Memcpy在Checkmarx静态代码分析中给出以下“Improper_Null_Termination”错误:在行中的字符串被删除其终止空字节。但是,如果我使用以下函数,Checkmarx没有问题:

void myMemCpy(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Copy contents of src[] to dest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = csrc[i]; 
} 

使用此函数而不是memcpy()有什么问题吗?

c security static-code-analysis checkmarx
1个回答
5
投票

以下函数比使用memcpy更安全吗?

不,它是一样的。最好。

如果有的话,由于代码分析器和编译器知道memcpy()的作用,这段代码不太安全。

特别是考虑到你通过size_t然后不正确地使用int循环计数器的方式:

void myMemCpy(void *dest, void *src, size_t n) 
{ 
   // Typecast src and dest addresses to (char *) 
   char *csrc = (char *)src; 
   char *cdest = (char *)dest; 

   // Copy contents of src[] to dest[] 
   for (int i=0; i<n; i++) 
       cdest[i] = csrc[i]; 
} 

在具有32位int和64位size_t的64位架构上,如果n的值超过2 gig,那将会非常失败。

© www.soinside.com 2019 - 2024. All rights reserved.