❏ 站外平台:

开源的另一面:在glibc中有望加入strlcpy()函数

| 2014-09-27 21:44   评论: 14 分享: 4    

源自BSD世界的strlcpy()函数家族是为了解决strcpy()及相关函数的安全问题而创造出来的,在GNU C Library (glibc)中引入Strlcpy()函数是glibc历史上持续时间最长的请求之一,但维护者一直拒绝加入。

如今情况有望发生改变

strcpy()函数由于不执行字符长度检查而会导致缓存区溢出和安全问题,strlcpy() 创造出来就是为了确保所有字符串都是以null结尾。2000年,Christoph Hellwig递交了在 glibc中加入strlcpy()和strlcat() 的补丁,维护者Ulrich Drepper断然拒绝,称它是一个无效率的BSD垃圾,会带来其它问题,使用strcat 或strlcpy的人应该受到惩罚。Christoph在象征性的抗议后放弃了,但其他人没有,他们反复递交请求反复被拒绝。

14年后,glibc仍然没有strlcpy()。

然而,glibc项目的管理自2012年以来发生了很大的改变,对新功能的引入更加开放,开发者已经表示会合理的考虑strlcpy()实现。



最新评论

[点击展开更多楼层]
[5]
soli 发表于 2014-09-29 12:46 的评论:
自从我知道 strncpy 之后就再也没用过 strcpy 了。
[6]
linux 发表于 2014-09-29 13:58 的评论:
strncpy也有问题,这个简译里面没说,原文说到了,strncpy 会导致没有 \000  结尾的字符串,也会有问题。所以才有 strlcpy 的产生。
[7]
soli 发表于 2014-09-30 09:04 的评论:
是哈,所以我都是 strncpy 之后再把最后字符赋值为 \0 ,或者提前 memset 成 \0,然后 strncpy 的时候预留出最后一个字节不用。

但我的意思是说,strncpy 比 strcpy 还是安全了一些,所以我会用;等 strlcpy 出来之后,我也会跟进。

而不是“就算现在加入了,大部分人还是继续用strcpy”。
linux 2014-09-30 09:18 2 回复
嗯,这是对的!从这件事,可以看出开源界里面有些人也是顽冥不化,固步自封。
soli 2014-09-28 13:53 8 回复
固步自封啊
微博评论 2014-09-28 08:03 7 回复
有就好
微博评论 2014-09-28 00:33 1 回复
开源世界的脊梁是一个个维护者。
微博评论 2014-09-27 23:33 1 回复
一口老血
微博评论 2014-09-27 23:03 9 回复
想起了VS里得strcpy_s()等_s函数。。
微博评论 2014-09-27 22:03 2 回复
维护者的固执,耽误了全世界的安全。

返回顶部

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。