Skip to content

Android crash: filter + rt.insets causes dynamic.isObject() assertion failure during keyboard animation #1075

@lauridskern

Description

@lauridskern

What happened?

The app crashes on Android when a style definition combines the filter property (e.g., dropShadow) with reactive rt.insets values. The crash occurs during keyboard animation when rt.insets.bottom updates rapidly every frame.

Crash log:

 (react_native_assert_fail+104) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (std::__ndk1::unordered_map<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, facebook::react::RawValue, std::__ndk1::hash<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::equal_to<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::allocator<std::__ndk1::pair<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>> const, facebook::react::RawValue>>> facebook::react::RawValue::castValue<facebook::react::RawValue>+88) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::RawValue::operator std::__ndk1::unordered_map<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, facebook::react::RawValue, std::__ndk1::hash<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::equal_to<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::allocator<std::__ndk1::pair<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>> const, facebook::react::RawValue>>><std::__ndk1::unordered_map<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, facebook::react::RawValue, std::__ndk1::hash<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::equal_to<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::allocator<std::__ndk1::pair<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>> const, facebook::react::RawValue>>>> const+68) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::parseProcessedFilter+608) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::fromRawValue+64) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (std::__ndk1::vector<facebook::react::FilterFunction, std::__ndk1::allocator<facebook::react::FilterFunction>> facebook::react::convertRawProp<std::__ndk1::vector<facebook::react::FilterFunction, std::__ndk1::allocator<facebook::react::FilterFunction>>, std::__ndk1::vector<facebook::react::FilterFunction, std::__ndk1::allocator<facebook::react::FilterFunction>>>+164) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::BaseViewProps::BaseViewProps+2248) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::HostPlatformViewProps::HostPlatformViewProps+100) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::ViewShadowNodeProps::ViewShadowNodeProps+124) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (void std::__ndk1::allocator_traits<std::__ndk1::allocator<facebook::react::ViewShadowNodeProps>>::construct[abi:ne180000]<facebook::react::ViewShadowNodeProps, facebook::react::PropsParserContext const&, facebook::react::ViewShadowNodeProps const&, facebook::react::RawProps const&, void, void>+48) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::ConcreteShadowNode<&facebook::react::ViewComponentName.<char const at offset 0>, facebook::react::YogaLayoutableShadowNode, facebook::react::ViewShadowNodeProps, facebook::react::BaseViewEventEmitter, facebook::react::StateData>::Props+92) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::ShadowTreeRegistry::enumerate const+152) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::UIManager::updateShadowTree+172) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (margelo::nitro::unistyles::shadow::ShadowTreeManager::updateShadowTree+64) (BuildId: 64153dfcef1fe6f251bddf044428f8052f9b332c)
 (facebook::react::Task::execute+412) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::RuntimeScheduler_Modern::executeTask const+116) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::RuntimeScheduler_Modern::runEventLoopTick+204) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::react::RuntimeScheduler_Modern::runEventLoop+140) (BuildId: da38bb60ae28ed12d7c76d24ece13660372b5d28)
 (facebook::jni::detail::MethodWrapper<void , &facebook::jni::JNativeRunnable::run, facebook::jni::JNativeRunnable, void>::dispatch+72) (BuildId: e438f6554af1d86b210a05412e96c4251e570157)
 (facebook::jni::detail::FunctionWrapper<void , facebook::jni::detail::JTypeFor<facebook::jni::HybridClass<facebook::jni::JNativeRunnable, facebook::jni::JRunnable>::JavaPart, facebook::jni::JRunnable, void>::_javaobject*, void>::call+60) (BuildId: e438f6554af1d86b210a05412e96c4251e570157)

Steps to Reproduce

  1. Create a style with both filter and rt.insets in the same definition:
const styles = StyleSheet.create((theme, rt) => ({
  container: {
    paddingBottom: rt.insets.bottom,
    filter: [{ dropShadow: theme.shadows.default }],
  },
}));
  1. Use this style on a View that contains a TextInput
  2. Focus the TextInput to trigger the keyboard animation
  3. App crashes immediately as keyboard animates in

Snack or Repository Link (Optional)

No response

Unistyles Version

3.0.22

React Native Version

0.83.0

Platforms

Android

Expo

Yes

Additional information

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions