strcpy通常是不安全的,或者该函数有合法的用例吗?

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

背景:我有一个使用上载进度的web应用程序,它只是造成了分段错误。调查该问题后,我发现了一个错误报告,该错误报告将问题指向代码https://bugs.php.net/bug.php?id=79584

中的一行

this code中,我还看到,他们使用strcpy。该功能已经在该处使用了很多年,所以我想它已经根据安全规则进行了检查,但是我不是C程序员,我的知识非常有限。我还发现有人提到,有时仍然使用strcpy而不引起任何安全问题有时是合法的。

现在,我想知道这种特殊包装是否如此。该代码是否包含此功能是否安全?

c security
1个回答
0
投票

由该提交产生的​​错误与strcpy的安全性(或缺乏)完全无关。

strcpy不安全除非,您可以通过某种方式确保目标对象足够大以容纳源(包括其NUL终止符)。测量源字符串的strlen并加一个就足以确定所需的长度。此量的malloc是分配这么多空间的足够方法。在这种程度上,strcpy(malloc(strlen(src) + 1), src)就像您在C语言中发现的一样安全(除了不为malloc测试NULL的返回码而感到不自在;在实际的生产代码中,您应该这样做)。但是,strdup(src)更加简洁易读,其简洁性使得错别字的可能性降低。就个人而言,我建议在这种情况下always使用strdup。如果您担心目标平台不包含实现,可以轻松进行填充。

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