diff --git a/src/cpp/rtps/xmlparser/XMLElementParser.cpp b/src/cpp/rtps/xmlparser/XMLElementParser.cpp index 18f1fad219e..093d379b253 100644 --- a/src/cpp/rtps/xmlparser/XMLElementParser.cpp +++ b/src/cpp/rtps/xmlparser/XMLElementParser.cpp @@ -4579,6 +4579,14 @@ XMLP_ret XMLParser::getXMLThreadSettingsWithPort( ret = XMLP_ret::XML_ERROR; break; } + catch (const std::out_of_range& except) + { + EPROSIMA_LOG_ERROR(XMLPARSER, + "Value of the port attribute " << attrib->Value() << " out of range. " << + except.what()); + ret = XMLP_ret::XML_ERROR; + break; + } } else { diff --git a/test/unittest/xmlparser/XMLParserTests.cpp b/test/unittest/xmlparser/XMLParserTests.cpp index 722fc125094..6757bfca11e 100644 --- a/test/unittest/xmlparser/XMLParserTests.cpp +++ b/test/unittest/xmlparser/XMLParserTests.cpp @@ -71,6 +71,7 @@ TEST_F(XMLParserTests, regressions) EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/simple_participant_profiles_nok.xml", root)); EXPECT_EQ(XMLP_ret::XML_OK, XMLParser::loadXML("regressions/simple_participant_profiles_ok.xml", root)); EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/20186_profile_bin.xml", root)); + EXPECT_EQ(XMLP_ret::XML_ERROR, XMLParser::loadXML("regressions/20187_profile_bin.xml", root)); } TEST_F(XMLParserTests, NoFile) diff --git a/test/unittest/xmlparser/regressions/20187_profile_bin.xml b/test/unittest/xmlparser/regressions/20187_profile_bin.xml new file mode 100644 index 00000000000..0024e17ed6d --- /dev/null +++ b/test/unittest/xmlparser/regressions/20187_profile_bin.xml @@ -0,0 +1 @@ +