<pre style='margin:0'>
Zero King (l2dy) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/67909febf1dafeaaea1196ea6f0803507f00c2fb">https://github.com/macports/macports-ports/commit/67909febf1dafeaaea1196ea6f0803507f00c2fb</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 67909fe p7zip: Fix CVE-2018-10115
</span>67909fe is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 67909febf1dafeaaea1196ea6f0803507f00c2fb
</span>Author: Zero King <l2dy@macports.org>
AuthorDate: Sat Jun 16 15:31:59 2018 +0000
<span style='display:block; white-space:pre;color:#404040;'> p7zip: Fix CVE-2018-10115
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Fixes: https://trac.macports.org/ticket/56425
</span>---
archivers/p7zip/Portfile | 5 +-
archivers/p7zip/files/patch-CVE-2018-10115.diff | 311 ++++++++++++++++++++++++
2 files changed, 314 insertions(+), 2 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/archivers/p7zip/Portfile b/archivers/p7zip/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 87d6f4a..ff643aa 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/archivers/p7zip/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/archivers/p7zip/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4,7 +4,7 @@ PortSystem 1.0
</span>
name p7zip
version 16.02
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 4
</span> categories archivers
# contains unrar code which has a restrictive license
license LGPL-2.1+ Restrictive/Distributable
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,7 +30,8 @@ variant universal {}
</span>
patchfiles patch-CVE-2016-9296.diff \
patch-CVE-2017-17969.diff \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- patch-CVE-2018-5996.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patch-CVE-2018-5996.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patch-CVE-2018-10115.diff
</span>
configure {
copy -force ${worksrcpath}/makefile.macosx_llvm_64bits ${worksrcpath}/makefile.machine
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/archivers/p7zip/files/patch-CVE-2018-10115.diff b/archivers/p7zip/files/patch-CVE-2018-10115.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..142d529
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/archivers/p7zip/files/patch-CVE-2018-10115.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,311 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Robert Luberda <robert@debian.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 29 May 2018 23:59:09 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: Fix CVE-2018-10115
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Apply "patch" taken from https://landave.io/files/patch_7zip_CVE-2018-10115.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Bugs-Debian: https://bugs.debian.org/897674
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar1Decoder.cpp | 16 +++++++++++-----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar1Decoder.h | 3 ++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar2Decoder.cpp | 17 +++++++++++++----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar2Decoder.h | 3 ++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar3Decoder.cpp | 19 +++++++++++++++----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar3Decoder.h | 3 ++-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar5Decoder.cpp | 8 ++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CPP/7zip/Compress/Rar5Decoder.h | 1 +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 8 files changed, 54 insertions(+), 16 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar1Decoder.cpp CPP/7zip/Compress/Rar1Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 68030c7..8c890c8 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar1Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar1Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -29,7 +29,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-CDecoder::CDecoder(): m_IsSolid(false), _errorMode(false) { }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++CDecoder::CDecoder(): _isSolid(false), _solidAllowed(false), _errorMode(false) { }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void CDecoder::InitStructures()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -345,7 +345,7 @@ void CDecoder::GetFlagsBuf()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void CDecoder::InitData()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!m_IsSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!_isSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AvrPlcB = AvrLn1 = AvrLn2 = AvrLn3 = NumHuf = Buf60 = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AvrPlc = 0x3500;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -391,6 +391,11 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (inSize == NULL || outSize == NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_INVALIDARG;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (_isSolid && !_solidAllowed)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!m_OutWindowStream.Create(kHistorySize))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_OUTOFMEMORY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!m_InBitStream.Create(1 << 20))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -398,13 +403,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_UnpackSize = (Int64)*outSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_OutWindowStream.SetStream(outStream);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_OutWindowStream.Init(m_IsSolid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ m_OutWindowStream.Init(_isSolid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_InBitStream.SetStream(inStream);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_InBitStream.Init();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CCoderReleaser coderReleaser(this);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ InitData();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!m_IsSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!_isSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _errorMode = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ InitStructures();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -475,6 +480,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (m_UnpackSize < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return m_OutWindowStream.Flush();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -491,7 +497,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (size < 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_INVALIDARG;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_IsSolid = ((data[0] & 1) != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _isSolid = ((data[0] & 1) != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar1Decoder.h CPP/7zip/Compress/Rar1Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 01b606b..8abb3a3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar1Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar1Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -38,7 +38,8 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UInt32 LastLength;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Int64 m_UnpackSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- bool m_IsSolid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool _isSolid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool _solidAllowed;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool _errorMode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UInt32 ReadBits(int numBits);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar2Decoder.cpp CPP/7zip/Compress/Rar2Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0580c8d..be8d842 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar2Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar2Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -80,7 +80,8 @@ static const UInt32 kHistorySize = 1 << 20;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const UInt32 kWindowReservSize = (1 << 22) + 256;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CDecoder::CDecoder():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_IsSolid(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _isSolid(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_TablesOK(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -320,6 +321,10 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (inSize == NULL || outSize == NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_INVALIDARG;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (_isSolid && !_solidAllowed)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!m_OutWindowStream.Create(kHistorySize))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_OUTOFMEMORY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!m_InBitStream.Create(1 << 20))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -330,12 +335,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UInt64 pos = 0, unPackSize = *outSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_OutWindowStream.SetStream(outStream);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_OutWindowStream.Init(m_IsSolid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ m_OutWindowStream.Init(_isSolid);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_InBitStream.SetStream(inStream);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ m_InBitStream.Init();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CCoderReleaser coderReleaser(this);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!m_IsSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!_isSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ InitStructures();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (unPackSize == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -343,6 +348,7 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (m_InBitStream.GetProcessedSize() + 2 <= m_PackSize) // test it: probably incorrect;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!ReadTables())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!ReadTables())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -386,6 +392,9 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!ReadLastTables())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return m_OutWindowStream.Flush();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -402,7 +411,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (size < 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_INVALIDARG;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_IsSolid = ((data[0] & 1) != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _isSolid = ((data[0] & 1) != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar2Decoder.h CPP/7zip/Compress/Rar2Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0e9005f..370bce2 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar2Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar2Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -138,7 +138,8 @@ class CDecoder :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Byte m_LastLevels[kMaxTableSize];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UInt64 m_PackSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- bool m_IsSolid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool _isSolid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool _solidAllowed;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool m_TablesOK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void InitStructures();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar3Decoder.cpp CPP/7zip/Compress/Rar3Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6cb8a6a..7b85833 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar3Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar3Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -92,7 +92,8 @@ CDecoder::CDecoder():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _writtenFileSize(0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _vmData(0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _vmCode(0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_IsSolid(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _isSolid(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _errorMode(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Ppmd7_Construct(&_ppmd);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -821,7 +822,7 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _writtenFileSize = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _unsupportedFilter = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!m_IsSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!_isSolid)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _lzSize = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _winPos = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -840,12 +841,15 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (_errorMode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (!m_IsSolid || !TablesRead)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (!_isSolid || !TablesRead)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool keepDecompressing;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ RINOK(ReadTables(keepDecompressing));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!keepDecompressing)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (;;)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -870,6 +874,9 @@ HRESULT CDecoder::CodeReal(ICompressProgressInfo *progress)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!keepDecompressing)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ RINOK(WriteBuf());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UInt64 packSize = m_InBitStream.BitDecoder.GetProcessedSize();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ RINOK(progress->SetRatioInfo(&packSize, &_writtenFileSize));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -890,6 +897,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!inSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_INVALIDARG;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (_isSolid && !_solidAllowed)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!_vmData)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _vmData = (Byte *)::MidAlloc(kVmDataSizeMax + kVmCodeSizeMax);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -928,7 +939,7 @@ STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *data, UInt32 size)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (size < 1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_INVALIDARG;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- m_IsSolid = ((data[0] & 1) != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _isSolid = ((data[0] & 1) != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar3Decoder.h CPP/7zip/Compress/Rar3Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2f72d7d..32c8943 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar3Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar3Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -191,7 +191,8 @@ class CDecoder:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CRecordVector<CTempFilter *> _tempFilters;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UInt32 _lastFilter;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- bool m_IsSolid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool _isSolid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool _solidAllowed;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool _errorMode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool _lzMode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar5Decoder.cpp CPP/7zip/Compress/Rar5Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index dc8830f..a826d5a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar5Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar5Decoder.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -72,6 +72,7 @@ CDecoder::CDecoder():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _writtenFileSize(0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _dictSizeLog(0),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _isSolid(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _wasInit(false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ _inputBuf(NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -801,7 +802,10 @@ HRESULT CDecoder::CodeReal()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (res == S_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ res = res2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (res == S_OK && _unpackSize_Defined && _writtenFileSize != _unpackSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -821,6 +825,10 @@ STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ try
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (_isSolid && !_solidAllowed)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return S_FALSE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ _solidAllowed = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (_dictSizeLog >= sizeof(size_t) * 8)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return E_NOTIMPL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CPP/7zip/Compress/Rar5Decoder.h CPP/7zip/Compress/Rar5Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b0a4dd1..3db5018 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CPP/7zip/Compress/Rar5Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CPP/7zip/Compress/Rar5Decoder.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -271,6 +271,7 @@ class CDecoder:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Byte _dictSizeLog;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool _tableWasFilled;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool _isSolid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool _solidAllowed;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool _wasInit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UInt32 _reps[kNumReps];
</span></pre><pre style='margin:0'>
</pre>