html52.com
我爱小程序-开发者交流社区

小程序 WXWebAssembly 出现 iOS 与 Android 不一致的行为

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小程序 Bug iOS iOS 15.6 iPhone 13 Pro Max 8.0.24

使用 rustwasm 编写简单的 wasm 代码:入参为一个 Uint8Array ,出参为一个字符串。

#[wasm_bindgen]
pub fn echo(input: Vec<u8>) -> String {
    String::from("hello world")
}


引入小程序中, Android 和 macOS 微信客户端可以正常返回 hello world 字符串,iOS 微信客户端返回为空。

跟踪调试,发现问题在于

/**
* @param {Uint8Array} input
* @returns {string}
*/
export function echo(input) {
    try {
        const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
        const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);
        const len0 = WASM_VECTOR_LEN;
// 执行到这里时,cachedUint8Memory0 的大小为 wasm.memory.buffer 的大小
        wasm.echo(retptr, ptr0, len0);
// 执行到这里时,cachedUint8Memory0 空间被 wasm 回收,大小应为 0
// Android 和 macOS 微信客户端 cachedUint8Memory0 大小为 0 ,符合预期
// iOS 客户端似乎没能回收 cachedUint8Memory0 的空间,大小仍为执行 wasm.echo 前的值
        var r0 = getInt32Memory0()[retptr / 4 + 0];
        var r1 = getInt32Memory0()[retptr / 4 + 1];
        return getStringFromWasm0(r0, r1);
    } finally {
        wasm.__wbindgen_add_to_stack_pointer(16);
        wasm.__wbindgen_free(r0, r1);
    }
}


排查要点如上,可以看到 iOS 微信客户端的 WXWebAssembly 表现与主流浏览器不同,此问题可能导致内存访问越界进而造成微信客户端 crash (可稳定复现)。希望客户端这边能够排查,感谢~

网友回复

社区技术运营专员-Riven:

你好,反馈已收到,我们核实下,有进展会同步。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付