diff --git a/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp b/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp index 14c0de1c93f..69344e65bad 100644 --- a/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp +++ b/src/cpp/rtps/xmlparser/XMLDynamicParser.cpp @@ -1185,6 +1185,13 @@ p_dynamictypebuilder_t XMLParser::parseXMLMemberDynamicType( dimensionsToArrayBounds(memberArray, bounds); memberBuilder = factory->create_array_builder(innerBuilder, bounds); //factory->DeleteBuilder(innerBuilder); + if (nullptr == innerBuilder) + { + EPROSIMA_LOG_ERROR(XMLPARSER, + "Error parsing map member type: `create_map_type` failed for key=`" << keyTypeBuilder << + "`, value=`" << valueTypeBuilder << "`, length=`" << length << "`."); + return nullptr; + } } } else if (strncmp(memberType, BOOLEAN, 8) == 0) diff --git a/test/unittest/xmlparser/XMLParserTests.cpp b/test/unittest/xmlparser/XMLParserTests.cpp index 8b9ff17d57b..eb8d32e0574 100644 --- a/test/unittest/xmlparser/XMLParserTests.cpp +++ b/test/unittest/xmlparser/XMLParserTests.cpp @@ -78,6 +78,7 @@ TEST_F(XMLParserTests, regressions) EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/20608_profile_bin.xml", root)); EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/20610_profile_bin.xml", root)); EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/20732_profile_bin.xml", root)); + EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/22535_profile_bin.xml", root)); } TEST_F(XMLParserTests, NoFile) diff --git a/test/unittest/xmlparser/regressions/22535_profile_bin.xml b/test/unittest/xmlparser/regressions/22535_profile_bin.xml new file mode 100644 index 00000000000..096e214b223 --- /dev/null +++ b/test/unittest/xmlparser/regressions/22535_profile_bin.xml @@ -0,0 +1 @@ +=>>" />>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>" />>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>" />>>" />>>" />>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>" />>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>" />>€lfil"—™ "Ņž/>>€lfil"—™ "Ņž/>>>" />>>" />>€lfil"—™ "Ņž/>>>" />>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€>>>€lfil"—™ "Ņž/>" />>€lfil"Ņž/>" />:trans€/ \ No newline at end of file