package/source/zipapi/ZipFile.cxx | 16 ++++++++-------- package/source/zippackage/ZipPackageFolder.cxx | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-)
New commits: commit b469cd43117c6269db121207e1be5152907b4dd0 Author: Thorsten Behrens <[email protected]> Date: Fri Dec 16 01:32:43 2011 +0100 Better fix for over-zealous Zip package consistency. Turns out our encrypted zip package code writes out mismatching compression methods in central directory and local file headers - so not only be lenient towards the apple bug (n#653688), but also ours (i.e. keep not comparing nMethod with nHow). diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx index 1278f09..16d5a00 100644 --- a/package/source/zipapi/ZipFile.cxx +++ b/package/source/zipapi/ZipFile.cxx @@ -686,9 +686,15 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry ) rEntry.sPath = sLOCPath; } - // the method can be reset for internal use so it is not checked + // check basic local file header / entry consistency, just + // plain ignore bits 1 & 2 of the flag field - they are either + // purely informative, or even fully undefined (depending on + // nMethod) + // Do *not* compare nMethod / nHow, older versions with + // encrypted streams write mismatching DEFLATE/STORE pairs + // there. bBroken = rEntry.nVersion != nVersion - || rEntry.nFlag != nFlag + || (rEntry.nFlag & ~6L) != (nFlag & ~6L) || rEntry.nTime != nTime || rEntry.nPathLen != nPathLen || !rEntry.sPath.equals( sLOCPath ); commit 8edfcee9f858a94fa62c91d633ced9c185b67cd3 Author: Thorsten Behrens <[email protected]> Date: Fri Dec 16 01:30:22 2011 +0100 Fix inconsistent compression method for encrypted ZIP packages. While fixing n#653688, turned out we write method=STORED into local file headers, and method=DEFLATED into central directory structure for encrypted ODF. Damn side-effects - fixed as hopefully intended here. diff --git a/package/source/zippackage/ZipPackageFolder.cxx b/package/source/zippackage/ZipPackageFolder.cxx index 60f5cd1..daee0f4 100644 --- a/package/source/zippackage/ZipPackageFolder.cxx +++ b/package/source/zippackage/ZipPackageFolder.cxx @@ -657,16 +657,16 @@ bool ZipPackageFolder::saveChild( const ::rtl::OUString &rShortName, const Conte rInfo.pStream->SetToBeEncrypted( sal_True ); } + // Then copy it back afterwards... + ZipPackageFolder::copyZipEntry ( rInfo.pStream->aEntry, *pTempEntry ); + // Remove hacky bit from entry flags - if ( pTempEntry->nFlag & ( 1 << 4 ) ) + if ( rInfo.pStream->aEntry.nFlag & ( 1 << 4 ) ) { - pTempEntry->nFlag &= ~( 1 << 4 ); - pTempEntry->nMethod = STORED; + rInfo.pStream->aEntry.nFlag &= ~( 1 << 4 ); + rInfo.pStream->aEntry.nMethod = STORED; } - // Then copy it back afterwards... - ZipPackageFolder::copyZipEntry ( rInfo.pStream->aEntry, *pTempEntry ); - // TODO/LATER: get rid of this hack ( the encrypted stream size property is changed during saving ) if ( rInfo.pStream->IsEncrypted() ) rInfo.pStream->setSize( nOwnStreamOrigSize ); commit 4dfcdfc3d556ee92992a14e52d04cc9c7ffbe471 Author: Thorsten Behrens <[email protected]> Date: Fri Dec 16 09:41:00 2011 +0100 Revert "Fix n#653688" This reverts commit bf7f65de1bbd2e12eb68c1c4d68b5193b60f7d3f. Previous fix broke reading of password-protected documents. diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx index 4fd8aea..1278f09 100644 --- a/package/source/zipapi/ZipFile.cxx +++ b/package/source/zipapi/ZipFile.cxx @@ -688,7 +688,7 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry ) // the method can be reset for internal use so it is not checked bBroken = rEntry.nVersion != nVersion - || rEntry.nMethod != nHow + || rEntry.nFlag != nFlag || rEntry.nTime != nTime || rEntry.nPathLen != nPathLen || !rEntry.sPath.equals( sLOCPath ); @@ -698,12 +698,6 @@ sal_Bool ZipFile::readLOC( ZipEntry &rEntry ) bBroken = sal_True; } - // ignore bits 1 & 2 for normal deflate algo - they're purely informative - if( nHow != 8 && nHow != 9 ) - bBroken = bBroken || rEntry.nFlag != nFlag; - else if( (rEntry.nFlag & ~6L) != (nFlag & ~6L) ) - bBroken = true; - if ( bBroken && !bRecoveryMode ) throw ZipIOException( OUString( RTL_CONSTASCII_USTRINGPARAM( "The stream seems to be broken!" ) ), uno::Reference< XInterface >() ); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
