V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiangyuecn
V2EX  ›  程序员

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

  •  7
     
  •   xiangyuecn ·
    xiangyuecn · 115 天前 · 15342 次点击
    这是一个创建于 115 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞崩 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 发帖

    测试页面截图:

    崩溃截图:

    153 条回复    2022-03-12 13:04:59 +08:00
    1  2  
    learningman
        1
    learningman  
       115 天前
    Edge latest 复现成功
    Morii
        2
    Morii  
       115 天前
    复现成功
    densuc
        3
    densuc  
       115 天前
    Edge 92.0.902.55 未复现
    zycojamie
        4
    zycojamie  
       115 天前
    复现成功 chrome 版本 99.0.4844.51 (正式版本) (x86_64)
    ZField
        5
    ZField  
       115 天前
    Edge 99.0.1150.36 未复现
    superszy
        6
    superszy  
       115 天前
    Chrome 99.0.4844.51 (正式版本) (64 位)
    Edge 99.0.1150.36 (正式版本) (64 位)

    可以复现
    mengyx
        7
    mengyx  
       115 天前
    MS Edge 99.0.1150.36 刷新两次后成功复现
    zu1k
        8
    zu1k  
       115 天前 via Android
    报告给 chrome 团队吧,说不定可以被利用,几万块直接到手不香嘛
    dzdh
        9
    dzdh  
       115 天前
    chrome 99.0.4844.51 复现
    fanxasy
        10
    fanxasy  
       115 天前
    Microsoft Edge
    版本 99.0.1150.36 (正式版本) (64 位)

    [10:54:25.877]完成,浏览器正常,没有崩溃
    Yingyi
        11
    Yingyi  
       115 天前
    版本 99.0.4844.51 (正式版本) (arm64)
    第一次没成功,第二次复现成功
    inhons
        12
    inhons  
       115 天前
    Chrome 101.0.4934.2 (正式版本) canary ( 64 位) 没蹦
    Vivaldi 5.1.2567.57 (Stable channel) 内核:98.0.4758.121 ( 64 位) 没蹦
    zhentoujun
        13
    zhentoujun  
       115 天前
    Microsoft Edge 版本 99.0.1150.36 (正式版本) (64 位)——可以复现

    Firefox Nightly 100.0a1 (2022-03-09) (64 位)——未能复现
    superchijinpeng
        14
    superchijinpeng  
       115 天前
    Edge 99.0.1150.36
    Chrome 99.0.4844.51

    稳定复现
    shakoon
        15
    shakoon  
       115 天前
    Cent Browser 版本 4.3.9.248 (正式版本) ( 32 位) (Chromium 86.0.4240.198) 表示崩了
    inhons
        16
    inhons  
       115 天前
    @inhons #12 补充说明:右键重新加载页面后崩了
    ab
        17
    ab  
       115 天前 via iPhone
    我要拿来反调试😂
    kingme
        18
    kingme  
       115 天前
    Microsoft Edge
    版本 99.0.1150.33 (官方内部版本) Beta(x86_64)

    macOS 11.6

    复现
    leavic
        19
    leavic  
       115 天前
    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]请打开控制台进行观摩,不然崩溃后看不到页面内容
    tvirus
        20
    tvirus  
       115 天前
    nothing happened
    Version 98.0.4758.80 (Official Build) (64-bit)
    Valid
        21
    Valid  
       115 天前
    一个 while 也能蹦
    youthfire
        22
    youthfire  
       115 天前
    Safari 玩了下,没有崩
    xiangyuecn
        23
    xiangyuecn  
    OP
       115 天前
    @zu1k #8 有提交地址没,发一个😁 不知道从哪里提交有机会得奖金😂
    lx0758
        24
    lx0758  
       115 天前
    Microsoft Edge
    版本 99.0.1150.36 (正式版本) (64 位)
    codehz
        25
    codehz  
       115 天前 via Android   ❤️ 1
    Chromium 修崩溃速度很玄学,之前报了一个 https://bugs.chromium.org/p/chromium/issues/detail?id=1207317 一直都不给修(不过可能和 windows 平台专属有关系)
    ochatokori
        26
    ochatokori  
       115 天前
    版本 99.0.4844.51 (正式版本) ( 64 位)( linux )没崩,刷新几次也没崩
    villivateur
        27
    villivateur  
       115 天前
    Edge 崩了,Firefox 没崩
    ochatokori
        28
    ochatokori  
       115 天前
    附上日志
    [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
    Finnn
        29
    Finnn  
       115 天前
    ![1646882530]( )
    ykk
        30
    ykk  
       115 天前
    firefox 正常
    lance6716
        31
    lance6716  
       115 天前
    manjaro KDE Chrome Version 99.0.4844.51 (Official Build) (64-bit)
    一直不会崩
    mopig
        32
    mopig  
       115 天前   ❤️ 1
    控制台打开就不会崩,控制台关闭才崩。
    Hug125
        33
    Hug125  
       115 天前
    vivaldi 复现了 版本 5.0.2497.48 (Stable channel) (arm64)
    操作系统 macOS 版本 12.0.1 (版号 21A559 )

    ![ui2IUd_2022-03-10_11:43:01_SikwIG]( https://raw.githubusercontent.com/Hug125/ImgCloud/main/uPic/png/ui2IUd_2022-03-10_11:43:01_SikwIG.png)
    CheckTime
        34
    CheckTime  
       115 天前
    99.0.4844.51 (正式版本)
    刷新后立马点击会崩,但是刷新后稍微等几秒再点就不会崩。
    AlexPUBLIC
        35
    AlexPUBLIC  
       115 天前
    Version 99.0.4844.51 (Official Build) (x86_64)
    不会崩
    492
        36
    492  
       115 天前
    版本 99.0.4844.51 (正式版本) ( 64 位)

    成功
    whitehack
        37
    whitehack  
       115 天前
    mac 版本 98.0.1108.51 (官方内部版本) (x86_64)
    崩了
    492
        38
    492  
       115 天前
    @492 发现情况是偶发的,第一次是绝对崩溃。刷新第二次就不会。
    zu1k
        39
    zu1k  
       115 天前 via Android   ❤️ 1
    @xiangyuecn 24 楼有样例
    nyakoy
        40
    nyakoy  
       115 天前
    [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 。
    morty0
        41
    morty0  
       115 天前
    chrome 99.0.4844.51 没有崩溃
    1235467
        42
    1235467  
       115 天前
    99.0.4844.51 (正式版本) (64 位元) 崩溃
    retrocode
        43
    retrocode  
       115 天前
    版本 99.0.4844.51 (正式版本) ( 64 位)
    刷新后 7 秒内点击稳定崩,过了 7 秒点击没崩过
    wnh3yang
        44
    wnh3yang  
       115 天前
    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
    Felldeadbird
        45
    Felldeadbird  
       115 天前
    版本 99.0.4844.51 (正式版本) ( 64 位)
    复现成功。秒崩
    AlanDSF
        46
    AlanDSF  
       115 天前
    99.0.4844.51 (正式版本) ( 64 位)没崩
    yuhangch
        47
    yuhangch  
       115 天前
    Version 99.0.1150.36 (Official build) (x86_64)
    没崩
    1nclude
        48
    1nclude  
       115 天前
    版本 99.0.4844.51 (正式版本) ( 64 位)

    崩了
    sprite82
        49
    sprite82  
       115 天前
    Microsoft Edge
    版本 99.0.1150.36 (正式版本) (64 位)
    没崩
    892141082
        50
    892141082  
       115 天前   ❤️ 1

    安卓 Chrome 99.0.4844.58 复现
    princelai
        51
    princelai  
       115 天前
    @lance6716 #31 我和你完全一样,我的就会崩溃
    idou
        52
    idou  
       115 天前
    wind chrome 版本 99.0.4844.51 (正式版本) ( 64 位)崩了
    错误代码:STATUS_ACCESS_VIOLATION
    WilsonGGG
        53
    WilsonGGG  
       115 天前
    EDGE 99.0.1150.36

    [复现成功]
    Finnn
        54
    Finnn  
       115 天前
    Chrome EDGE winX64 都是最新版,
    基本是没问题的, 只 edge 第一次访问崩了

    但是新开一个干净的账号环境(游客, 来宾, 访客, 无痕) 100% 都是崩溃的
    iovo7
        55
    iovo7  
       115 天前
    Vivaldi 5.1.2567.57 (Stable channel) ( 64 位)

    复现。
    CrossEntropy
        56
    CrossEntropy  
       115 天前
    Google Chrome
    版本 99.0.4844.51 (正式版本) (x86_64)
    开发者模式下启用模拟手机不崩溃
    正常点击会崩溃
    zii4914
        57
    zii4914  
       115 天前
    Chrome 版本 99.0.4844.51 (正式版本) ( 64 位)
    崩溃
    Finnn
        58
    Finnn  
       115 天前
    @codehz 我曾有过提 bug 2 分钟内回复并关闭的经历
    只是把问题指到了 Bugzilla, 因为标准以 Chrome 的为准 hh~~
    devehx
        59
    devehx  
       115 天前
    复现不了。
    Ubuntu Chrome Version 99.0.4844.51 (Official Build) (64-bit)
    yyt6801
        60
    yyt6801  
       115 天前
    edge 96.0.1054.62 崩了
    noErr
        61
    noErr  
       115 天前
    此页面存在问题
    lancerzyj
        62
    lancerzyj  
       115 天前
    Version 99.0.4844.51 (Official Build) (arm64) 复现
    RickyC
        63
    RickyC  
       115 天前
    我感觉你很厉害
    RickyC
        64
    RickyC  
       115 天前
    版本 99.0.4844.51 (正式版本) (arm64)
    可以复现
    akakidz
        65
    akakidz  
       115 天前
    版本 99.0.4844.51 (正式版本) ( 64 位)
    刷新后崩溃
    en20
        66
    en20  
       115 天前
    https://bugs.chromium.org/ 他们回复还蛮快的
    ie88
        67
    ie88  
       115 天前
    所以,有人可以告诉我这有什么意义嘛?
    https://imgur.com/a/tvtsDic
    ie88
        68
    ie88  
       115 天前
    xiangyuecn
        69
    xiangyuecn  
    OP
       115 天前
    @ie88 #67 这是浏览器防贼呢,防止代码偷偷播放音频。只有等到有用户操作后,才允许自动播放
    ie88
        70
    ie88  
       115 天前
    @xiangyuecn 是呀,我的截图可以看到具体说明说明了:The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page.
    所以是觉得直接导致页面崩溃是属于 bug 嘛?
    pi0piK
        71
    pi0piK  
       115 天前
    99.0.4844.51 没有崩溃
    Oktfolio
        72
    Oktfolio  
       115 天前
    Microsoft Edge
    Version 99.0.1150.36 (Official build) (arm64) macOS 正常

    Google Chrome
    Version 99.0.4844.51 (Official Build) (arm64) macOS 崩溃
    ie88
        73
    ie88  
       115 天前
    @pi0piK 我和你版本一样,我的一点就崩
    suzic
        74
    suzic  
       114 天前 via iPhone
    会崩,但不是百分百
    xcsoft
        75
    xcsoft  
       114 天前
    92.0.4515.131 复现
    haozheliu
        76
    haozheliu  
       114 天前
    windows 版本 99.0.4844.51 (正式版本) ( 64 位)
    秒崩
    MiketsuSmasher
        77
    MiketsuSmasher  
       114 天前
    Edge 99.0.1150.30 linux 版本,前几次没有成功,后面每一次都能成功复现
    MiketsuSmasher
        78
    MiketsuSmasher  
       114 天前
    @MiketsuSmasher 错误代码:SIGSEGV
    HiCoder
        79
    HiCoder  
       114 天前
    Brave 会崩溃。
    liflymark6
        80
    liflymark6  
       114 天前
    Windows 版本 99.0.4844.51 (正式版本) ( 64 位)
    崩溃
    ArcherLeo
        81
    ArcherLeo  
       114 天前
    我能说我一进这个页面就崩溃吗😂,然后刷新后没事了,用的 Cent Browser
    Huelse
        82
    Huelse  
       114 天前
    @ie88 #70 合着你生产环境有个异常没捕获,然后崩了就不算 bug?
    xtinput
        83
    xtinput  
       114 天前
    Microsoft Edge
    版本 98.0.1108.62 (官方内部版本) (arm64)
    崩了
    ie88
        84
    ie88  
       114 天前
    @Huelse 我是前端初学者,请赐教:浏览器不允许无用户操作的情况下 new AudioContext(),你在浏览器引擎 catch 了这个 exception 应该怎样提示用户,告诉用户这个页面有代码使用了 AudioContext ,又怎样提示开发者,没有用户操作不能使用 AudioContext ?除了页面崩溃我还没想出来什么合适的方法
    doumeki
        85
    doumeki  
       114 天前
    maxthon
    版本 6.1.3.1001 ( 64 位) 0126
    没有崩
    wanacry
        86
    wanacry  
       114 天前 via iPhone
    没崩啊
    wanacry
        87
    wanacry  
       114 天前 via iPhone
    移动版没崩
    0o0O0o0O0o
        88
    0o0O0o0O0o  
       114 天前 via iPhone
    很厉害,去提一个吧
    poxiaobbs
        89
    poxiaobbs  
       114 天前
    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
        90
    labulaka521  
       114 天前
    崩了 版本 99.0.4844.51 (正式版本) (x86_64) Mac 12.3 Beta 版
    yaott2020
        91
    yaott2020  
       114 天前 via Android
    安卓稳定版 Chrome 也崩溃了
    mikewang
        92
    mikewang  
       114 天前
    Google Chrome Version 96.0.4664.110 (Official Build) (arm64)
    M1 芯片
    gadfly3173
        93
    gadfly3173  
       114 天前 via Android
    @ie88 既然是针对开发者,把错误提示打在 console 里就好了,其他的浏览器不允许的操作也是这样处理的
    ie88
        94
    ie88  
       114 天前
    @gadfly3173 那用户层面应该怎么防止利益持续被损害呢?或者说怎么让用户知道该网页存在这种恶意行为?我个人觉得让网页直接崩溃可以有效提醒用户,至少让用户知道网页代码有 bug ,这个时候反馈到开发者,由开发者来处理这个 bug 或者恶意篡改,不然页面不崩溃,用户利益持续受损,用户也没办法察觉这种恶意行为,只在 console 里 log 出来并不能告知用户,这个页面存在一定安全隐患,让他停止访问这种站点。
    ie88
        95
    ie88  
       114 天前
    而且 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
        96
    gadfly3173  
       114 天前 via Android
    @ie88 对于用户来说没有任何的利益被损害啊?操作是被浏览器禁止了,网站什么也没做到。使用这样的操作来进行浏览器版本检查 /降级策略等等也是很常规的手段。既然规范写的是禁止网站作出这样的操作,那么浏览器应该自己做好异常处理,而不是靠开发者自觉 /直接崩溃。而且这样崩溃了,谁知道问题是出在这里啊?比如参考 ssl 证书过期之类的提示,浏览器会很明确的告诉你问题出在哪里,用户和开发者都能知道是怎么回事。
    encro
        97
    encro  
       114 天前
    fixfox:

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

    多次崩溃,少数几次未崩溃
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2511 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 234ms · UTC 09:37 · PVG 17:37 · LAX 02:37 · JFK 05:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.