From 09aefa191b224f856c2a7ac5e4cee16a67f6a7a2 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Mon, 9 Sep 2019 19:52:27 -0700 Subject: [PATCH] ReactNativeConfigHolder must retain underlying Java object as global_ref Summary: We were using an alias_ref which is like a raw pointer (not managed/retained); as it turns out, everywhere (?) else we accept an alias_ref we convert it to a global_ref (see Binding.cpp, JMessageQueueThread). We've just gotten lucky to not have already hit use-after-free errors. Reviewed By: mdvacca Differential Revision: D17275200 fbshipit-source-id: 581a51da36e96c353ed1117e9e0f428e65d36d69 --- .../com/facebook/react/fabric/jni/ReactNativeConfigHolder.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ReactNativeConfigHolder.h b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ReactNativeConfigHolder.h index b5c72caa8a9..699d49ab5a0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ReactNativeConfigHolder.h +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ReactNativeConfigHolder.h @@ -23,7 +23,7 @@ namespace react { class ReactNativeConfigHolder : public ReactNativeConfig { public: ReactNativeConfigHolder(jni::alias_ref reactNativeConfig) - : reactNativeConfig_(reactNativeConfig){}; + : reactNativeConfig_(make_global(reactNativeConfig)){}; bool getBool(const std::string& param) const override; std::string getString(const std::string& param) const override; @@ -31,7 +31,7 @@ class ReactNativeConfigHolder : public ReactNativeConfig { double getDouble(const std::string& param) const override; private: - jni::alias_ref reactNativeConfig_; + jni::global_ref reactNativeConfig_; }; } // namespace react