package/source/zipapi/XBufferedThreadedStream.cxx | 4 ++-- package/source/zipapi/XBufferedThreadedStream.hxx | 2 +- package/source/zipapi/XUnbufferedStream.cxx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-)
New commits: commit a62507eb405961c27ebf79d6b9bdd7a106d06123 Author: Mohammed Abdul Azeem <azeemmys...@gmail.com> Date: Fri Jul 7 00:01:03 2017 +0530 tdf#108821 - fix for overflow of variables on opening huge files This should fix the issue, as well as restrict available to return only non-negative values. Change-Id: I198e226e945b9bd79dec32b1686c20e2a8dfaf3e Reviewed-on: https://gerrit.libreoffice.org/39665 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Jenkins <c...@libreoffice.org> diff --git a/package/source/zipapi/XBufferedThreadedStream.cxx b/package/source/zipapi/XBufferedThreadedStream.cxx index 87b7349cccba..c7fd3dbacd36 100644 --- a/package/source/zipapi/XBufferedThreadedStream.cxx +++ b/package/source/zipapi/XBufferedThreadedStream.cxx @@ -145,7 +145,7 @@ sal_Int32 SAL_CALL XBufferedThreadedStream::readBytes( Sequence< sal_Int8 >& rDa if( !hasBytes() ) return 0; - const sal_Int32 nAvailableSize = std::min<sal_Int32>( nBytesToRead, remainingSize() ); + const sal_Int32 nAvailableSize = static_cast< sal_Int32 > ( std::min< sal_Int64 >( nBytesToRead, remainingSize() ) ); rData.realloc( nAvailableSize ); sal_Int32 i = 0, nPendingBytes = nAvailableSize; @@ -188,7 +188,7 @@ sal_Int32 SAL_CALL XBufferedThreadedStream::available() if( !hasBytes() ) return 0; - return remainingSize(); + return static_cast< sal_Int32 > ( std::min< sal_Int64 >( SAL_MAX_INT32, remainingSize() ) ); } void SAL_CALL XBufferedThreadedStream::closeInput() diff --git a/package/source/zipapi/XBufferedThreadedStream.hxx b/package/source/zipapi/XBufferedThreadedStream.hxx index 9ba908e01f5e..c28bb049de16 100644 --- a/package/source/zipapi/XBufferedThreadedStream.hxx +++ b/package/source/zipapi/XBufferedThreadedStream.hxx @@ -44,7 +44,7 @@ private: static const size_t nBufferSize = 32 * 1024; const Buffer& getNextBlock(); - size_t remainingSize() const { return mnStreamSize - mnPos; } + sal_Int64 remainingSize() const { return mnStreamSize - mnPos; } bool hasBytes() const { return mnPos < mnStreamSize; } bool canProduce() const diff --git a/package/source/zipapi/XUnbufferedStream.cxx b/package/source/zipapi/XUnbufferedStream.cxx index e82e720795d3..d1f65b29b7aa 100644 --- a/package/source/zipapi/XUnbufferedStream.cxx +++ b/package/source/zipapi/XUnbufferedStream.cxx @@ -310,7 +310,7 @@ void SAL_CALL XUnbufferedStream::skipBytes( sal_Int32 nBytesToSkip ) sal_Int32 SAL_CALL XUnbufferedStream::available( ) { //available size must include the prepended header in case of wrapped raw stream - return static_cast < sal_Int32 > ( mnZipSize + mnHeaderToRead - mnMyCurrent ); + return static_cast< sal_Int32 > ( std::min< sal_Int64 >( SAL_MAX_INT32, (mnZipSize + mnHeaderToRead - mnMyCurrent) ) ); } void SAL_CALL XUnbufferedStream::closeInput( ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits