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 1
木有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 1
如果你想测试自己的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 1
@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 1
@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 缩进一样不容易发现. |