【发布时间】:2019-03-19 10:51:06
【问题描述】:
以下函数是否比使用 memcpy 更安全? Memcpy 在 Checkmarx 静态代码分析中给出以下“Improper_Null_Termination”错误: at 行中的字符串被 at 剥离其终止空字节。但是,如果我使用以下功能,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()有什么问题吗?
【问题讨论】:
-
问题很可能出在使用
memcpy的代码中,所以请贴出来。 (克隆著名的库函数以使静态代码分析器静音有点像抛弃警告。) -
我看不出这比
memcpy更安全。如果有的话,您正在混淆memcpy,因此您的代码分析器不再识别它并且不会抱怨它的(错误)使用。 -
"Improper_Null_Termination" 对我来说听起来就像您正在尝试复制字符串。你可能想要
strdup? -
没有。
int i不一定适合size_t n。所以这段代码甚至有一个潜在的错误。 -
memcpy不关心这种终止。问题出在使用memcpy的代码中。也许你有这样的代码:memcpy(dst, src, strlen(src));无论如何答案是否定的。
标签: c security static-code-analysis checkmarx