Commit 84e17126 authored by Patrick Spettel's avatar Patrick Spettel Committed by Patrick Spettel

Fix temporary file removal in imdecode for tiff

The TiffDecoder keeps an open file handle.
As a consequence the file cannot be removed
before the TiffDecoder closes the file.
parent e884bbab
......@@ -514,8 +514,14 @@ imdecode_( const Mat& buf, int flags, int hdrtype, Mat* mat=0 )
if( !decoder->readHeader() )
{
if( !filename.empty() )
remove(filename.c_str());
decoder.release();
if ( !filename.empty() )
{
if ( remove(filename.c_str()) != 0 )
{
CV_Error( CV_StsError, "unable to remove temporary file" );
}
}
return 0;
}
......@@ -556,8 +562,14 @@ imdecode_( const Mat& buf, int flags, int hdrtype, Mat* mat=0 )
}
bool code = decoder->readData( *data );
if( !filename.empty() )
remove(filename.c_str());
decoder.release();
if ( !filename.empty() )
{
if ( remove(filename.c_str()) != 0 )
{
CV_Error( CV_StsError, "unable to remove temporary file" );
}
}
if( !code )
{
......
......@@ -890,6 +890,19 @@ TEST(Imgcodecs_Tiff, decode_multipage)
CV_GrfmtReadTifMultiPage test; test.safe_run();
}
TEST(Imgcodecs_Tiff, imdecode_no_exception_temporary_file_removed)
{
cvtest::TS& ts = *cvtest::TS::ptr();
string input = string(ts.get_data_path()) + "../cv/shared/lena.png";
cv::Mat img = cv::imread(input);
ASSERT_FALSE(img.empty());
std::vector<uchar> buf;
EXPECT_NO_THROW(cv::imencode(".tiff", img, buf));
EXPECT_NO_THROW(cv::imdecode(buf, IMREAD_UNCHANGED));
}
#endif
#ifdef HAVE_WEBP
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment