From 4564b8a224545a54c545e9d2743cce3c0e1f1c5b Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Fri, 17 Jul 2020 05:28:50 +0300 Subject: [PATCH] Merge pull request #17841 from vpisarev:fixed_fs_dtor * fixed issue #17412 * Update test_io.cpp --- modules/core/src/persistence.cpp | 1 - modules/core/test/test_io.cpp | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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