diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-02-23 12:53:34 +0000 |
---|---|---|
committer | Michael Stahl <Michael.Stahl@cib.de> | 2019-08-27 14:12:24 +0200 |
commit | 8ed9488de67e844a0ef5f91944b819eadb20e547 (patch) | |
tree | a08021e684553dd286e5aa092bba1fe24ce17f3c | |
parent | aa79414d7106bf5198ab47274ba2e0dae870e0aa (diff) |
forcepoint #5 check for short read
a zip file within a structured storage stream. underlying storage stream
claims larger size that it can satisfy on read
Change-Id: I8516b12df33ad78b2525192826f5e3aef2622eb8
Reviewed-on: https://gerrit.libreoffice.org/50240
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r-- | package/source/zipapi/ZipFile.cxx | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx index 0ef0cf993b4a..a2b178d179ed 100644 --- a/package/source/zipapi/ZipFile.cxx +++ b/package/source/zipapi/ZipFile.cxx @@ -822,11 +822,14 @@ sal_Int32 ZipFile::findEND( ) nEnd = nPos >= 0 ? nPos : 0 ; aGrabber.seek( nEnd ); - aGrabber.readBytes ( aBuffer, nLength - nEnd ); + + auto nSize = nLength - nEnd; + if (nSize != aGrabber.readBytes(aBuffer, nSize)) + throw ZipException("Zip END signature not found!" ); const sal_Int8 *pBuffer = aBuffer.getConstArray(); - nPos = nLength - nEnd - ENDHDR; + nPos = nSize - ENDHDR; while ( nPos >= 0 ) { if (pBuffer[nPos] == 'P' && pBuffer[nPos+1] == 'K' && pBuffer[nPos+2] == 5 && pBuffer[nPos+3] == 6 ) |