@@ -1585,6 +1585,10 @@ size_t DynamicDataImpl::calculate_key_serialized_size(
15851585 for (auto & member : enclosing_type_->get_all_members ())
15861586 {
15871587 auto member_impl {traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member.second )};
1588+ if (!member_impl)
1589+ {
1590+ continue ;
1591+ }
15881592 if (member_impl->get_descriptor ().is_key ())
15891593 {
15901594 there_is_keyed_member = true ;
@@ -1610,6 +1614,10 @@ size_t DynamicDataImpl::calculate_key_serialized_size(
16101614 for (auto & member : enclosing_type_->get_all_members ())
16111615 {
16121616 auto member_impl {traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member.second )};
1617+ if (!member_impl)
1618+ {
1619+ continue ;
1620+ }
16131621 auto member_type {traits<DynamicType>::narrow<DynamicTypeImpl>(member_impl->get_descriptor ().type ())};
16141622
16151623 // TODO(richiware) For the future support of optionals. Optional member cannot be a keyed member.
@@ -1978,6 +1986,10 @@ void DynamicDataImpl::serialize_key(
19781986 for (auto & member : enclosing_type_->get_all_members ())
19791987 {
19801988 auto member_impl {traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member.second )};
1989+ if (!member_impl)
1990+ {
1991+ continue ;
1992+ }
19811993 if (member_impl->get_descriptor ().is_key ())
19821994 {
19831995 there_is_keyed_member = true ;
@@ -2002,6 +2014,10 @@ void DynamicDataImpl::serialize_key(
20022014 for (auto & member : enclosing_type_->get_all_members ())
20032015 {
20042016 auto member_impl {traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member.second )};
2017+ if (!member_impl)
2018+ {
2019+ continue ;
2020+ }
20052021 auto member_type {traits<DynamicType>::narrow<DynamicTypeImpl>(member_impl->get_descriptor ().type ())};
20062022
20072023 if (TK_MAP != member_type->resolve_alias_enclosed_type ()->get_kind ())
@@ -2050,6 +2066,11 @@ void DynamicDataImpl::apply_bitset_mask(
20502066 assert (enclosing_type_->get_all_members ().end () != enclosing_type_->get_all_members ().find (member_id));
20512067 const auto member_impl {traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(
20522068 enclosing_type_->get_all_members ().at (member_id))};
2069+ if (!member_impl)
2070+ {
2071+ EPROSIMA_LOG_ERROR (DYN_TYPES , " Error applying bitset mask. MemberId not found." );
2072+ return ;
2073+ }
20532074 const auto member_index {member_impl->get_descriptor ().index ()};
20542075 const auto bound {enclosing_type_->get_descriptor ().bound ().at (member_index)};
20552076 uint64_t mask {64 == bound ? 0x0llu : 0XFFFFFFFFFFFFFFFFllu << bound};
@@ -4008,6 +4029,13 @@ void DynamicDataImpl::set_discriminator_value(
40084029 auto m_impl = traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member);
40094030 int32_t label {0 };
40104031
4032+ if (!m_impl)
4033+ {
4034+ EPROSIMA_LOG_ERROR (DYN_TYPES , " MemberId " << id << " not found in enclosing type "
4035+ << enclosing_type_->get_descriptor ().name ());
4036+ return ;
4037+ }
4038+
40114039 if (m_impl->get_descriptor ().is_default_label ())
40124040 {
40134041 label = enclosing_type_->default_value ();
@@ -6406,6 +6434,11 @@ bool DynamicDataImpl::deserialize(
64066434 {
64076435 auto member_impl = traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(member);
64086436 traits<DynamicDataImpl>::ref_type member_data;
6437+ if (!member_impl)
6438+ {
6439+ throw fastcdr::exception::BadParamException (
6440+ " Member not found in DynamicTypeImpl" );
6441+ }
64096442 auto it = value_.find (member_impl->get_id ());
64106443
64116444 if (it != value_.end ())
@@ -6466,6 +6499,12 @@ bool DynamicDataImpl::deserialize(
64666499 auto m_impl {traits<DynamicTypeMember>::narrow<DynamicTypeMemberImpl>(
64676500 member)};
64686501
6502+ if (!m_impl)
6503+ {
6504+ ret_value = false ;
6505+ continue ;
6506+ }
6507+
64696508 for (auto label : m_impl->get_descriptor ().label ())
64706509 {
64716510 if (static_cast <int32_t >(discriminator) == label)
0 commit comments