<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>