Kaydet (Commit) f505d910 authored tarafından Christian Lippka ORACLE's avatar Christian Lippka ORACLE

impress208: #i115944# fixing large ooxml files

üst 3d6d4b78
...@@ -836,14 +836,18 @@ sal_Int32 ZipFile::recover() ...@@ -836,14 +836,18 @@ sal_Int32 ZipFile::recover()
aGrabber.seek( 0 ); aGrabber.seek( 0 );
// TODO/LATER: let the files > 2Gb handle the 2Gb border correctly ( if header is splitted ) const sal_Int32 nToRead = 32000;
for( sal_Int32 nGenPos = 0; aGrabber.readBytes( aBuffer, SAL_MAX_INT32 ) && aBuffer.getLength() > 30; ) for( sal_Int32 nGenPos = 0; aGrabber.readBytes( aBuffer, nToRead ) && aBuffer.getLength() > 16; )
{ {
const sal_Int8 *pBuffer = aBuffer.getConstArray(); const sal_Int8 *pBuffer = aBuffer.getConstArray();
sal_Int32 nBufSize = aBuffer.getLength(); sal_Int32 nBufSize = aBuffer.getLength();
sal_Int32 nPos = 0; sal_Int32 nPos = 0;
while( nPos < nBufSize - 16 ) // the buffer should contain at least one header,
// or if it is end of the file, at least the postheader with sizes and hash
while( nPos < nBufSize - 30
|| ( aBuffer.getLength() < nToRead && nPos < nBufSize - 16 ) )
{ {
if ( nPos < nBufSize - 30 && pBuffer[nPos] == 'P' && pBuffer[nPos+1] == 'K' && pBuffer[nPos+2] == 3 && pBuffer[nPos+3] == 4 ) if ( nPos < nBufSize - 30 && pBuffer[nPos] == 'P' && pBuffer[nPos+1] == 'K' && pBuffer[nPos+2] == 3 && pBuffer[nPos+3] == 4 )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment