From 09e88448ce3a3047112b6f71218305d5bfe2e8bc Mon Sep 17 00:00:00 2001 From: Riley Berton Date: Fri, 23 Aug 2024 15:34:16 -0700 Subject: [PATCH] Fix undefined behavior in MethodInvoker (#46188) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46188 UBSAN identified undefined behavior when argCount == 0 (defining a variable array of zero length). Plus variable arrays in C++ are a clang extension. [ChangeLog]: [General] [Fixed] - Undefined behavior fix in MethodInvoker Reviewed By: nlutsenko Differential Revision: D61725776 fbshipit-source-id: 3729080eae8e78b65a558305f68782ae99edbc0a --- .../ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp index 8c0e3ba29dd..9284dc62772 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/MethodInvoker.cpp @@ -229,7 +229,9 @@ MethodCallResult MethodInvoker::invoke( auto env = Environment::current(); auto argCount = signature_.size() - 2; JniLocalScope scope(env, static_cast(argCount)); - jvalue args[argCount]; + std::vector argsStorage( + argCount + 1); // ensure we have at least 1 element + jvalue* args = argsStorage.data(); std::transform( signature_.begin() + 2, signature_.end(),