Skip to content

Commit 7b01608

Browse files
Mario-DLmergify[bot]
authored andcommitted
Addres parseXMLMemberDynamicType regression (#5499)
* Refs #22484: Add test Signed-off-by: Mario Dominguez <[email protected]> * Refs #22484: Fix Signed-off-by: Mario Dominguez <[email protected]> --------- Signed-off-by: Mario Dominguez <[email protected]> (cherry picked from commit 0207274)
1 parent 4b92d8a commit 7b01608

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

src/cpp/xmlparser/XMLDynamicParser.cpp

+37-5
Original file line numberDiff line numberDiff line change
@@ -1309,14 +1309,46 @@ DynamicType::_ref_type XMLParser:: parseXMLMemberDynamicType(
13091309

13101310
if (!isArray)
13111311
{
1312-
member = factory->create_sequence_type(content_type, length)->build();
1312+
DynamicTypeBuilder::_ref_type inner_builder{factory->create_sequence_type(content_type, length)};
1313+
if (nullptr != inner_builder)
1314+
{
1315+
member = inner_builder->build();
1316+
}
1317+
else
1318+
{
1319+
EPROSIMA_LOG_ERROR(XMLPARSER,
1320+
"Error parsing sequence element type: Cannot recognize inner content of member: " <<
1321+
memberType);
1322+
return {};
1323+
}
13131324
}
13141325
else
13151326
{
1316-
DynamicTypeBuilder::_ref_type inner_builder {factory->create_sequence_type(content_type, length)};
1317-
std::vector<uint32_t> bounds;
1318-
dimensionsToArrayBounds(memberArray, bounds);
1319-
member = factory->create_array_type(inner_builder->build(), bounds)->build();
1327+
DynamicTypeBuilder::_ref_type inner_builder{factory->create_sequence_type(content_type, length)};
1328+
if (nullptr != inner_builder)
1329+
{
1330+
std::vector<uint32_t> bounds;
1331+
dimensionsToArrayBounds(memberArray, bounds);
1332+
DynamicTypeBuilder::_ref_type sub_builder{factory->create_array_type(inner_builder->build(), bounds)};
1333+
if (nullptr != sub_builder)
1334+
{
1335+
member = sub_builder->build();
1336+
}
1337+
else
1338+
{
1339+
EPROSIMA_LOG_ERROR(XMLPARSER,
1340+
"Error parsing sequence element type: Cannot recognize inner content of member: " <<
1341+
memberType);
1342+
return {};
1343+
}
1344+
}
1345+
else
1346+
{
1347+
EPROSIMA_LOG_ERROR(XMLPARSER,
1348+
"Error parsing sequence element type: Cannot recognize inner content of member: " <<
1349+
memberType);
1350+
return {};
1351+
}
13201352
}
13211353
}
13221354
else if (p_root->Attribute(MAP_MAXLENGTH) != nullptr)

test/unittest/xmlparser/XMLParserTests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ TEST_F(XMLParserTests, regressions)
8585
EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/21334_profile_bin.xml", root));
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));
88+
EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/22101_profile_bin.xml", root));
8889
Log::Flush();
8990
}
9091

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<profiles><topic pr="" />>>�:��<types><type> <typedef type="strigs"uqe����eMaxLengt:="-0a" name="" a�rayDimensions="" />n</type></types>AA�A�<types><type> <typedef ty�������������="string"sequenceMaxLength="-1�����Mua" name="" arrayDimensions="" />sionsion/>n</type></types>A���AAA3D<types><type>y)edef type=""sequenceMaxLength="-255�����Multua" name="" arrayDimensnons="" />sions]on/>n</type></types>A���AAA1D<types><type>y)y�p��������def type=""sequenceMaxLength="(255�����Multica" name="" arrayDimensions="" />sin/>�����Mua" n/>n</type></types>A���AAA3D<types><type>y)y�pe> <typedef type=""sequenceMaxLength="-1�����Multica" name="" arrayDims="" />sionsion/>n</type></types>A���AAA77407812D<types><type>y)y�pe> <typedef type=""sequenceMaxLength="-255�����Multica" name="" arrayDimensions="" />sin/>n</type></types>AA�AAAAAA430097419635D<types><type>2/shm
2+
�d-sC$@Cdtypee="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types>A���AAA1D<types><type>y)y�p��������def type=""sequenceMaxmension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type><type>y)ype> <typedef type="string"sequenceMaxLength="-32769�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA860194839271D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-128�����Multica" name="" arrayDimension="" />sin/>�����Mua" nltica" name="" arra arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA430097419635D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-256�����Multica" data_writerrayDimension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA860194839271D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-255�����Multi���Multica" name="" arrayDimension="" />sin/>�����Mua" naxLengt:="-0a" name="" a�rayDimensions="" />n</type></types>AA�A�<types><type> <typedef ty�������������="string"sequenceMaxLength="-1�����Mua" name="" arrayDimensions="" />sionsion/>n</type></types>A���AAA3D<types><type>y)edef type=""sequenceMaxLength="-255�����Multua" name="" arrayDimensnons="" />sions]on/>n</type></types>A���AAA1D<types><type>y)y�p��������def type=""sequenceMaxLength="(255�����Multica" name="" arrayDimensions="" />sin/>�����Muname="" arrayDimension="" />sin/>�����Mua" nltica" name="" arra arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA430097419635D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-256�����Multica" name="B" arrayDimension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/ame="" arrayDimensio+s="" />sionsion/>n</type></types><profiles>A���AAA32771D</profiles><types><type>y)y�pe� <typedef type=""sequencenceMaxLength="-255�����Multica" name="" arrayDimensions="" />si/> ion/>n</type></types>A���AAA32219729D<types><type>y)y�pe> <typedef type=""sequenceMaxLength="-256�����Multica" name="" arrayDimensions="" />sin/>n</type></types>AA�AAAAAA430097419635D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����M����nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sdquenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sinef type=""sequenceMaxmension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type><type>y)ype> <typedef type="string"sequenceMaxLength="-32769�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA860194839271D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-128�����Multica" name="" arrayDimension="" />sin/>�����Mua" nltica" name="" arra arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA430097419635D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-256�����Multica" name="B" arrayDimension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA860194839271D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-255�����Multi���Multica" name="" arrayDimension="" />sin/>�����Mua" naxLengt:="-0a" name="" a�rayDimensions="" />n</type></types>AA�A�<types><type> <typedef ty�������������="string"sequenceMaxLength="-1�����Mua" name="" arrayDimensions="" />sionsion/>n</type></types>A���AAA3D<types><type>y)edef type=""sequenceMaxLength="-255�����Multua" name="" arrayDimensnons="" />sions]on/>n</type></types>A���AAA1D<types><type>y)y�p��������def type=""sequenceMaxLength="(255�����Multica" name="" arrayDimensions="" />sin/>�����Muname="" arrayDimension="" />sin/>�����Mua" nltica" name="" arra arrayDImension="" />"-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDi>sin/>�����Mua" nltica" name="" arrayDimension="" />sin/ame="" arrayDimensio+s="" />sionsion/>n</type></types><profiles>A���AAA32771D</profiles><types><type>y)y�pe� <typedef type=""sequencenceMaxLength="-255�����Multica" name="" arrayDimensions="" />si/> ion/>n</type></types>A���AAA32219729D<types><type>y)y�pe> <typedef type=""sequenceMaxLength="-255�����Multica" name="" arrayDimensions="" />sin/>n</type></types>AA�AAAAAA430097419635D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-0�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000066�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types><types><type>y)ype> <typedef type="string"sequenceMaxLength="-4295000065�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" /rrayDimensnons="" />sions]on/>n</type></types>A���AAA2D<types><type>y)y�p ������def type=""sequenceMaxmension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type><type>y)ype> <typedef type="string"sequenceMaxLength="-32769�����Multica" name="" arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA860194839271D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-24971358�����Multica" name="" arrayDimension="" />sin/>�����Mua" nltica" name="" arra arrayDImension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/>ca" name="" />sin/>n</type></types>AA�AAAAAA430097419635D<types><type>y)ype> <typedef type="string"sequenceMaxLength="-255�����Multica" name="B" arrayDimension="" />sin/>�����Mua" nltica" name="" arrayDimension="" />sin/ame="" arrayDimensio+s="" />sionsion/>n</type></types><profiles>A���AAA0D</profiles><types><profiles>A���AAA>��������</profiles></types><type>y)y�pe� <typedef type=""sequencenceMaxLength="-255�����Multica" name="" arrayDimensions="" />si/> type=""sequenceMaxLength="(-238�����Multica" name="" arrayDimensions=""�/>sin/>����sion/>n</type><type>>��������</type></profiles>

0 commit comments

Comments
 (0)