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