From: =?utf-8?q?Antoine_Beaupr=C3=A9?= Date: Fri, 2 Feb 2018 11:11:41 +0100 Subject: Heap-based buffer overflow in 7zip/Compress/ShrinkDecoder.cpp Origin: vendor, https://sourceforge.net/p/p7zip/bugs/_discuss/thread/0920f369/27d7/attachment/CVE-2017-17969.patch Forwarded: https://sourceforge.net/p/p7zip/bugs/_discuss/thread/0920f369/#27d7 Bug: https://sourceforge.net/p/p7zip/bugs/204/ Bug-Debian: https://bugs.debian.org/888297 Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-17969 Reviewed-by: Salvatore Bonaccorso Last-Update: 2018-02-01 Applied-Upstream: 18.00-beta Signed-off-by: André Hentschel --- CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp index 80b7e67..ca37764 100644 --- a/CPP/7zip/Compress/ShrinkDecoder.cpp +++ b/CPP/7zip/Compress/ShrinkDecoder.cpp @@ -121,8 +121,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * { _stack[i++] = _suffixes[cur]; cur = _parents[cur]; + if (cur >= kNumItems || i >= kNumItems) + break; } - + + if (cur >= kNumItems || i >= kNumItems) + break; + _stack[i++] = (Byte)cur; lastChar2 = (Byte)cur;