一直追随 tj 大神,却不小心在 Github 上活捉到大神忽略的一个错误!!!

2016-02-16 14:19:17 +08:00
 kingddc314

其实和他没多大关系,但是 tj 应该是没意识到,由于值传递这样指针的置空确实没有意义
https://github.com/clibs/list/pull/9
在 clibs 的包括近两千 star 的项目都没人发现这个问题
https://github.com/clibs/clib/blob/master/deps/list/list_iterator.c#L61

6041 次点击
所在节点    分享发现
17 条回复
daocheng
2016-02-16 14:23:34 +08:00
2014 年的坟都挖啊
kingddc314
2016-02-16 14:27:01 +08:00
@daocheng 没有挖坟啦,就是看代码时发现了问题,疑惑为什么没人提,结果翻到了这个
zcbenz
2016-02-16 14:31:31 +08:00
任谁都会犯错的,去提个 PR 不就好了。
matsuijurina
2016-02-16 14:41:27 +08:00
大神没计算机学位,接触 nodejs 以前是做 wordpress 模板的网页外包公司的设计师。 Bug 这么少已经是不可思议了。
tedd
2016-02-16 14:44:30 +08:00
@matsuijurina 真的?太🐃了!
kingddc314
2016-02-16 14:46:41 +08:00
@matsuijurina 感觉大神不是一个人,太高产了
chmlai
2016-02-16 16:17:25 +08:00
tj 真是一个传奇的杀马特
breeswish
2016-02-16 16:30:03 +08:00
然而.. 这个 PR 原本的意思是,设置为 NULL 可以避免以后再错误地释放它,这是一种防御性的代码,就像 assert 一样, assert 出 false 的代码根本不能跑是吧,所以 assert 里的一定是 true 的,那么为什么还要 assert 呢?显然意义不在于此,而在于可以避免以后犯错…理论上还可以提高安全性
sethverlo
2016-02-16 16:37:16 +08:00
@chmlai 原来不止我一个人觉得杀马特。。。
oxoxoxox
2016-02-16 16:43:20 +08:00
@breeswish 防御性代码 +1
我写代码经常这样,方便自己以后查 /改代码,也方便别人
aisk
2016-02-16 16:44:25 +08:00
主要是用 clib 的人太少了。
myid
2016-02-16 18:08:14 +08:00
tj 是谁?
kingddc314
2016-02-16 18:28:29 +08:00
@breeswish
@oxoxoxox 其实问题是函数内部赋值为 null ,只是赋值的一个指针拷贝,在上层函数调用栈的指针依旧不为空
snnn
2016-02-16 21:17:46 +08:00
@myid 同问
think2011
2016-02-16 21:30:29 +08:00
tj 大神啊!
kingddc314
2016-02-16 21:32:58 +08:00
@myid
@snnn node , go 系大神, https://github.com/tj
breeswish
2016-02-16 22:38:09 +08:00
@kingddc314 从其他函数写法来看似乎是为了该代码内不犯错,即如果后面还加代码的话不至于有问题。不过确实如你所说,不能避免用户犯错(调用多次 list_iterator_destroy )时正常。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX