https://github.com/python/cpython/commit/d4471297586335d8c24db8b2c030d32c94570344
commit: d4471297586335d8c24db8b2c030d32c94570344
branch: main
author: Gyeongjae Choi <[email protected]>
committer: freakboy3742 <[email protected]>
date: 2025-06-12T04:04:13Z
summary:

gh-128627: Fix iPad detection in wasm-gc (#135388)

On some iPad versions, Safari reports as "macOS". Modifies the GC trampoline 
detection
to add a feature-based check to detect this case.

files:
M Python/emscripten_trampoline.c

diff --git a/Python/emscripten_trampoline.c b/Python/emscripten_trampoline.c
index cc5047d6bda224..975c28eec104c6 100644
--- a/Python/emscripten_trampoline.c
+++ b/Python/emscripten_trampoline.c
@@ -71,7 +71,16 @@ EM_JS(CountArgsFunc, _PyEM_GetCountArgsPtr, (), {
 // )
 
 function getPyEMCountArgsPtr() {
-    let isIOS = globalThis.navigator && 
/iPad|iPhone|iPod/.test(navigator.platform);
+    // Starting with iOS 18.3.1, WebKit on iOS has an issue with the garbage
+    // collector that breaks the call trampoline. See #130418 and
+    // https://bugs.webkit.org/show_bug.cgi?id=293113 for details.
+    let isIOS = globalThis.navigator && (
+        /iPad|iPhone|iPod/.test(navigator.userAgent) ||
+        // Starting with iPadOS 13, iPads might send a platform string that 
looks like a desktop Mac.
+        // To differentiate, we check if the platform is 'MacIntel' (common 
for Macs and newer iPads)
+        // AND if the device has multi-touch capabilities 
(navigator.maxTouchPoints > 1)
+        (navigator.platform === 'MacIntel' && typeof navigator.maxTouchPoints 
!== 'undefined' && navigator.maxTouchPoints > 1)
+    )
     if (isIOS) {
         return 0;
     }

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to