You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
3.4 KiB
66 lines
3.4 KiB
From 11ad93f4ba84f190c908e92a2c960f7a9fa800c0 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
Date: Wed, 2 Oct 2013 11:38:22 +0100
|
|
Subject: [PATCH] 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
|
|
---
|
|
package/source/zippackage/ZipPackageStream.cxx | 34 +++++++++++++++++++++----
|
|
sc/qa/unit/data/ods/passwordWrongSHA.ods | Bin 0 -> 6560 bytes
|
|
sc/qa/unit/subsequent_filters-test.cxx | 10 ++++++++
|
|
3 files changed, 39 insertions(+), 5 deletions(-)
|
|
create mode 100644 sc/qa/unit/data/ods/passwordWrongSHA.ods
|
|
|
|
diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx
|
|
index 78e647e..bb96203 100644
|
|
--- a/package/source/zippackage/ZipPackageStream.cxx
|
|
+++ b/package/source/zippackage/ZipPackageStream.cxx
|
|
@@ -535,13 +535,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;
|