Merge pull request #25955 from Kumataro:fix25946

core: FileStorage: detect invalid attribute value
pull/25394/head
Alexander Smorkalov 4 months ago committed by GitHub
commit 65853aa783
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      modules/core/src/persistence_xml.cpp
  2. 18
      modules/core/test/test_io.cpp

@ -737,6 +737,8 @@ public:
if( c != '\"' && c != '\'' ) if( c != '\"' && c != '\'' )
{ {
ptr = skipSpaces( ptr, CV_XML_INSIDE_TAG ); ptr = skipSpaces( ptr, CV_XML_INSIDE_TAG );
if(!ptr)
CV_PARSE_ERROR_CPP("Invalid attribute value");
if( *ptr != '\"' && *ptr != '\'' ) if( *ptr != '\"' && *ptr != '\'' )
CV_PARSE_ERROR_CPP( "Attribute value should be put into single or double quotes" ); CV_PARSE_ERROR_CPP( "Attribute value should be put into single or double quotes" );
} }

@ -1985,4 +1985,22 @@ INSTANTIATE_TEST_CASE_P( /*nothing*/,
Core_InputOutput_regression_25073, Core_InputOutput_regression_25073,
Values("test.json", "test.xml", "test.yml") ); Values("test.json", "test.xml", "test.yml") );
// see https://github.com/opencv/opencv/issues/25946
TEST(Core_InputOutput, FileStorage_invalid_attribute_value_regression_25946)
{
const std::string fileName = cv::tempfile("FileStorage_invalid_attribute_value_exception_test.xml");
const std::string content = "<?xml \n_=";
std::fstream testFile;
testFile.open(fileName.c_str(), std::fstream::out);
if(!testFile.is_open()) FAIL();
testFile << content;
testFile.close();
FileStorage fs;
EXPECT_ANY_THROW( fs.open(fileName, FileStorage::READ + FileStorage::FORMAT_XML) );
ASSERT_EQ(0, std::remove(fileName.c_str()));
}
}} // namespace }} // namespace

Loading…
Cancel
Save