同有问题,发现是因为 ios小游戏上,这段for循环wasm代码会死循环(必现),在其他平台上都正常。因此像字符串拼接等但凡涉及for循环的都会出bug。ios版WXWebAssembly的loop指令有bug,希望尽快排查。 i32.const0 loop (param i32) ;; label = @1 local.set 2 local.get 2 i32.const 10 i32.lt_s if ;; label = @2 call 16 drop local.get 2 i32.const 1 i32.add local.tee 3 br 1 (;@1;) end i32.const 0 drop end ;; 对应的伪代码 ;; for q = 0; q < 10; q = q + 1 { ;; ffe() ;; }
小程序 WXWebAssembly 出现 iOS 与 Android 不一致的行为使用 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 (可稳定复现)。希望客户端这边能够排查,感谢~
02-27同问,没有回调
为什么unity开发微信小游戏,播放视频后,使用Video.OnEnded方法,回调不到[图片]
2024-09-02同问, 横屏游戏拉回来是竖屏广告 更新: 应该是因为新版本的库没有针对 landscapeLeft 和 landscapeRight 处理. [图片]
流量主的视频组件,显示有问题?[图片] 横屏游戏点击拉回来激励视频是竖屏的,尝试好多次都是这样,想问下这个是什么问题?
2021-07-05