-
-
Notifications
You must be signed in to change notification settings - Fork 98
Description
if you check the backtrace below you'll see that the code crashes on the __ptr dereference in __non_unique_impl:: __hash because it's dereferencing a junk address.
apparently __non_unique_impl is a specialization specifically and only for apple arm. crazy that it's broken out of the box.
so we definitely need some kind of workaround for when called on apple platforms.
struct __non_unique_impl : __string_impl_base {
_LIBCPP_INLINE_VISIBILITY _LIBCPP_ALWAYS_INLINE
static size_t __hash(__type_name_t __ptr) _NOEXCEPT {
size_t __hash = 5381;
while (unsigned char __c = static_cast<unsigned char>(*__ptr++))
__hash = (__hash * 33) ^ __c;
return __hash;
}
...
#0 0x0000000102672e5c in std::__type_info_implementations::__non_unique_impl::__hash(char const*) [inlined] at /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk/usr/include/c++/v1/typeinfo:222
#1 0x0000000102672e48 in std::__type_info_implementations::__non_unique_arm_rtti_bit_impl::__hash(unsigned long) [inlined] at /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk/usr/include/c++/v1/typeinfo:253
#2 0x0000000102672e14 in std::type_info::hash_code() const at /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.0.sdk/usr/include/c++/v1/typeinfo:338
#3 0x0000000102692efc in unsigned long bitsery::ext::StandardRTTI::get(Person&) at /x/libraries/include/bitsery/ext/utils/rtti_utils.h:41
#4 0x0000000102692e50 in void bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI::deserialize<bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >, Person, void bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI>::deserializeImpl<bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >, Person*, void bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >::ext<Person*, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> >(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> const&)::'lambda'(bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >&, Person&)>(bitsery::ext::MemResourceBase*, bitsery::ext::pointer_utils::PLCInfoDeserializer&, Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI>&, void bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >::ext<Person*, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> >(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> const&)::'lambda'(bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >&, Person&)&&, std::__1::integral_constant<bool, true>, std::__1::integral_constant<bitsery::ext::PointerOwnershipType, (bitsery::ext::PointerOwnershipType)1>) const::'lambda'(std::__1::shared_ptrbitsery::ext::PolymorphicHandlerBase const&), void bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI>::deserializeImpl<bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >, Person*, void bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >::ext<Person*, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> >(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> const&)::'lambda'(bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >&, Person&)>(bitsery::ext::MemResourceBase*, bitsery::ext::pointer_utils::PLCInfoDeserializer&, Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI>&, void bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >::ext<Person*, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> >(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> const&)::'lambda'(bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >&, Person&)&&, std::__1::integral_constant<bool, true>, std::__1::integral_constant<bitsery::ext::PointerOwnershipType, (bitsery::ext::PointerOwnershipType)1>) const::'lambda0'(std::__1::shared_ptrbitsery::ext::PolymorphicHandlerBase const&)>(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI>, void bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >::ext<Person, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> >(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> const&)::'lambda'(bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >&, Person&), void bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI>::deserializeImpl<bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >, Person*, void bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >::ext<Person*, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> >(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> const&)::'lambda'(bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >&, Person&)>(bitsery::ext::MemResourceBase*, bitsery::ext::pointer_utils::PLCInfoDeserializer&, Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI>&, void bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >::ext<Person*, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> >(Person*&, bitsery::ext::pointer_utils::PointerObjectExtensionBase<bitsery::ext::pointer_details::PtrOwnerManager, bitsery::ext::PolymorphicContext, bitsery::ext::StandardRTTI> const&)::'lambda'(bitsery::Deserializer<bitsery::InputBufferAdapter<String, FastConfig>, std::__1::tuple<bitsery::ext::PointerLinkingContext, bitsery::ext::PolymorphicContextbitsery::ext::StandardRTTI > >&, Person&)&&, std::__1::integral_constant<bool, true>, std::__1::integral_constant<bitsery::ext::PointerOwnershipType, (bitsery::ext::PointerOwnershipType)1>) const::'lambda0'(std::__1::shared_ptrbitsery::ext::PolymorphicHandlerBase const&)) const at /x/libraries/include/bitsery/ext/utils/polymorphism_utils.h:261