From 35861451f555a29b37641ad0f83f40e50da6fcac Mon Sep 17 00:00:00 2001 From: emi~ Date: Mon, 22 Jul 2024 06:35:17 -0300 Subject: [PATCH] android: Fix art::Thread::DecodeJObject for Android >= 15 (#327) --- lib/android.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/android.js b/lib/android.js index d696b89b..e884faf3 100644 --- a/lib/android.js +++ b/lib/android.js @@ -187,7 +187,11 @@ function _getApi () { }, // Android >= 6 _ZN3art9JavaVMExt12DecodeGlobalEPNS_6ThreadEPv: ['art::JavaVMExt::DecodeGlobal', 'pointer', ['pointer', 'pointer', 'pointer']], - // Android < 6: makeDecodeGlobalFallbackForAndroid5() fallback uses: + + // makeDecodeGlobalFallback() uses: + // Android >= 15 + _ZNK3art6Thread19DecodeGlobalJObjectEP8_jobject: ['art::Thread::DecodeJObject', 'pointer', ['pointer', 'pointer']], + // Android < 6 _ZNK3art6Thread13DecodeJObjectEP8_jobject: ['art::Thread::DecodeJObject', 'pointer', ['pointer', 'pointer']], // Android >= 6 @@ -314,6 +318,7 @@ function _getApi () { '_ZN3art9JavaVMExt12AddGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE', '_ZN3art9JavaVMExt12DecodeGlobalEPv', '_ZN3art9JavaVMExt12DecodeGlobalEPNS_6ThreadEPv', + '_ZNK3art6Thread19DecodeGlobalJObjectEP8_jobject', '_ZNK3art6Thread13DecodeJObjectEP8_jobject', '_ZN3art10ThreadList10SuspendAllEPKcb', '_ZN3art10ThreadList10SuspendAllEv', @@ -489,7 +494,7 @@ function _getApi () { temporaryApi['art::JavaVMExt::AddGlobalRef'] = makeAddGlobalRefFallbackForAndroid5(temporaryApi); } if (temporaryApi['art::JavaVMExt::DecodeGlobal'] === undefined) { - temporaryApi['art::JavaVMExt::DecodeGlobal'] = makeDecodeGlobalFallbackForAndroid5(temporaryApi); + temporaryApi['art::JavaVMExt::DecodeGlobal'] = makeDecodeGlobalFallback(temporaryApi); } if (temporaryApi['art::ArtMethod::PrettyMethod'] === undefined) { temporaryApi['art::ArtMethod::PrettyMethod'] = temporaryApi['art::ArtMethod::PrettyMethodNullSafe']; @@ -3848,8 +3853,15 @@ function makeAddGlobalRefFallbackForAndroid5 (api) { }; } -function makeDecodeGlobalFallbackForAndroid5 (api) { +function makeDecodeGlobalFallback (api) { + /* + * Fallback for art::JavaVMExt::DecodeGlobal, which is + * unavailable in Android versions <= 5 and >= 15. + */ const decode = api['art::Thread::DecodeJObject']; + if (decode === undefined) { + throw new Error('art::Thread::DecodeJObject is not available; please file a bug'); + } return function (vm, thread, ref) { return decode(thread, ref);