【发布时间】:2015-10-05 12:28:57
【问题描述】:
我正在尝试使用safe_strcpy 将一个字符串复制到另一个字符串,但似乎找不到函数定义。
这是在做什么:
char value[256];
char *var = NULL;
var = malloc(sizeof(value));
safe_strcpy(var, value, strlen(value)+1);
我想知道我是否需要为 malloc 添加错误处理,还是 safe_stcpy 会处理它?
【问题讨论】:
-
你需要检查
malloc是否成功。 -
是否有一些缺失的代码实际上将数据放入
value? -
您应该能够在 SAMBA 源代码的
lib/util/util_str.c中找到safe_strcpy()实现,假设您使用的 SAMBA 版本使用它。艾莉森在 2011 年删除了safe_strcpy()和朋友:git.samba.org/… -
是的。我没有在这里添加代码来初始化值。感谢您提供指向 samba 存储库的指针。我想我必须为 malloc 添加安全检查。
-
几个注意事项:
maxlength参数应该是目标缓冲区的大小,不包括终止 null 的空间。所以在你的例子中它应该是sizeof(value)-1。此外,根据删除safe_strcpy()的提交评论,SAMBA 切换到使用strlcpy()。在我看来,这可能是使用您自己的代码而不是safe_strcpy()的好方法,因为strlcpy()是strcpy()的一个相当广泛使用的“安全”替代方案,并且有一个有据可查/易于理解的界面。