Apple 的 TLS 爆了大 bug!

2014-02-22 22:10:39 +08:00
 est


为什么发到 python 版呢。因为这是 python 语言里极难犯的错误。
15763 次点击
所在节点    Python
69 条回复
likuku
2014-02-23 23:03:52 +08:00
OSX 10.7.5 + Chrome 33.0.1750.112 beta 打不开上面给的测试网站.
zellux
2014-02-24 06:08:13 +08:00
@luikore 我指的的是这段代码的错误,这里第二个 goto 到标签之间的代码不可能被执行到,Java 编译器就直接报错。楼主是想说在 Python 里因为有缩进,所以连续两个 goto 只要在同一层,就不会影响到后面的执行逻辑,如果你想把问题一般化到 if () stmt; stmt; ,那么这个问题 Python 里也同样没法避免吧。
vileer
2014-02-24 10:13:50 +08:00
有没有OSX的补丁啊
caoyue
2014-02-24 10:58:29 +08:00
以前定规范强制单行语句也必须加花括号还有人不以为然,现在活生生的案例出来了……
luikore
2014-02-24 12:16:57 +08:00
@zellux
如果两个连着的 goto 在同一块内, 顶多算很傻, 到不了造成 bug 的地步.
但这里其实第一个 goto 在 if 内, 第二个 goto 在 if 外, 如果没有操蛋的 if 语句规则, 好多开发者早就一眼看出来了改正了. 编译器报死代码就能解决这个问题吗? 其实根本的问题还是 C/Java/C# 的 if 语法规则, 如果把 goto 改成别的语句, 就不会报死代码了, bug 会隐藏得更好.
standin000
2014-02-24 12:37:02 +08:00
@bitinn 谢谢,ios 7.0.4中招。
wesley
2014-02-24 12:58:29 +08:00
if里面不管有几行代码都用大括号包着,这应该作为一个习惯
zellux
2014-02-24 13:02:47 +08:00
@luikore
「如果没有操蛋的 if 语句规则, 好多开发者早就一眼看出来了改正了」没理解这句话,能再解释下吗?

对于这个例子来说,Java 编译器当然能解决这个问题,因为这是编译错误,不是警告。
luikore
2014-02-25 15:51:28 +08:00
@zellux 我也没理解你说的话, 你用
java 编译器去编译 C 代码? 还是你想说 java 也有 goto? 还是你想说"如果 java 有 goto, 并且 openssl 是用 java 实现的话, 用 java 编译器就解决这个问题了"? clang 也有死代码检查啊, 加上 -Werror=unused 也是编译错误, 用 java 编译器有啥优势?

不管是故意的还是无意的, 这个 bug 没被众多的开源开发者发现, 根本原因就是 if (x) y; y; 按语法规则解释成 if (x) {y;} y; 然后两个 y 缩进一样不容易发现.

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

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

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

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

© 2021 V2EX