1
treo 2014 年 2 月 22 日
还真有人在C里用goto啊。。
|
3
kaiix 2014 年 2 月 22 日
if 后单语句不加花括号的确好看 不过看来还是容易出错
截屏中其他代码的缩进也很奇怪啊 |
6
yinxingren 2014 年 2 月 22 日
论大括号的必要性
|
7
dorentus 2014 年 2 月 22 日
用 ruby 的话,应该也不会有这种错误存在。
不过 C 系列的各个语言,估计都是允许省略 if 的 { } 的吧…… |
8
ffts 2014 年 2 月 22 日
那个两行goto的意思就是不管怎么着也会goto fail?
|
9
est OP |
10
bcxx 2014 年 2 月 22 日
他們是怎麼做 code review 的啊……
|
11
gihnius 2014 年 2 月 22 日
所以 Go 要 {},很好.
|
12
panlilu 2014 年 2 月 22 日
代码风格的问题=。=
|
13
jesse_luo 2014 年 2 月 22 日 木有review么……
内核开发goto很多的,而且也有很多长函数,比如netif_receive_skb |
14
11 2014 年 2 月 22 日
Linux kernel coding style…
|
15
sdysj 2014 年 2 月 22 日
靠,这代码多久了?还有就是mavericks的openssl还是老掉牙的0.98,是不是有nsa内幕啊?
|
16
cchange 2014 年 2 月 22 日
大家可否受累解释一下第二个goto会造成什么后果呢?
跳转到fail段后 就不会跳转回来吧? |
17
zhujinliang 2014 年 2 月 22 日 via iPad
写到这一行时,本来想按一下command+s,结果不小心按成了command+d。。。
|
18
66450146 2014 年 2 月 23 日
|
19
reverland 2014 年 2 月 23 日
@cchange 好像如上面链接所示。就是跳到最后会返回个err,但err是sha1update返回的,sha1update总是成功,所以,err根本不是错误。验证总是通过
|
20
bitinn 2014 年 2 月 23 日
sign…… apple是最后一个在客户端阻止BEAST攻击的厂商,远远晚于其他OS平台和浏览器……
然后现在还搞出这么个笑话。搞不好NSA已经利用多年了。 |
21
so898 2014 年 2 月 23 日
Open Source 项目长久以来都没有人Review代码的结果?
|
22
yidaima 2014 年 2 月 23 日
不明觉历
|
23
multiple1902 2014 年 2 月 23 日
不愧是全宇宙最先进的操作系统。
|
24
icyalala 2014 年 2 月 23 日
“只要有足够的眼睛监视,任何 bug 都无处藏身”
我猜肯定有人发现了。。只是没有说出来~~ |
25
bitinn 2014 年 2 月 23 日 如果你想测试自己的iOS/OSX浏览器是否受TLS bug的影响,可以到以下网址——
1. https://www.imperialviolet.org:1266/ - 加入你能正常打开网站,你受bug影响。 2. https://gotofail.com/ - 假如你能看到图片,你受bug影响。 |
26
Yo_oY 2014 年 2 月 23 日 via iPhone
哈哈 前两天写objective-c的时候还犯过这错误。。。
python写多了 |
27
kavinyao 2014 年 2 月 23 日 via iPhone
前两天去面试,面试官说他一个在Apple工作的朋友如此评价iOS代码质量:absolutely horrible。
|
28
cloudbeyond 2014 年 2 月 23 日
@bitinn 多谢,测试了一下,貌似就mac下的safari受影响?
|
29
dndx 2014 年 2 月 23 日
吓死人了,一个几年前就有的严重漏洞,竟然到现在才发现。估计早被各种黑客玩烂了。
|
30
9hills 2014 年 2 月 23 日 via iPad
iOS 7.0.3 safari 实测受bug影响
|
31
paulw54jrn 2014 年 2 月 23 日
osX 10.9 Safari 受bug影响
|
32
ainopara 2014 年 2 月 23 日 via iPad
iOS6.1.2不受影响。
|
33
sinxccc 2014 年 2 月 23 日
On the Timing of iOS’s SSL Vulnerability and Apple’s ‘Addition’ to the NSA’s PRISM Program
http://daringfireball.net/2014/02/apple_prism |
34
detailyang 2014 年 2 月 23 日
论风格的重要性
|
35
isprin 2014 年 2 月 23 日
难道 Apple 不用 Lint ?
|
36
goofansu 2014 年 2 月 23 日
|
37
menic 2014 年 2 月 23 日
打赌是python程序员写的code。。。
|
38
lch21 2014 年 2 月 23 日
手抖多复制了一行 goto fail
|
39
luikore 2014 年 2 月 23 日
分号语言都很容易出这样的 bug
|
40
sanddudu 2014 年 2 月 23 日
感觉已经成为了一个新的笑点了
|
42
timonwong 2014 年 2 月 23 日 @cchange
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; 先改写一下 if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) { goto fail; // err != 0 } goto fail; // err == 0 这个fail其实是一个exit point(这段代码只有一个exit point), 不要当作“失败”,因为无论是成功还是失败, fail之后的代码都会执行 fail: SSLFreeBuffer(&signedHashes); SSLFreeBuffer(&hashCtx); return err; // err == 0, "Success baby" 这样,第二个fail的问题在于,err此时为0。C语言的0返回值一般约定是没有error,这样调用者就认为SSLVerifySignedServerKeyExchange() 函数是成功的,然后就是大乌龙了。 |
43
tttwww18 2014 年 2 月 23 日
iOS 7.0.6 safari 受影响
|
46
mikale 2014 年 2 月 23 日
我比较恶意,我认为这是apple 程序员故意留的bug,为了怕被发现,伪装的比较好
|
47
Shared 2014 年 2 月 23 日 @menic 也许,但是:1)Python 没有 goto;2)Python 是强制缩进的,即使有 goto,写两次 goto hell 也没问题。
|
48
messense 2014 年 2 月 23 日
iOS 7.1 Beta 5 Safari 受影响。
|
49
xowenx 2014 年 2 月 23 日
OSX 10.9 chrome dev 不受影响 chrome用了自己的SSL/TLS库?
|
51
bombless 2014 年 2 月 23 日
估计是某些编辑器的快捷键的原因复制了一行
|
52
zellux 2014 年 2 月 23 日
奇怪的是这样的代码编译器好歹要给个 warning 吧。
其实这种错误 Java 里也不会有(如果 Java 里有 goto 的话),执行不到的代码的编译器会直接报错…… |
54
jasontse 2014 年 2 月 23 日 via iPad
iOS 6.1 Safari受影响,Chrome不受影响
|
55
Ricepig 2014 年 2 月 23 日 via iPhone
visual basic 表示完全没有这个问题,
if 必须 end |
57
aqqwiyth 2014 年 2 月 23 日
https://gotofail.com:1266/test.png net::ERR_FAILED
|
58
aqqwiyth 2014 年 2 月 23 日
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.91 Safari/537.36
|
60
iam3z 2014 年 2 月 23 日
|
61
likuku 2014 年 2 月 23 日
OSX 10.7.5 + Chrome 33.0.1750.112 beta 打不开上面给的测试网站.
|
62
zellux 2014 年 2 月 24 日
@luikore 我指的的是这段代码的错误,这里第二个 goto 到标签之间的代码不可能被执行到,Java 编译器就直接报错。楼主是想说在 Python 里因为有缩进,所以连续两个 goto 只要在同一层,就不会影响到后面的执行逻辑,如果你想把问题一般化到 if () stmt; stmt; ,那么这个问题 Python 里也同样没法避免吧。
|
63
vileer 2014 年 2 月 24 日
有没有OSX的补丁啊
|
64
caoyue 2014 年 2 月 24 日
以前定规范强制单行语句也必须加花括号还有人不以为然,现在活生生的案例出来了……
|
65
luikore 2014 年 2 月 24 日
@zellux
如果两个连着的 goto 在同一块内, 顶多算很傻, 到不了造成 bug 的地步. 但这里其实第一个 goto 在 if 内, 第二个 goto 在 if 外, 如果没有操蛋的 if 语句规则, 好多开发者早就一眼看出来了改正了. 编译器报死代码就能解决这个问题吗? 其实根本的问题还是 C/Java/C# 的 if 语法规则, 如果把 goto 改成别的语句, 就不会报死代码了, bug 会隐藏得更好. |
66
standin000 2014 年 2 月 24 日
@bitinn 谢谢,ios 7.0.4中招。
|
67
wesley 2014 年 2 月 24 日
if里面不管有几行代码都用大括号包着,这应该作为一个习惯
|
68
zellux 2014 年 2 月 24 日
|
69
luikore 2014 年 2 月 25 日
@zellux 我也没理解你说的话, 你用
java 编译器去编译 C 代码? 还是你想说 java 也有 goto? 还是你想说"如果 java 有 goto, 并且 openssl 是用 java 实现的话, 用 java 编译器就解决这个问题了"? clang 也有死代码检查啊, 加上 -Werror=unused 也是编译错误, 用 java 编译器有啥优势? 不管是故意的还是无意的, 这个 bug 没被众多的开源开发者发现, 根本原因就是 if (x) y; y; 按语法规则解释成 if (x) {y;} y; 然后两个 y 缩进一样不容易发现. |