Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


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

2014-9-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()实现。

发表评论


最新评论

我也要发表评论

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

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

而不是“就算现在加入了,大部分人还是继续用strcpy”。
嗯,这是对的!从这件事,可以看出开源界里面有些人也是顽冥不化,固步自封。
回复
soli 2014-9-30 09:04
[点击展开更多楼层]
4
wiiiky 发表于 2014-9-28 17:35 的评论:
有些东西还真只有底层库能实现,
strcpy的问题,基本上的程序员都知道,编程注意点就没有问题。
其实这个加不加入真的没有什么影响。
就算现在加入了,大部分人还是继续用strcpy
5
soli 发表于 2014-9-29 12:46 的评论:
自从我知道 strncpy 之后就再也没用过 strcpy 了。
6
linux 发表于 2014-9-29 13:58 的评论:
strncpy也有问题,这个简译里面没说,原文说到了,strncpy 会导致没有 \000  结尾的字符串,也会有问题。所以才有 strlcpy 的产生。
是哈,所以我都是 strncpy 之后再把最后字符赋值为 \0 ,或者提前 memset 成 \0,然后 strncpy 的时候预留出最后一个字节不用。

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

而不是“就算现在加入了,大部分人还是继续用strcpy”。
回复
linux 2014-9-29 13:58
[点击展开更多楼层]
3
linux 发表于 2014-9-28 14:25 的评论:
对,我其实觉得这种武断固执的做法,其实相当古板!这种明显的个人喜好来决定一个基础库的走向,哎。
4
wiiiky 发表于 2014-9-28 17:35 的评论:
有些东西还真只有底层库能实现,
strcpy的问题,基本上的程序员都知道,编程注意点就没有问题。
其实这个加不加入真的没有什么影响。
就算现在加入了,大部分人还是继续用strcpy
5
soli 发表于 2014-9-29 12:46 的评论:
自从我知道 strncpy 之后就再也没用过 strcpy 了。
strncpy也有问题,这个简译里面没说,原文说到了,strncpy 会导致没有 \000  结尾的字符串,也会有问题。所以才有 strlcpy 的产生。
回复
soli 2014-9-29 12:46
[点击展开更多楼层]
2
soli 发表于 2014-9-28 13:55 的评论:
没有是那么东西是不能自己实现的,那要库有何用。
3
linux 发表于 2014-9-28 14:25 的评论:
对,我其实觉得这种武断固执的做法,其实相当古板!这种明显的个人喜好来决定一个基础库的走向,哎。
4
wiiiky 发表于 2014-9-28 17:35 的评论:
有些东西还真只有底层库能实现,
strcpy的问题,基本上的程序员都知道,编程注意点就没有问题。
其实这个加不加入真的没有什么影响。
就算现在加入了,大部分人还是继续用strcpy
自从我知道 strncpy 之后就再也没用过 strcpy 了。
回复
wiiiky 2014-9-28 17:35
1
_灵犀指 发表于 2014-9-27 23:33 的评论:
自己实现完全可以搞定,不要纠结加到库里与否。
2
soli 发表于 2014-9-28 13:55 的评论:
没有是那么东西是不能自己实现的,那要库有何用。
3
linux 发表于 2014-9-28 14:25 的评论:
对,我其实觉得这种武断固执的做法,其实相当古板!这种明显的个人喜好来决定一个基础库的走向,哎。
有些东西还真只有底层库能实现,
strcpy的问题,基本上的程序员都知道,编程注意点就没有问题。
其实这个加不加入真的没有什么影响。
就算现在加入了,大部分人还是继续用strcpy
回复
linux 2014-9-28 14:25
1
_灵犀指 发表于 2014-9-27 23:33 的评论:
自己实现完全可以搞定,不要纠结加到库里与否。
2
soli 发表于 2014-9-28 13:55 的评论:
没有是那么东西是不能自己实现的,那要库有何用。
对,我其实觉得这种武断固执的做法,其实相当古板!这种明显的个人喜好来决定一个基础库的走向,哎。
回复
soli 2014-9-28 13:55
1
_灵犀指 发表于 2014-9-27 23:33 的评论:
自己实现完全可以搞定,不要纠结加到库里与否。
没有是那么东西是不能自己实现的,那要库有何用。
回复
soli 2014-9-28 13:53
固步自封啊
7 回复
雪月风花000 2014-9-28 08:03  新浪微博网友评论
有就好
6 回复
unarywu 2014-9-28 00:33  新浪微博网友评论
开源世界的脊梁是一个个维护者。
回复
_灵犀指 2014-9-27 23:33  新浪微博网友评论
自己实现完全可以搞定,不要纠结加到库里与否。
5 回复
大栗哥 2014-9-27 23:33  新浪微博网友评论
一口老血
回复
SpringHack 2014-9-27 23:03  新浪微博网友评论
想起了VS里得strcpy_s()等_s函数。。
8 回复
暄暄爹 2014-9-27 22:03  新浪微博网友评论
维护者的固执,耽误了全世界的安全。
回复

热点评论

SpringHack 2014-9-27 23:03
想起了VS里得strcpy_s()等_s函数。。
8
soli 2014-9-28 13:53
固步自封啊
7
雪月风花000 2014-9-28 08:03
有就好
6
_灵犀指 2014-9-27 23:33
自己实现完全可以搞定,不要纠结加到库里与否。
5
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。