Skip to content

Commit aef5108

Browse files
Fix null-dereference in parseXMLMemberDynamicType (#5580)
* Refs #22535. Add regression test. Signed-off-by: Miguel Company <[email protected]> * Refs #22535. Fix issue. Signed-off-by: Miguel Company <[email protected]> --------- Signed-off-by: Miguel Company <[email protected]> (cherry picked from commit c0e7929) Co-authored-by: Miguel Company <[email protected]>
1 parent b939f72 commit aef5108

File tree

3 files changed

+9
-0
lines changed

3 files changed

+9
-0
lines changed

src/cpp/xmlparser/XMLDynamicParser.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -1428,6 +1428,13 @@ DynamicType::_ref_type XMLParser:: parseXMLMemberDynamicType(
14281428
{
14291429
DynamicTypeBuilder::_ref_type inner_builder {factory->create_map_type(key_type, value_type,
14301430
length)};
1431+
if (!inner_builder)
1432+
{
1433+
EPROSIMA_LOG_ERROR(XMLPARSER,
1434+
"Error parsing map member type: `create_map_type` failed for key=`" << key_type <<
1435+
"`, value=`" << value_type << "`, length=`" << length << "`.");
1436+
return {};
1437+
}
14311438
std::vector<uint32_t> bounds;
14321439
dimensionsToArrayBounds(memberArray, bounds);
14331440
DynamicTypeBuilder::_ref_type builder = factory->create_array_type(

test/unittest/xmlparser/XMLParserTests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ TEST_F(XMLParserTests, regressions)
8686
EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/21856_profile_bin.xml", root));
8787
EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/22054_profile_bin.xml", root));
8888
EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/22101_profile_bin.xml", root));
89+
EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/22535_profile_bin.xml", root));
8990
Log::Flush();
9091
}
9192

test/unittest/xmlparser/regressions/22535_profile_bin.xml

+1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)