summaryrefslogtreecommitdiff
path: root/package
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-10-02 11:38:22 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2013-10-03 08:31:49 +0000
commitf21ee4bd0d7b6082e8aa1a9f00ba467063fa5b27 (patch)
tree7ab94bd1272ccebf5cdbf654d7314c7c5cfb87f4 /package
parenta16c5c551f302c628d0118b95db09c4a16a784ce (diff)
Resolves: rhbz#1013844 fdo#47482 encrypted OOo 1.0 docs cannot be reopened
Workaround for the encrypted OpenOffice.org 1.0 documents generated by Libreoffice <= 3.6 with the new encryption format and using SHA256, but missing a specified startkey of SHA256 Change-Id: Ib1acc4441b5adc6721cb3cde7a1191aa978e9a1b (cherry picked from commit 11ad93f4ba84f190c908e92a2c960f7a9fa800c0) Reviewed-on: https://gerrit.libreoffice.org/6105 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'package')
-rw-r--r--package/source/zippackage/ZipPackageStream.cxx34
1 files changed, 29 insertions, 5 deletions
diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx
index 0937e4a37d80..299f53c2cf9c 100644
--- a/package/source/zippackage/ZipPackageStream.cxx
+++ b/package/source/zippackage/ZipPackageStream.cxx
@@ -549,13 +549,37 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream()
{
xResult = rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData(), bIsEncrypted, rZipPackage.GetSharedMutexRef() );
}
- catch( packages::WrongPasswordException& )
+ catch( const packages::WrongPasswordException& )
{
- // workaround for the encrypted documents generated with the old OOo1.x bug.
- if ( rZipPackage.GetStartKeyGenID() == xml::crypto::DigestID::SHA1 && !m_bUseWinEncoding )
+ if ( rZipPackage.GetStartKeyGenID() == xml::crypto::DigestID::SHA1 )
{
- xResult = rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData( true ), bIsEncrypted, rZipPackage.GetSharedMutexRef() );
- m_bUseWinEncoding = true;
+ try
+ {
+ // rhbz#1013844 / fdo#47482 workaround for the encrypted
+ // OpenOffice.org 1.0 documents generated by Libreoffice <=
+ // 3.6 with the new encryption format and using SHA256, but
+ // missing a specified startkey of SHA256
+
+ // force SHA256 and see if that works
+ m_nImportedStartKeyAlgorithm = xml::crypto::DigestID::SHA256;
+ xResult = rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData(), bIsEncrypted, rZipPackage.GetSharedMutexRef() );
+ return xResult;
+ }
+ catch (const packages::WrongPasswordException&)
+ {
+ // if that didn't work, restore to SHA1 and trundle through the *other* earlier
+ // bug fix
+ m_nImportedStartKeyAlgorithm = xml::crypto::DigestID::SHA1;
+ }
+
+ // workaround for the encrypted documents generated with the old OOo1.x bug.
+ if ( !m_bUseWinEncoding )
+ {
+ xResult = rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData( true ), bIsEncrypted, rZipPackage.GetSharedMutexRef() );
+ m_bUseWinEncoding = true;
+ }
+ else
+ throw;
}
else
throw;