From e808fc4407bd2a405b3479d6f5f326631b767fa2 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 11 Jan 2021 04:49:43 -0500 Subject: [PATCH] Clone file handle for concurrent zip access. --- Engine/source/core/util/zip/zipCryptStream.cpp | 2 +- Engine/source/core/util/zip/zipSubStream.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Engine/source/core/util/zip/zipCryptStream.cpp b/Engine/source/core/util/zip/zipCryptStream.cpp index ba58349b6..8e0cddfe4 100644 --- a/Engine/source/core/util/zip/zipCryptStream.cpp +++ b/Engine/source/core/util/zip/zipCryptStream.cpp @@ -85,7 +85,7 @@ void ZipCryptRStream::setPassword(const char *password) bool ZipCryptRStream::attachStream(Stream* io_pSlaveStream) { - mStream = io_pSlaveStream; + mStream = io_pSlaveStream->clone(); mStreamStartPos = mStream->getPosition(); // [tom, 12/20/2005] Encrypted zip files have an extra 12 bytes diff --git a/Engine/source/core/util/zip/zipSubStream.cpp b/Engine/source/core/util/zip/zipSubStream.cpp index 4a38a955a..1c64fe3bc 100644 --- a/Engine/source/core/util/zip/zipSubStream.cpp +++ b/Engine/source/core/util/zip/zipSubStream.cpp @@ -58,7 +58,10 @@ bool ZipSubRStream::attachStream(Stream* io_pSlaveStream) AssertFatal(io_pSlaveStream != NULL, "NULL Slave stream?"); AssertFatal(m_pStream == NULL, "Already attached!"); + m_pStream = io_pSlaveStream->clone(); + if (!m_pStream) m_pStream = io_pSlaveStream; + m_originalSlavePosition = io_pSlaveStream->getPosition(); m_uncompressedSize = 0; m_currentPosition = 0;