稳定复现,看我几行代码搞崩 Chrome

2022-03-10 10:26:49 +08:00
 xiangyuecn

搞崩 chrome 测试页面: https://xiangyuecn.gitee.io/recorder/assets/ztest_chrome_bug_AudioWorkletNode.html (打开后可能需要右键刷新一下页面)

过程分析记录: https://www.cnblogs.com/xiangyuecn/p/15988061.html

最新的 chrome 97 打开测试页面测试后每次都会崩溃,最开始发现的 chrome80 也会崩溃(不过测试页面反而不会崩了),古董版本 66 70 不会崩溃,更老的不支持 AudioWorklet 不用测试

这个崩溃现象也就是在特定时机才会出现,FireFox 测试的完全没有这个问题

[×]提交 bug

[√]v2ex 发帖

测试页面截图:

崩溃截图:

19222 次点击
所在节点    程序员
158 条回复
ArcherLeo
2022-03-10 18:11:22 +08:00
我能说我一进这个页面就崩溃吗😂,然后刷新后没事了,用的 Cent Browser
Huelse
2022-03-10 18:11:34 +08:00
@ie88 #70 合着你生产环境有个异常没捕获,然后崩了就不算 bug?
xtinput
2022-03-10 18:25:52 +08:00
Microsoft Edge
版本 98.0.1108.62 (官方内部版本) (arm64)
崩了
ie88
2022-03-10 18:26:42 +08:00
@Huelse 我是前端初学者,请赐教:浏览器不允许无用户操作的情况下 new AudioContext(),你在浏览器引擎 catch 了这个 exception 应该怎样提示用户,告诉用户这个页面有代码使用了 AudioContext ,又怎样提示开发者,没有用户操作不能使用 AudioContext ?除了页面崩溃我还没想出来什么合适的方法
doumeki
2022-03-10 18:36:30 +08:00
maxthon
版本 6.1.3.1001 ( 64 位) 0126
没有崩
wanacry
2022-03-10 18:42:26 +08:00
没崩啊
wanacry
2022-03-10 18:42:46 +08:00
移动版没崩
0o0O0o0O0o
2022-03-10 18:46:20 +08:00
很厉害,去提一个吧
poxiaobbs
2022-03-10 18:51:31 +08:00
M1 Chrome 99.0.4844.51 (arm64) 没有崩

[18:50:23.747]完成,浏览器正常,没有崩溃
[18:50:23.447]构造时没崩溃,等待浏览器崩溃 2...
[18:50:23.446]开始构造 AudioWorkletNode ,等待浏览器崩溃 1...
[18:50:23.445]3 ctx.state=running
[18:50:23.441]4 ctx.state=running
[18:50:23.428]2 ctx.state=suspended
[18:50:12.615]请随便点击一下页面,激活 AudioContext ,感觉要崩
[18:50:12.615]state 是 suspended ,感觉这次要崩
[18:50:12.615]1 ctx.state=suspended
[18:50:12.543]代码开始执行...
[18:50:12.543]请打开控制台进行观摩,不然崩溃后看不到页面内容
[18:50:12.542] [被 audioWorklet 搞崩浏览器] 发现 Chrome 90 80 容易崩( 100%崩?),老版本 Chrome 60 70 测的不会崩,FireFox 不会崩。Chrome 崩溃要点:suspended 状态下的 AudioContext ,在 audioWorklet.addModule+构造 AudioWorkletNode 未完成时,同时进行 resume 调用,在恢复到 running 状态那一刻,浏览器崩溃了 错误代码:STATUS_ACCESS_VIOLATION
labulaka521
2022-03-10 18:57:43 +08:00
崩了 版本 99.0.4844.51 (正式版本) (x86_64) Mac 12.3 Beta 版
yaott2020
2022-03-10 19:10:57 +08:00
安卓稳定版 Chrome 也崩溃了
mikewang
2022-03-10 19:12:00 +08:00
Google Chrome Version 96.0.4664.110 (Official Build) (arm64)
M1 芯片
gadfly3173
2022-03-10 19:21:32 +08:00
@ie88 既然是针对开发者,把错误提示打在 console 里就好了,其他的浏览器不允许的操作也是这样处理的
ie88
2022-03-10 19:30:31 +08:00
@gadfly3173 那用户层面应该怎么防止利益持续被损害呢?或者说怎么让用户知道该网页存在这种恶意行为?我个人觉得让网页直接崩溃可以有效提醒用户,至少让用户知道网页代码有 bug ,这个时候反馈到开发者,由开发者来处理这个 bug 或者恶意篡改,不然页面不崩溃,用户利益持续受损,用户也没办法察觉这种恶意行为,只在 console 里 log 出来并不能告知用户,这个页面存在一定安全隐患,让他停止访问这种站点。
ie88
2022-03-10 19:32:41 +08:00
而且 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page.
用到的是 not allow 和 must be ,而不是 not recommend 和 should be ,已经很严格了不是吗?
gadfly3173
2022-03-10 19:38:00 +08:00
@ie88 对于用户来说没有任何的利益被损害啊?操作是被浏览器禁止了,网站什么也没做到。使用这样的操作来进行浏览器版本检查 /降级策略等等也是很常规的手段。既然规范写的是禁止网站作出这样的操作,那么浏览器应该自己做好异常处理,而不是靠开发者自觉 /直接崩溃。而且这样崩溃了,谁知道问题是出在这里啊?比如参考 ssl 证书过期之类的提示,浏览器会很明确的告诉你问题出在哪里,用户和开发者都能知道是怎么回事。
encro
2022-03-10 19:44:09 +08:00
fixfox:

我用 Rust 我没崩。
ie88
2022-03-10 19:47:00 +08:00
“而且这样崩溃了,谁知道问题是出在这里啊”:页面崩溃,这段提示"The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page." 已经在 console 有了,所以是能帮助开发者定位到问题的。现在应该是缺少给用户提示的信息,尤其是这种恶意行为,要警示用户,小心访问此类站点,类似 ssl 过期这种提示,让用户选择继续访问还是不访问
ie88
2022-03-10 19:47:25 +08:00
@gadfly3173 刚回答忘了 @
xQmQ
2022-03-10 19:48:05 +08:00
Microsoft Edge
版本 99.0.1150.36 (正式版本) (64 位)

多次崩溃,少数几次未崩溃

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

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

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

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

© 2021 V2EX