
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 jasonte 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 缩进一样不容易发现. |