From dd08be6215495235b58a7eddc9dc4abb7cdd7d8b Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 6 Sep 2021 11:20:04 +0100 Subject: [PATCH] Android Accessibility: Guard app context calls in a few places to prevent potential nullptr dereferences --- .../juce_android_Accessibility.cpp | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/modules/juce_gui_basics/native/accessibility/juce_android_Accessibility.cpp b/modules/juce_gui_basics/native/accessibility/juce_android_Accessibility.cpp index a7816094a1..a3f03cc2d3 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_android_Accessibility.cpp +++ b/modules/juce_gui_basics/native/accessibility/juce_android_Accessibility.cpp @@ -250,6 +250,10 @@ public: return; auto* env = getEnv(); + auto appContext = getAppContext(); + + if (appContext.get() == nullptr) + return; { for (auto* child : accessibilityHandler.getChildren()) @@ -293,7 +297,7 @@ public: true); env->CallVoidMethod (info, AndroidAccessibilityNodeInfo.setPackageName, - env->CallObjectMethod (getAppContext().get(), + env->CallObjectMethod (appContext.get(), AndroidContext.getPackageName)); env->CallVoidMethod (info, AndroidAccessibilityNodeInfo.setSource, @@ -760,12 +764,16 @@ AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const static bool areAnyAccessibilityClientsActive() { auto* env = getEnv(); + auto appContext = getAppContext(); - LocalRef accessibilityManager (env->CallObjectMethod (getAppContext().get(), AndroidContext.getSystemService, - javaString ("accessibility").get())); + if (appContext.get() != nullptr) + { + LocalRef accessibilityManager (env->CallObjectMethod (appContext.get(), AndroidContext.getSystemService, + javaString ("accessibility").get())); - if (accessibilityManager != nullptr) - return env->CallBooleanMethod (accessibilityManager.get(), AndroidAccessibilityManager.isEnabled); + if (accessibilityManager != nullptr) + return env->CallBooleanMethod (accessibilityManager.get(), AndroidAccessibilityManager.isEnabled); + } return false; } @@ -778,6 +786,10 @@ void sendAccessibilityEventImpl (const AccessibilityHandler& handler, int eventT if (const auto sourceView = getSourceView (handler)) { auto* env = getEnv(); + auto appContext = getAppContext(); + + if (appContext.get() == nullptr) + return; LocalRef event (env->CallStaticObjectMethod (AndroidAccessibilityEvent, AndroidAccessibilityEvent.obtain, @@ -785,7 +797,8 @@ void sendAccessibilityEventImpl (const AccessibilityHandler& handler, int eventT env->CallVoidMethod (event, AndroidAccessibilityEvent.setPackageName, - env->CallObjectMethod (getAppContext().get(), AndroidContext.getPackageName)); + env->CallObjectMethod (appContext.get(), + AndroidContext.getPackageName)); env->CallVoidMethod (event, AndroidAccessibilityEvent.setSource,