react-native-windows icon indicating copy to clipboard operation
react-native-windows copied to clipboard

crash in JSI when trying to print out object

Open asklar opened this issue 3 years ago • 1 comments
trafficstars

Using RNW 0.65.7

react-native-xaml defines a JsiHostObject (XamlObject) The hostobject get method takes a PropertyId value. The method impl for XamlObject converts the property ID to std::string then compares it with some values.

On the JS side, the code does:

        <WinUI.ColorPicker onColorChanged={(e) => {
          console.log(e.nativeEvent);
        }} />

This throws inside the jsi ABI; Chakra throws an exception:

It is illegal to retrieve the name associated with a property symbol

The exception thrown is a std::exception; it is expected that exceptions from winrt are std::hresult_error, which the jsi exceptions won't be; we should document this bit too, otherwise what ends up happening is the app hard crashes.

 # Child-SP          RetAddr               Call Site
00 0000007a`2c5f01d8 00007ff8`8c44358c     ntdll!RtlRaiseException [minkernel\ntos\rtl\amd64\raise.c @ 52] 
01 0000007a`2c5f01e0 00007ff8`52996480     KERNELBASE!RaiseException+0x6c
02 0000007a`2c5f02c0 00007fff`a5b9766f     VCRUNTIME140_APP!_CxxThrowException+0x90 [d:\agent\_work\18\s\src\vctools\crt\vcruntime\src\eh\throw.cpp @ 75] 
03 0000007a`2c5f0320 00007fff`a5b93661     Microsoft_ReactNative!Microsoft::JSI::ChakraRuntime::ThrowNativeExceptionOverride+0x2f [D:\a\_work\1\s\vnext\Shared\JSI\ChakraRuntime.cpp @ 623] 
04 0000007a`2c5f03b0 00007fff`a5b96115     Microsoft_ReactNative!Microsoft::JSI::ChakraApi::GetPropertyNameFromId+0x5d [D:\a\_work\1\s\vnext\Shared\JSI\ChakraApi.cpp @ 162] 
05 0000007a`2c5f03f0 00007fff`a5bec024     Microsoft_ReactNative!Microsoft::JSI::ChakraRuntime::utf8+0x15 [D:\a\_work\1\s\vnext\Shared\JSI\ChakraRuntime.cpp @ 323] 
06 0000007a`2c5f0420 00007fff`a5beecaf     Microsoft_ReactNative!winrt::Microsoft::ReactNative::implementation::JsiRuntime::PropertyIdToUtf8+0x40 [D:\a\_work\1\s\vnext\Microsoft.ReactNative\JsiApi.cpp @ 585] 
07 0000007a`2c5f04a0 00007fff`8ad2d432     Microsoft_ReactNative!winrt::impl::produce<winrt::Microsoft::ReactNative::implementation::JsiRuntime,winrt::Microsoft::ReactNative::IJsiRuntime>::PropertyIdToUtf8+0x2f [C:\vss-agent\2.194.0\BaseIntDir\Microsoft.ReactNative\Generated Files\winrt\Microsoft.ReactNative.h @ 3401] 
08 0000007a`2c5f04e0 00007fff`8ad3ec80     ReactNativeXaml!winrt::impl::consume_Microsoft_ReactNative_IJsiRuntime<winrt::Microsoft::ReactNative::IJsiRuntime>::PropertyIdToUtf8+0xc2 [C:\Users\asklar\source\repos\react-native-xaml\package\windows\ReactNativeXaml\Generated Files\winrt\Microsoft.ReactNative.h @ 728] 
09 0000007a`2c5f0690 00007fff`8acd65d6     ReactNativeXaml!winrt::Microsoft::ReactNative::JsiAbiRuntime::utf8+0xd0 [C:\Users\asklar\source\repos\react-native-xaml\examplenuget\windows\packages\Microsoft.ReactNative.Cxx.0.65.7\tools\Microsoft.ReactNative.Cxx\JSI\JsiAbiApi.cpp @ 308] 
0a 0000007a`2c5f0850 00007fff`8accf8fb     ReactNativeXaml!facebook::jsi::PropNameID::utf8+0x66 [C:\Users\asklar\source\repos\react-native-xaml\examplenuget\windows\packages\Microsoft.ReactNative.Cxx.0.65.7\tools\Microsoft.ReactNative.Cxx\jsi\jsi.h @ 436] 
0b 0000007a`2c5f0970 00007fff`8ad27659     ReactNativeXaml!XamlObject::get+0x7b [C:\Users\asklar\source\repos\react-native-xaml\package\windows\ReactNativeXaml\XamlObject.cpp @ 129] 
0c 0000007a`2c5f0e80 00007fff`8ad27489     ReactNativeXaml!winrt::Microsoft::ReactNative::JsiHostObjectWrapper::GetProperty+0xd9 [C:\Users\asklar\source\repos\react-native-xaml\examplenuget\windows\packages\Microsoft.ReactNative.Cxx.0.65.7\tools\Microsoft.ReactNative.Cxx\JSI\JsiAbiApi.cpp @ 97] 
0d 0000007a`2c5f10a0 00007fff`a5bea7b2     ReactNativeXaml!winrt::impl::produce<winrt::Microsoft::ReactNative::JsiHostObjectWrapper,winrt::Microsoft::ReactNative::IJsiHostObject>::GetProperty+0xb9 [C:\Users\asklar\source\repos\react-native-xaml\package\windows\ReactNativeXaml\Generated Files\winrt\Microsoft.ReactNative.h @ 3274] 
0e (Inline Function) --------`--------     Microsoft_ReactNative!winrt::impl::consume_Microsoft_ReactNative_IJsiHostObject<winrt::Microsoft::ReactNative::IJsiHostObject>::GetProperty+0x26 [C:\vss-agent\2.194.0\BaseIntDir\Microsoft.ReactNative\Generated Files\winrt\Microsoft.ReactNative.h @ 617] 
0f 0000007a`2c5f12c0 00007fff`a5b97e53     Microsoft_ReactNative!winrt::Microsoft::ReactNative::implementation::HostObjectWrapper::get+0x52 [D:\a\_work\1\s\vnext\Microsoft.ReactNative\JsiApi.cpp @ 272] 

asklar avatar Feb 20 '22 04:02 asklar

@asklar Does this repro on newer than 0.65.7? And does it repro in Hermes? Looks like something that should work but is an error in the Chakra JSI.

@vmoroz Does this look familiar at all?

e.nativeEvent here is a built in React Native thing, not part of the app code.

chrisglein avatar Feb 24 '22 19:02 chrisglein