Fix memory leak in ZipSubRStream

Inside attachStream() method we may clone passed stream, but never delete it.
This commit is contained in:
bank 2025-02-19 15:03:15 +03:00
parent 2bacfca540
commit 5e8af7020c
No known key found for this signature in database
GPG key ID: 3CEA4264C6F57E51
2 changed files with 9 additions and 3 deletions

View file

@ -700,7 +700,7 @@ Stream * ZipArchive::openFile(const char *filename, ZipEntry* ze, AccessMode mod
return NULL;
}
void ZipArchive::closeFile(Stream *stream)
void ZipArchive::closeFile(Stream *stream, bool deleteRootStream /*= false*/)
{
FilterStream *currentStream, *nextStream;
@ -724,6 +724,11 @@ void ZipArchive::closeFile(Stream *stream)
// so we need to update the relevant information in the header.
updateFile(tempStream);
}
// [bank / Feb-2025] If the stream was cloned (via openFileForRead method)
// we should clean it up and delete, otherwise it will rest in memory forever.
if (deleteRootStream && stream != mStream)
delete stream;
}
//-----------------------------------------------------------------------------
@ -888,7 +893,8 @@ bool ZipArchive::extractFile(const char *pathInZip, const char *filename, bool *
ret = false;
}
closeFile(source);
// Pass deleteRootStream flag to drop cloned FileStream
closeFile(source, true);
dest.close();
return ret;

View file

@ -480,7 +480,7 @@ public:
/// @param stream Stream to close
/// @see ZipArchive::openFile(const char *, AccessMode)
//-----------------------------------------------------------------------------
virtual void closeFile(Stream *stream);
virtual void closeFile(Stream *stream, bool deleteRootStream = false);
//-----------------------------------------------------------------------------
/// @brief Open a file within the zip file for read