diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp b/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp index 0db4927a6338..a44d00557a7d 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp @@ -828,12 +828,19 @@ jsi::Value JavaTurboModule::invokeJavaMethod( jsi::Value returnValue = jsi::Value::null(); if (returnString != nullptr) { jsize length = env->GetStringLength(returnString); - const jchar* chars = env->GetStringChars(returnString, nullptr); + // GetStringRegion: no GetStringChars/ReleaseStringChars pair needed. + constexpr size_t kStackChars = 256; + char16_t stackChars[kStackChars]; + std::u16string heapChars; + char16_t* chars = stackChars; + if (static_cast(length) > kStackChars) { + heapChars.resize(static_cast(length)); + chars = heapChars.data(); + } + env->GetStringRegion( + returnString, 0, length, reinterpret_cast(chars)); auto jsiString = jsi::String::createFromUtf16( - runtime, - reinterpret_cast(chars), - static_cast(length)); - env->ReleaseStringChars(returnString, chars); + runtime, chars, static_cast(length)); returnValue = jsi::Value(runtime, jsiString); }