diff --git a/modules/core/src/persistence.cpp b/modules/core/src/persistence.cpp index c81edf674b..1e07119f4e 100644 --- a/modules/core/src/persistence.cpp +++ b/modules/core/src/persistence.cpp @@ -1819,7 +1819,6 @@ void FileStorage::endWriteStruct() FileStorage::~FileStorage() { - p.release(); } bool FileStorage::open(const String& filename, int flags, const String& encoding) diff --git a/modules/core/test/test_io.cpp b/modules/core/test/test_io.cpp index 965185e5f6..692e7f36c6 100644 --- a/modules/core/test/test_io.cpp +++ b/modules/core/test/test_io.cpp @@ -1772,4 +1772,20 @@ TEST(Core_InputOutput, FileStorage_open_empty_16823) EXPECT_EQ(0, remove(fname.c_str())); } +TEST(Core_InputOutput, FileStorage_copy_constructor_17412) +{ + std::string fname = tempfile("test.yml"); + FileStorage fs_orig(fname, cv::FileStorage::WRITE); + fs_orig << "string" << "wat"; + fs_orig.release(); + + // no crash anymore + cv::FileStorage fs; + fs = cv::FileStorage(fname, cv::FileStorage::READ); + std::string s; + fs["string"] >> s; + EXPECT_EQ(s, "wat"); + EXPECT_EQ(0, remove(fname.c_str())); +} + }} // namespace