搞崩 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 发帖
测试页面截图:
崩溃截图:
![]() | 1 learningman 2022-03-10 10:29:35 +08:00 Edge latest 复现成功 |
2 28Sv0ngQfIE7Yloe 2022-03-10 10:34:38 +08:00 |
3 densuc 2022-03-10 10:37:51 +08:00 Edge 92.0.902.55 未复现 |
![]() | 4 zycojamie 复现成功 chrome 版本 99.0.4844.51 (正式版本) (x86_64) |
![]() | 5 ZField 2022-03-10 10:43:56 +08:00 Edge 99.0.1150.36 未复现 |
![]() | 6 superszy 2022-03-10 10:51:53 +08:00 Chrome 99.0.4844.51 (正式版本) (64 位) Edge 99.0.1150.36 (正式版本) (64 位) 可以复现 |
![]() | 7 mengyx 2022-03-10 10:53:37 +08:00 MS Edge 99.0.1150.36 刷新两次后成功复现 |
![]() | 8 zu1k 2022-03-10 10:54:01 +08:00 via Android 报告给 chrome 团队吧,说不定可以被利用,几万块直接到手不香嘛 |
![]() | 9 dzdh 2022-03-10 10:55:05 +08:00 chrome 99.0.4844.51 复现 |
![]() | 10 fanxasy 2022-03-10 10:55:06 +08:00 Microsoft Edge 版本 99.0.1150.36 (正式版本) (64 位) [10:54:25.877]完成,浏览器正常,没有崩溃 |
![]() | 11 Yingyi 2022-03-10 10:55:39 +08:00 版本 99.0.4844.51 (正式版本) (arm64) 第一次没成功,第二次复现成功 |
12 inhons 2022-03-10 10:57:33 +08:00 Chrome 101.0.4934.2 (正式版本) canary ( 64 位) 没蹦 Vivaldi 5.1.2567.57 (Stable channel) 内核:98.0.4758.121 ( 64 位) 没蹦 |
![]() | 13 zhentoujun 2022-03-10 10:59:32 +08:00 Microsoft Edge 版本 99.0.1150.36 (正式版本) (64 位)可以复现 Firefox Nightly 100.0a1 (2022-03-09) (64 位)未能复现 |
![]() | 14 superchijinpeng 2022-03-10 11:00:40 +08:00 Edge 99.0.1150.36 Chrome 99.0.4844.51 稳定复现 |
![]() | 15 shakoon 2022-03-10 11:01:05 +08:00 Cent Browser 版本 4.3.9.248 (正式版本) ( 32 位) (Chromium 86.0.4240.198) 表示崩了 |
![]() | 17 ab 2022-03-10 11:02:07 +08:00 via iPhone 我要拿来反调试 |
![]() | 18 kingme 2022-03-10 11:03:12 +08:00 Microsoft Edge 版本 99.0.1150.33 (官方内部版本) Beta(x86_64) macOS 11.6 复现 |
![]() | 19 leavic 2022-03-10 11:05:40 +08:00 firefox 97.02 [11:04:45.683]完成,浏览器正常,没有崩溃 [11:04:45.382]4 ctx.state=running [11:04:45.381]构造时没崩溃,等待浏览器崩溃 2... [11:04:45.381]开始构造 AudioWorkletNode ,等待浏览器崩溃 1... [11:04:45.381]3 ctx.state=running [11:04:45.274]2 ctx.state=running [11:04:39.713]请随便点击一下页面,激活 AudioContext ,感觉要崩 [11:04:39.713]state 是 suspended ,感觉这次要崩 [11:04:39.712]1 ctx.state=suspended [11:04:39.704]代码开始执行... [11:04:39.704]请打开控制台进行观摩,不然崩溃后看不到页面内容 |
20 tvirus 2022-03-10 11:05:41 +08:00 nothing happened Version 98.0.4758.80 (Official Build) (64-bit) |
![]() | 21 Valid 2022-03-10 11:07:37 +08:00 一个 while 也能蹦 |
![]() | 22 youthfire 2022-03-10 11:10:11 +08:00 Safari 玩了下,没有崩 |
![]() | 23 xiangyuecn OP @zu1k #8 有提交地址没,发一个 不知道从哪里提交有机会得奖金 |
24 lx0758 2022-03-10 11:14:00 +08:00 Microsoft Edge 版本 99.0.1150.36 (正式版本) (64 位) |
![]() | 25 codehz 2022-03-10 11:16:33 +08:00 via Android ![]() Chromium 修崩溃速度很玄学,之前报了一个 https://bugs.chromium.org/p/chromium/issues/detail?id=1207317 一直都不给修(不过可能和 windows 平台专属有关系) |
26 ochatokori 2022-03-10 11:18:08 +08:00 版本 99.0.4844.51 (正式版本) ( 64 位)( linux )没崩,刷新几次也没崩 |
![]() | 27 villivateur 2022-03-10 11:19:00 +08:00 Edge 崩了,Firefox 没崩 |
28 ochatokori 2022-03-10 11:21:15 +08:00 附上日志 [11:19:11.834]完成,浏览器正常,没有崩溃 [11:19:11.534]构造时没崩溃,等待浏览器崩溃 2... [11:19:11.534]开始构造 AudioWorkletNode ,等待浏览器崩溃 1... [11:19:11.533]3 ctx.state=running [11:19:11.517]4 ctx.state=running [11:19:11.503]2 ctx.state=suspended [11:19:07.366]请随便点击一下页面,激活 AudioContext ,感觉要崩 [11:19:07.365]state 是 suspended ,感觉这次要崩 [11:19:07.365]1 ctx.state=suspended |
29 Finnn 2022-03-10 11:22:39 +08:00 |
![]() | 30 ykk 2022-03-10 11:24:49 +08:00 firefox 正常 |
![]() | 31 lance6716 2022-03-10 11:37:18 +08:00 manjaro KDE Chrome Version 99.0.4844.51 (Official Build) (64-bit) 一直不会崩 |
![]() | 32 mopig 2022-03-10 11:44:44 +08:00 ![]() 控制台打开就不会崩,控制台关闭才崩。 |
![]() | 33 Hug125 2022-03-10 11:45:43 +08:00 vivaldi 复现了 版本 5.0.2497.48 (Stable channel) (arm64) 操作系统 macOS 版本 12.0.1 (版号 21A559 )  |
34 CheckTime 2022-03-10 11:46:23 +08:00 99.0.4844.51 (正式版本) 刷新后立马点击会崩,但是刷新后稍微等几秒再点就不会崩。 |
![]() | 35 c978R77Le1z2f8u9 2022-03-10 11:47:51 +08:00 Version 99.0.4844.51 (Official Build) (x86_64) 不会崩 |
![]() | 36 492 2022-03-10 11:51:20 +08:00 版本 99.0.4844.51 (正式版本) ( 64 位) 成功 |
![]() | 37 whitehack 2022-03-10 11:51:42 +08:00 mac 版本 98.0.1108.51 (官方内部版本) (x86_64) 崩了 |
![]() | 39 zu1k 2022-03-10 11:54:14 +08:00 via Android ![]() @xiangyuecn 24 楼有样例 |
![]() | 40 nyakoy/a> 2022-03-10 11:55:30 +08:00 [11:54:57.695]完成,浏览器正常,没有崩溃 [11:54:57.394]构造时没崩溃,等待浏览器崩溃 2... [11:54:57.394]开始构造 AudioWorkletNode ,等待浏览器崩溃 1... [11:54:57.394]3 ctx.state=running [11:54:57.386]4 ctx.state=running [11:54:57.386]2 ctx.state=running [11:54:56.795]请随便点击一下页面,AudioContext 已是 running 状态,应该不会崩 [11:54:56.795]state 已是 running ,这次应该不会崩,刷新一下页面看看 state=suspended 时容易崩 [11:54:56.795]1 ctx.state=running [11:54:56.786]代码开始执行... [11:54:56.786]请打开控制台进行观摩,不然崩溃后看不到页面内容 [11:54:56.786] [被 audioWorklet 搞崩浏览器] 发现 Chrome 90 80 容易崩( 100%崩?),老版本 Chrome 60 70 测的不会崩,FireFox 不会崩。Chrome 崩溃要点:suspended 状态下的 AudioContext ,在 audioWorklet.addModule+构造 AudioWorkletNode 未完成时,同时进行 resume 调用,在恢复到 running 状态那一刻,浏览器崩溃了 错误代码:STATUS_ACCESS_VIOLATION chrome 95.0.4638.54 。 |
![]() | 41 morty0 2022-03-10 12:23:25 +08:00 chrome 99.0.4844.51 没有崩溃 |
42 1235467 2022-03-10 12:46:08 +08:00 99.0.4844.51 (正式版本) (64 位元) 崩溃 |
![]() | 43 cvooc 2022-03-10 12:56:47 +08:00 版本 99.0.4844.51 (正式版本) ( 64 位) 刷新后 7 秒内点击稳定崩,过了 7 秒点击没崩过 |
44 wnh3yang 2022-03-10 13:02:32 +08:00 firefox 98.0 (64 位) [13:01:08.150]完成,浏览器正常,没有崩溃 [13:01:07.839]4 ctx.state=running [13:01:07.839]构造时没崩溃,等待浏览器崩溃 2... [13:01:07.837]开始构造 AudioWorkletNode ,等待浏览器崩溃 1... [13:01:07.837]3 ctx.state=running [13:01:07.823]2 ctx.state=running [13:00:56.896]请随便点击一下页面,激活 AudioContext ,感觉要崩 [13:00:56.896]state 是 suspended ,感觉这次要崩 [13:00:56.896]1 ctx.state=suspended [13:00:56.885]代码开始执行... [13:00:56.885]请打开控制台进行观摩,不然崩溃后看不到页面内容 [13:00:56.884] [被 audioWorklet 搞崩浏览器] 发现 Chrome 90 80 容易崩( 100%崩?),老版本 Chrome 60 70 测的不会崩,FireFox 不会崩。Chrome 崩溃要点:suspended 状态下的 AudioContext ,在 audioWorklet.addModule+构造 AudioWorkletNode 未完成时,同时进行 resume 调用,在恢复到 running 状态那一刻,浏览器崩溃了 错误代码:STATUS_ACCESS_VIOLATION |
![]() | 45 Felldeadbird 2022-03-10 13:19:40 +08:00 版本 99.0.4844.51 (正式版本) ( 64 位) 复现成功。秒崩 |
![]() | 46 AlanDSF 2022-03-10 13:24:22 +08:00 99.0.4844.51 (正式版本) ( 64 位)没崩 |
![]() | 47 yuhangch 2022-03-10 13:24:39 +08:00 Version 99.0.1150.36 (Official build) (x86_64) 没崩 |
48 1nclude 2022-03-10 13:39:12 +08:00 版本 99.0.4844.51 (正式版本) ( 64 位) 崩了 |
![]() | 49 sprite82 2022-03-10 13:42:32 +08:00 Microsoft Edge 版本 99.0.1150.36 (正式版本) (64 位) 没崩 |
![]() | 50 0x00000000 2022-03-10 13:43:34 +08:00 ![]() |
![]() | 52 idou 2022-03-10 14:08:58 +08:00 wind chrome 版本 99.0.4844.51 (正式版本) ( 64 位)崩了 错误代码:STATUS_ACCESS_VIOLATION |
![]() | 53 WilsonGGG 2022-03-10 14:26:06 +08:00 EDGE 99.0.1150.36 [复现成功] |
54 Finnn 2022-03-10 14:36:18 +08:00 Chrome EDGE winX64 都是最新版, 基本是没问题的, 只 edge 第一次访问崩了 但是新开一个干净的账号环境(游客, 来宾, 访客, 无痕) 100% 都是崩溃的 |
55 iovo7 2022-03-10 14:39:38 +08:00 Vivaldi 5.1.2567.57 (Stable channel) ( 64 位) 复现。 |
![]() | 56 CrossEntropy 2022-03-10 14:41:09 +08:00 Google Chrome 版本 99.0.4844.51 (正式版本) (x86_64) 开发者模式下启用模拟手机不崩溃 正常点击会崩溃 |
![]() | 57 zii4914 2022-03-10 14:44:25 +08:00 Chrome 版本 99.0.4844.51 (正式版本) ( 64 位) 崩溃 |
58 Finnn 2022-03-10 14:45:52 +08:00 @codehz 我曾有过提 bug 2 分钟内回复并关闭的经历 只是把问题指到了 Bugzilla, 因为标准以 Chrome 的为准 hh~~ |
![]() | 59 devehx 2022-03-10 14:52:59 +08:00 复现不了。 Ubuntu Chrome Version 99.0.4844.51 (Official Build) (64-bit) |
![]() | 60 yyt6801 2022-03-10 16:14:51 +08:00 edge 96.0.1054.62 崩了 |
![]() | 61 noErr 2022-03-10 16:20:18 +08:00 此页面存在问题 |
![]() | 62 EricGoodMan 2022-03-10 16:25:02 +08:00 Version 99.0.4844.51 (Official Build) (arm64) 复现 |
![]() | 63 RickyC 2022-03-10 16:26:04 +08:00 我感觉你很厉害 |
![]() | 64 RickyC 2022-03-10 16:27:49 +08:00 版本 99.0.4844.51 (正式版本) (arm64) 可以复现 |
![]() | 65 akakidz 2022-03-10 16:39:16 +08:00 版本 99.0.4844.51 (正式版本) ( 64 位) 刷新后崩溃 |
![]() | 66 en20 2022-03-10 16:46:54 +08:00 https://bugs.chromium.org/ 他们回复还蛮快的 |
67 ie88 2022-03-10 17:06:13 +08:00 所以,有人可以告诉我这有什么意义嘛? https://imgur.com/a/tvtsDic |
68 ie88 2022-03-10 17:08:12 +08:00 |
![]() | 69 xiangyuecn OP @ie88 #67 这是浏览器防贼呢,防止代码偷偷播放音频。只有等到有用户操作后,才允许自动播放 |
70 ie88 2022-03-10 17:25:11 +08:00 @xiangyuecn 是呀,我的截图可以看到具体说明说明了:The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. 所以是觉得直接导致页面崩溃是属于 bug 嘛? |
![]() | 71 pi0piK 2022-03-10 17:32:20 +08:00 99.0.4844.51 没有崩溃 |
![]() | 72 Oktfolio 2022-03-10 17:35:00 +08:00 Microsoft Edge Version 99.0.1150.36 (Official build) (arm64) macOS 正常 Google Chrome Version 99.0.4844.51 (Official Build) (arm64) macOS 崩溃 |
74 suzic 2022-03-10 17:37:38 +08:00 via iPhone 会崩,但不是百分百 |
![]() | 75 xcsoft 2022-03-10 17:40:14 +08:00 92.0.4515.131 复现 |
![]() | 76 haozheliu 2022-03-10 17:43:37 +08:00 windows 版本 99.0.4844.51 (正式版本) ( 64 位) 秒崩 |
![]() | 77 MiketsuSmasher 2022-03-10 17:55:13 +08:00 Edge 99.0.1150.30 linux 版本,前几次没有成功,后面每一次都能成功复现 |
![]() | 78 MiketsuSmasher 2022-03-10 17:56:50 +08:00 @MiketsuSmasher 错误代码:SIGSEGV |
79 HiCoder 2022-03-10 18:00:38 +08:00 Brave 会崩溃。 |
80 liflymark6 2022-03-10 18:08:27 +08:00 Windows 版本 99.0.4844.51 (正式版本) ( 64 位) 崩溃 |
![]() | 81 ArcherLeo 2022-03-10 18:11:22 +08:00 我能说我一进这个页面就崩溃吗,然后刷新后没事了,用的 Cent Browser |
![]() | 83 xtinput 2022-03-10 18:25:52 +08:00 Microsoft Edge 版本 98.0.1108.62 (官方内部版本) (arm64) 崩了 |
84 ie88 2022-03-10 18:26:42 +08:00 @Huelse 我是前端初学者,请赐教:浏览器不允许无用户操作的情况下 new AudioContext(),你在浏览器引擎 catch 了这个 exception 应该怎样提用户,告诉用户这个页面有代码使用了 AudioContext ,又怎样提示开发者,没有用户操作不能使用 AudioContext ?除了页面崩溃我还没想出来什么合适的方法 |
![]() | 85 doumeki 2022-03-10 18:36:30 +08:00 maxthon 版本 6.1.3.1001 ( 64 位) 0126 没有崩 |
86 wanacry 2022-03-10 18:42:26 +08:00 via iPhone 没崩啊 |
87 wanacry 2022-03-10 18:42:46 +08:00 via iPhone 移动版没崩 |
88 0o0O0o0O0o 2022-03-10 18:46:20 +08:00 via iPhone 很厉害,去提一个吧 |
![]() | 89 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 |
![]() | 90 labulaka521 2022-03-10 18:57:43 +08:00 崩了 版本 99.0.4844.51 (正式版本) (x86_64) Mac 12.3 Beta 版 |
![]() | 91 yaott2020 2022-03-10 19:10:57 +08:00 via Android 安卓稳定版 Chrome 也崩溃了 |
![]() | 92 mikewang 2022-03-10 19:12:00 +08:00 Google Chrome Version 96.0.4664.110 (Official Build) (arm64) M1 芯片 崩 |
![]() | 93 gadfly3173 2022-03-10 19:21:32 +08:00 via Android @ie88 既然是针对开发者,把错误提示打在 console 里就好了,其他的浏览器不允许的操作也是这样处理的 |
94 ie88 2022-03-10 19:30:31 +08:00 @gadfly3173 那用户层面应该怎么防止利益持续被损害呢?或者说怎么让用户知道该网页存在这种恶意行为?我个人觉得让网页直接崩溃可以有效提醒用户,至少让用户知道网页代码有 bug ,这个时候反馈到开发者,由开发者来处理这个 bug 或者恶意篡改,不然页面不崩溃,用户利益持续受损,用户也没办法察觉这种恶意行为,只在 console 里 log 出来并不能告知用户,这个页面存在一定安全隐患,让他停止访问这种站点。 |
95 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 ,已经很严格了不是吗? |
![]() | 96 gadfly3173 2022-03-10 19:38:00 +08:00 via Android @ie88 对于用户来说没有任何的利益被损害啊?操作是被浏览器禁止了,网站什么也没做到。使用这样的操作来进行浏览器版本检查 /降级策略等等也是很常规的手段。既然规范写的是禁止网站作出这样的操作,那么浏览器应该自己做好异常处理,而不是靠开发者自觉 /直接崩溃。而且这样崩溃了,谁知道问题是出在这里啊?比如参考 ssl 证书过期之类的提示,浏览器会很明确的告诉你问题出在哪里,用户和开发者都能知道是怎么回事。 |
![]() | 97 encro 2022-03-10 19:44:09 +08:00 fixfox: 我用 Rust 我没崩。 |
98 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 过期这种提示,让用户选择继续访问还是不访问 |
99 ie88 2022-03-10 19:47:25 +08:00 @gadfly3173 刚回答忘了 @ |
![]() | 100 xQmQ 2022-03-10 19:48:05 +08:00 Microsoft Edge 版本 99.0.1150.36 (正式版本) (64 位) 多次崩溃,少数几次未崩溃 |