download.lst | 8 package/inc/ZipFile.hxx | 12 package/inc/ZipPackage.hxx | 13 package/inc/ZipPackageStream.hxx | 25 package/source/zipapi/XUnbufferedStream.cxx | 17 package/source/zipapi/XUnbufferedStream.hxx | 4 package/source/zipapi/ZipFile.cxx | 49 package/source/zipapi/ZipOutputStream.cxx | 3 package/source/zippackage/ZipPackage.cxx | 48 package/source/zippackage/ZipPackageStream.cxx | 113 package/source/zippackage/zipfileaccess.cxx | 4 readlicense_oo/license/CREDITS.fodt | 3859 +++++----- sc/source/ui/view/dbfunc.cxx | 8 sc/source/ui/view/tabvwsha.cxx | 3 sw/source/core/access/AccessibilityCheck.cxx | 6 xmlsecurity/CppunitTest_xmlsecurity_signing.mk | 1 xmlsecurity/qa/unit/signing/data/signature-forgery-cdh-lfh.docx |binary xmlsecurity/qa/unit/signing/signing.cxx | 27 18 files changed, 2180 insertions(+), 2020 deletions(-)
New commits: commit 4c2642166b1d5b7fa88bc26f81515f1ee6cc47b5 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Wed Sep 18 09:23:25 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:34 2024 +0200 curl: upgrade to 8.10.1 Downloaded from https://curl.se/download/curl-8.10.1.tar.xz Change-Id: If65882b06172e9caf93d941011baa49c84d4f054 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173630 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> diff --git a/download.lst b/download.lst index c00c0e5b883d..01733eefb9f9 100644 --- a/download.lst +++ b/download.lst @@ -80,8 +80,8 @@ CPPUNIT_TARBALL := cppunit-1.15.1.tar.gz # three static lines # so that git cherry-pick # will not run into conflicts -CURL_SHA256SUM := e6b142f0e85e954759d37e26a3627e2278137595be80e3a860c4353e4335e5a0 -CURL_TARBALL := curl-8.10.0.tar.xz +CURL_SHA256SUM := 73a4b0e99596a09fa5924a4fb7e4b995a85fda0d18a2c02ab9cf134bebce04ee +CURL_TARBALL := curl-8.10.1.tar.xz # three static lines # so that git cherry-pick # will not run into conflicts commit b246c10f124fd43522b3a761a69d8a37622db391 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Mon Sep 16 20:31:06 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 tdf#162866 package: fix loading AutoCorrect file with case-insensitive ... duplicates; the directory names of AutoCorrect entries are user-editable, so this needs to be supported. AutoCorrect uses an ODF package because the ODF document loading code requires the ODF document to be in an ODF storage with a MediaType property. AutoCorrect writes an empty mimetype file, and if such is present in an .odt file that is being loaded, existing checks will detect it as corrupted, so we can use this to check that the file is an AutoCorrect file and turn off the case-insensitive check. (regression from commit 4833f131243bdb409ddfaff8b4db87d4ed2af98f) Change-Id: I43887f7dad0c8cbb465b4c0f1c38bcc3244a7675 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173477 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> Tested-by: Jenkins (cherry picked from commit 9012355a60bd88db582078e38123863a4959b72f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173493 Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> diff --git a/package/inc/ZipFile.hxx b/package/inc/ZipFile.hxx index 906f1fc5bd82..71f38cc3ebb4 100644 --- a/package/inc/ZipFile.hxx +++ b/package/inc/ZipFile.hxx @@ -54,7 +54,7 @@ class ZipEnumeration; class ZipFile { public: - enum class Checks { Default, CheckInsensitive }; + enum class Checks { Default, CheckInsensitive, TryCheckInsensitive }; private: rtl::Reference<comphelper::RefCountedMutex> m_aMutexHolder; diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx index 01a8c16e2842..2e82433fb0da 100644 --- a/package/source/zipapi/ZipFile.cxx +++ b/package/source/zipapi/ZipFile.cxx @@ -1470,6 +1470,17 @@ sal_Int32 ZipFile::readCEN() SAL_INFO("package", "Duplicate CEN entry: \"" << aEntry.sPath << "\""); throw ZipException(u"Duplicate CEN entry"_ustr); } + if (aEntries.empty() && m_Checks == Checks::TryCheckInsensitive) + { + if (aEntry.sPath == "mimetype" && aEntry.nSize == 0) + { // tdf#162866 AutoCorrect uses ODF package, directories are + m_Checks = Checks::Default; // user-defined => ignore! + } + else + { + m_Checks = Checks::CheckInsensitive; + } + } // this is required for OOXML, but not for ODF auto const lowerPath(aEntry.sPath.toAsciiLowerCase()); if (!m_EntriesInsensitive.insert(lowerPath).second && m_Checks == Checks::CheckInsensitive) diff --git a/package/source/zippackage/ZipPackage.cxx b/package/source/zippackage/ZipPackage.cxx index 7a133df16db6..91a82fe7fbdb 100644 --- a/package/source/zippackage/ZipPackage.cxx +++ b/package/source/zippackage/ZipPackage.cxx @@ -898,7 +898,11 @@ void SAL_CALL ZipPackage::initialize( const uno::Sequence< Any >& aArguments ) { m_pZipFile.emplace(m_aMutexHolder, m_xContentStream, m_xContext, true, m_bForceRecovery, - m_nFormat == embed::StorageFormats::ZIP ? ZipFile::Checks::Default : ZipFile::Checks::CheckInsensitive); + m_nFormat == embed::StorageFormats::ZIP + ? ZipFile::Checks::Default + : m_nFormat == embed::StorageFormats::OFOPXML + ? ZipFile::Checks::CheckInsensitive + : ZipFile::Checks::TryCheckInsensitive); getZipFileContents(); } catch ( IOException & e ) @@ -1273,7 +1277,11 @@ void ZipPackage::ConnectTo( const uno::Reference< io::XInputStream >& xInStream else m_pZipFile.emplace(m_aMutexHolder, m_xContentStream, m_xContext, false, false, - m_nFormat == embed::StorageFormats::ZIP ? ZipFile::Checks::Default : ZipFile::Checks::CheckInsensitive); + m_nFormat == embed::StorageFormats::ZIP + ? ZipFile::Checks::Default + : m_nFormat == embed::StorageFormats::OFOPXML + ? ZipFile::Checks::CheckInsensitive + : ZipFile::Checks::TryCheckInsensitive); } uno::Reference< io::XInputStream > ZipPackage::writeTempFile() commit 1729a7fa059c52f12b342cd40ed55435e52bb5f2 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Wed Jul 3 18:00:38 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 xmlsecurity: add unit test with docx that can only be opened with repair Change-Id: I4f705dd2124383a90b69d04d8b2de0e37f83a495 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170053 Tested-by: Michael Stahl <michael.st...@allotropia.de> Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit 81e0b7e7c05d324fb77da7eda0d736fac5526b3e) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173628 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Tested-by: Jenkins diff --git a/xmlsecurity/CppunitTest_xmlsecurity_signing.mk b/xmlsecurity/CppunitTest_xmlsecurity_signing.mk index 7339800107a7..37d1c2a7dea7 100644 --- a/xmlsecurity/CppunitTest_xmlsecurity_signing.mk +++ b/xmlsecurity/CppunitTest_xmlsecurity_signing.mk @@ -26,6 +26,7 @@ $(eval $(call gb_CppunitTest_use_libraries,xmlsecurity_signing, \ subsequenttest \ test \ tl \ + ucbhelper \ unotest \ utl \ vcl \ diff --git a/xmlsecurity/qa/unit/signing/data/signature-forgery-cdh-lfh.docx b/xmlsecurity/qa/unit/signing/data/signature-forgery-cdh-lfh.docx new file mode 100644 index 000000000000..532705ecf0b5 Binary files /dev/null and b/xmlsecurity/qa/unit/signing/data/signature-forgery-cdh-lfh.docx differ diff --git a/xmlsecurity/qa/unit/signing/signing.cxx b/xmlsecurity/qa/unit/signing/signing.cxx index a853de5e9367..a6cdef19b039 100644 --- a/xmlsecurity/qa/unit/signing/signing.cxx +++ b/xmlsecurity/qa/unit/signing/signing.cxx @@ -20,6 +20,7 @@ #include <test/unoapixml_test.hxx> #include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/document/BrokenPackageRequest.hpp> #include <com/sun/star/embed/XStorage.hpp> #include <com/sun/star/embed/XTransactedObject.hpp> #include <com/sun/star/frame/XStorable.hpp> @@ -47,6 +48,7 @@ #include <biginteger.hxx> #include <certificate.hxx> #include <xsecctl.hxx> +#include <ucbhelper/interceptedinteraction.hxx> #include <sfx2/docfile.hxx> #include <sfx2/docfilt.hxx> #include <officecfg/Office/Common.hxx> @@ -1239,6 +1241,31 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testODFUntrustedGoodGPG) SignatureState::NOTVALIDATED, nActual); } +CPPUNIT_TEST_FIXTURE(SigningTest, testInvalidZIP) +{ + // set RepairPackage via interaction handler, same as soffice does + // - if it's passed to load the behavior is different, oddly enough. + std::vector<::ucbhelper::InterceptedInteraction::InterceptedRequest> interceptions{ + { css::uno::Any(css::document::BrokenPackageRequest()), + cppu::UnoType<css::task::XInteractionApprove>::get(), 0 }, + }; + ::rtl::Reference<ucbhelper::InterceptedInteraction> pIH(new ucbhelper::InterceptedInteraction); + pIH->setInterceptions(std::move(interceptions)); + + uno::Sequence<beans::PropertyValue> args = { comphelper::makePropertyValue( + u"InteractionHandler"_ustr, uno::Reference<task::XInteractionHandler>(pIH)) }; + loadWithParams(createFileURL(u"signature-forgery-cdh-lfh.docx"), args); + SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); + CPPUNIT_ASSERT(pBaseModel); + SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); + CPPUNIT_ASSERT(pObjectShell); + // the problem was that the document Zip structure is interpreted + // misleadingly in RepairPackage case, but signature was still returned + // as partially valid. + CPPUNIT_ASSERT_EQUAL(static_cast<int>(SignatureState::BROKEN), + static_cast<int>(pObjectShell->GetDocumentSignatureState())); +} + /// Test a typical broken ODF signature where one stream is corrupted. CPPUNIT_TEST_FIXTURE(SigningTest, testODFBrokenStreamGPG) { commit 6d7c5d520b19d509a438d48d0483409084f7b604 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Tue Sep 17 11:47:05 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 package: tweak password fallback in ZipPackageStream::getDataStream() Fallbacks are only useful if an existing file is imported. It looks like it might have been possible to hit this case by storing a new document as ODF 1.1, and that sets m_bIsEncrypted but not m_oImportedAlgorithms (as Mike Kaganski pointed out), haven't tried it. Change-Id: Ia82c2e43372f50aa4e7ad9c2c62878986295c815 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173551 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit e22f1a2993d1c675ed8017090d1557d74d8b2917) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173504 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx index 09f66fcd7c6c..ab57afb7c1bc 100644 --- a/package/source/zippackage/ZipPackageStream.cxx +++ b/package/source/zippackage/ZipPackageStream.cxx @@ -1029,7 +1029,8 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() // note: due to SHA1 check this fallback is only done for // * ODF 1.2 files written by OOo < 3.4beta / LO < 3.5 // * ODF 1.1/OOoXML files written by any version - if ( m_rZipPackage.GetStartKeyGenID() == xml::crypto::DigestID::SHA1 ) + if (m_oImportedAlgorithms + && m_oImportedAlgorithms->nImportedStartKeyAlgorithm == xml::crypto::DigestID::SHA1) { SAL_WARN("package", "ZipPackageStream::getDataStream(): SHA1 mismatch, trying fallbacks..."); try commit 4c425ea2752fff8905ede0be57c7a9e641aefadf Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Fri Sep 13 16:26:29 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 tdf#162841 package: fix loading AES-GCM encrypted macros from ODF The problem is that ZipPackageStream::GetEncryptionData() doesn't handle the checksum correctly; what is required here is *no checksum* but the check of m_oImportedChecksumAlgorithm results in calling m_rZipPackage.GetChecksumAlgID() instead, so it ends up in invalid situation and assert: package/source/zippackage/ZipPackageStream.cxx:656: virtual bool ZipPackageStream::saveChild(): Assertion `xEncData->m_nEncAlg != xml::crypto::CipherID::AES_GCM_W3C' failed. Refactor this so all the imported algorithm identifiers are in a struct in a std::optional member. (regression from commit 09f23a3dc5cd571df347cba9b003195de35f3ddd) Change-Id: I4b705520cd9bc800ce3c8611f8ad01a1e1008929 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173342 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> Tested-by: Jenkins (cherry picked from commit 6e76e8a210e51e7c79e0e845c7a4c0db9fb55abc) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173396 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/package/inc/ZipPackage.hxx b/package/inc/ZipPackage.hxx index 9848396dcf11..293e0849a39e 100644 --- a/package/inc/ZipPackage.hxx +++ b/package/inc/ZipPackage.hxx @@ -58,6 +58,8 @@ enum InitialisationMode e_IMode_XStream }; +sal_Int32 GetDefaultDerivedKeySize(sal_Int32 nCipherID); + class ZipPackage final : public cppu::WeakImplHelper < css::lang::XInitialization, @@ -128,16 +130,7 @@ public: sal_Int32 GetEncAlgID() const { return m_nCommonEncryptionID; } ::std::optional<sal_Int32> GetChecksumAlgID() const { return m_oChecksumDigestID; } sal_Int32 GetDefaultDerivedKeySize() const { - switch (m_nCommonEncryptionID) - { - case css::xml::crypto::CipherID::BLOWFISH_CFB_8: - return 16; - case css::xml::crypto::CipherID::AES_CBC_W3C_PADDING: - case css::xml::crypto::CipherID::AES_GCM_W3C: - return 32; - default: - O3TL_UNREACHABLE; - } + return ::GetDefaultDerivedKeySize(m_nCommonEncryptionID); } rtl::Reference<comphelper::RefCountedMutex>& GetSharedMutexRef() { return m_aMutexHolder; } diff --git a/package/inc/ZipPackageStream.hxx b/package/inc/ZipPackageStream.hxx index a6f874b0d4d7..91b8374df009 100644 --- a/package/inc/ZipPackageStream.hxx +++ b/package/inc/ZipPackageStream.hxx @@ -36,6 +36,18 @@ #define PACKAGE_STREAM_DATA 3 #define PACKAGE_STREAM_RAW 4 +struct ImportedAlgorithms +{ + sal_Int32 nImportedStartKeyAlgorithm; + sal_Int32 nImportedEncryptionAlgorithm; + // optional because it is not used with AEAD + ::std::optional<sal_Int32> oImportedChecksumAlgorithm; + // GPG encrypted ODF does not have this in the file, but don't use optional + // here because it depends on the nImportedEncryptionAlgorithm of the same + // entry, so theoretically it could be different for different entries. + sal_Int32 nImportedDerivedKeySize; +}; + class ZipPackage; struct ZipEntry; class ZipPackageStream final : public cppu::ImplInheritanceHelper @@ -54,10 +66,7 @@ private: css::uno::Sequence< css::beans::NamedValue > m_aStorageEncryptionKeys; css::uno::Sequence< sal_Int8 > m_aEncryptionKey; - sal_Int32 m_nImportedStartKeyAlgorithm; - sal_Int32 m_nImportedEncryptionAlgorithm; - ::std::optional<sal_Int32> m_oImportedChecksumAlgorithm; - sal_Int32 m_nImportedDerivedKeySize; + ::std::optional<ImportedAlgorithms> m_oImportedAlgorithms; sal_uInt8 m_nStreamMode; sal_uInt32 m_nMagicalHackPos; @@ -94,10 +103,10 @@ public: void SetToBeCompressed (bool bNewValue) { m_bToBeCompressed = bNewValue;} void SetIsEncrypted (bool bNewValue) { m_bIsEncrypted = bNewValue;} - void SetImportedStartKeyAlgorithm( sal_Int32 nAlgorithm ) { m_nImportedStartKeyAlgorithm = nAlgorithm; } - void SetImportedEncryptionAlgorithm( sal_Int32 nAlgorithm ) { m_nImportedEncryptionAlgorithm = nAlgorithm; } - void SetImportedChecksumAlgorithm(::std::optional<sal_Int32> const& roAlgorithm) { m_oImportedChecksumAlgorithm = roAlgorithm; } - void SetImportedDerivedKeySize( sal_Int32 nSize ) { m_nImportedDerivedKeySize = nSize; } + void SetImportedAlgorithms(ImportedAlgorithms const algorithms) + { + m_oImportedAlgorithms.emplace(algorithms); + } void SetToBeEncrypted (bool bNewValue) { m_bToBeEncrypted = bNewValue; diff --git a/package/source/zippackage/ZipPackage.cxx b/package/source/zippackage/ZipPackage.cxx index 4d206962eae3..7a133df16db6 100644 --- a/package/source/zippackage/ZipPackage.cxx +++ b/package/source/zippackage/ZipPackage.cxx @@ -135,6 +135,20 @@ class DummyInputStream : public ::cppu::WeakImplHelper< XInputStream > {} }; +} // namespace + +sal_Int32 GetDefaultDerivedKeySize(sal_Int32 const nCipherID) +{ + switch (nCipherID) + { + case css::xml::crypto::CipherID::BLOWFISH_CFB_8: + return 16; + case css::xml::crypto::CipherID::AES_CBC_W3C_PADDING: + case css::xml::crypto::CipherID::AES_GCM_W3C: + return 32; + default: + O3TL_UNREACHABLE; + } } ZipPackage::ZipPackage ( uno::Reference < XComponentContext > xContext ) @@ -320,11 +334,9 @@ void ZipPackage::parseManifest() assert(pDigestAlg->has<sal_Int32>()); oDigestAlg.emplace(pDigestAlg->get<sal_Int32>()); - pStream->SetImportedChecksumAlgorithm(oDigestAlg); } *pEncryptionAlg >>= nEncryptionAlg; - pStream->SetImportedEncryptionAlgorithm( nEncryptionAlg ); *pKeyInfo >>= m_aGpgProps; @@ -338,7 +350,14 @@ void ZipPackage::parseManifest() // c.f. ZipPackageStream::GetEncryptionKey() // trying to get key value from properties const sal_Int32 nStartKeyAlg = xml::crypto::DigestID::SHA256; - pStream->SetImportedStartKeyAlgorithm( nStartKeyAlg ); + + pStream->SetImportedAlgorithms({ + .nImportedStartKeyAlgorithm = nStartKeyAlg, + .nImportedEncryptionAlgorithm = nEncryptionAlg, + .oImportedChecksumAlgorithm = oDigestAlg, + // note m_nCommonEncryptionID is not inited yet here + .nImportedDerivedKeySize = ::GetDefaultDerivedKeySize(nEncryptionAlg), + }); if (!m_bHasEncryptedEntries && (pStream->getName() == "content.xml" @@ -405,19 +424,22 @@ void ZipPackage::parseManifest() assert(pDigestAlg->has<sal_Int32>()); oDigestAlg.emplace(pDigestAlg->get<sal_Int32>()); - pStream->SetImportedChecksumAlgorithm(oDigestAlg); } *pEncryptionAlg >>= nEncryptionAlg; - pStream->SetImportedEncryptionAlgorithm( nEncryptionAlg ); if ( pDerivedKeySize ) *pDerivedKeySize >>= nDerivedKeySize; - pStream->SetImportedDerivedKeySize( nDerivedKeySize ); if ( pStartKeyAlg ) *pStartKeyAlg >>= nStartKeyAlg; - pStream->SetImportedStartKeyAlgorithm( nStartKeyAlg ); + + pStream->SetImportedAlgorithms({ + .nImportedStartKeyAlgorithm = nStartKeyAlg, + .nImportedEncryptionAlgorithm = nEncryptionAlg, + .oImportedChecksumAlgorithm = oDigestAlg, + .nImportedDerivedKeySize = nDerivedKeySize, + }); pStream->SetToBeCompressed ( true ); pStream->SetToBeEncrypted ( true ); diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx index 84fae23d0f2a..09f66fcd7c6c 100644 --- a/package/source/zippackage/ZipPackageStream.cxx +++ b/package/source/zippackage/ZipPackageStream.cxx @@ -84,9 +84,6 @@ ZipPackageStream::ZipPackageStream ( ZipPackage & rNewPackage, , m_bToBeEncrypted ( false ) , m_bHaveOwnKey ( false ) , m_bIsEncrypted ( false ) -, m_nImportedStartKeyAlgorithm( 0 ) -, m_nImportedEncryptionAlgorithm( 0 ) -, m_nImportedDerivedKeySize( 0 ) , m_nStreamMode( PACKAGE_STREAM_NOTSET ) , m_nMagicalHackPos( 0 ) , m_nMagicalHackSize( 0 ) @@ -186,7 +183,9 @@ uno::Reference< io::XInputStream > ZipPackageStream::GetRawEncrStreamNoHeaderCop sal_Int32 ZipPackageStream::GetEncryptionAlgorithm() const { - return m_nImportedEncryptionAlgorithm ? m_nImportedEncryptionAlgorithm : m_rZipPackage.GetEncAlgID(); + return m_oImportedAlgorithms + ? m_oImportedAlgorithms->nImportedEncryptionAlgorithm + : m_rZipPackage.GetEncAlgID(); } sal_Int32 ZipPackageStream::GetIVSize() const @@ -212,8 +211,8 @@ sal_Int32 ZipPackageStream::GetIVSize() const *m_xBaseEncryptionData, GetEncryptionKey(bugs), GetEncryptionAlgorithm(), - m_oImportedChecksumAlgorithm ? m_oImportedChecksumAlgorithm : m_rZipPackage.GetChecksumAlgID(), - m_nImportedDerivedKeySize ? m_nImportedDerivedKeySize : m_rZipPackage.GetDefaultDerivedKeySize(), + m_oImportedAlgorithms ? m_oImportedAlgorithms->oImportedChecksumAlgorithm : m_rZipPackage.GetChecksumAlgID(), + m_oImportedAlgorithms ? m_oImportedAlgorithms->nImportedDerivedKeySize : m_rZipPackage.GetDefaultDerivedKeySize(), GetStartKeyGenID(), bugs != Bugs::None); @@ -264,7 +263,9 @@ sal_Int32 ZipPackageStream::GetStartKeyGenID() const { // generally should all the streams use the same Start Key // but if raw copy without password takes place, we should preserve the imported algorithm - return m_nImportedStartKeyAlgorithm ? m_nImportedStartKeyAlgorithm : m_rZipPackage.GetStartKeyGenID(); + return m_oImportedAlgorithms + ? m_oImportedAlgorithms->nImportedStartKeyAlgorithm + : m_rZipPackage.GetStartKeyGenID(); } uno::Reference< io::XInputStream > ZipPackageStream::TryToGetRawFromDataStream( bool bAddHeaderForEncr ) @@ -401,17 +402,14 @@ bool ZipPackageStream::ParsePackageRawStream() + xTempEncrData->m_aInitVector.getLength() + xTempEncrData->m_aDigest.getLength() + aMediaType.getLength() * sizeof( sal_Unicode ); - m_nImportedEncryptionAlgorithm = nEncAlgorithm; - if (nChecksumAlgorithm == 0) - { - m_oImportedChecksumAlgorithm.reset(); - } - else - { - m_oImportedChecksumAlgorithm.emplace(nChecksumAlgorithm); - } - m_nImportedDerivedKeySize = nDerivedKeySize; - m_nImportedStartKeyAlgorithm = nStartKeyGenID; + m_oImportedAlgorithms.emplace(ImportedAlgorithms{ + .nImportedStartKeyAlgorithm = nStartKeyGenID, + .nImportedEncryptionAlgorithm = nEncAlgorithm, + .oImportedChecksumAlgorithm = nChecksumAlgorithm == 0 + ? ::std::optional<sal_Int32>{} + : ::std::optional<sal_Int32>{nChecksumAlgorithm}, + .nImportedDerivedKeySize = nDerivedKeySize, + }); m_nMagicalHackSize = nMagHackSize; msMediaType = aMediaType; @@ -928,7 +926,7 @@ void SAL_CALL ZipPackageStream::setInputStream( const uno::Reference< io::XInput { // if seekable access is required the wrapping will be done on demand m_xStream = aStream; - m_nImportedEncryptionAlgorithm = 0; + m_oImportedAlgorithms.reset(); m_bHasSeekable = false; SetPackageMember ( false ); aEntry.nTime = -1; @@ -1054,7 +1052,7 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() // missing a specified startkey of SHA256 // force SHA256 and see if that works - m_nImportedStartKeyAlgorithm = xml::crypto::DigestID::SHA256; + m_oImportedAlgorithms->nImportedStartKeyAlgorithm = xml::crypto::DigestID::SHA256; xResult = m_rZipPackage.getZipFile().getDataStream(aEntry, GetEncryptionData(), oDecryptedSize, m_rZipPackage.GetSharedMutexRef()); @@ -1064,7 +1062,7 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() { // if that didn't work, restore to SHA1 and trundle through the *other* earlier // bug fix - m_nImportedStartKeyAlgorithm = xml::crypto::DigestID::SHA1; + m_oImportedAlgorithms->nImportedStartKeyAlgorithm = xml::crypto::DigestID::SHA1; } // workaround for the encrypted documents generated with the old OOo1.x bug. commit c8ff76bc5989515471bf560d234936d7225bac60 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Mon Sep 16 16:13:15 2024 +0500 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 tdf#162987: check return value of GetViewBindings Change-Id: Iaeec22ed07e18aa59f2ab87b2ea7d8a0c7ae1467 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173435 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> (cherry picked from commit 7cebd7df0cfcbf906848bfbbdee614fdbd90af8a) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173488 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx index fe68d386195c..0f24677ab25c 100644 --- a/sc/source/ui/view/dbfunc.cxx +++ b/sc/source/ui/view/dbfunc.cxx @@ -407,9 +407,11 @@ void ScDBFunc::ModifiedAutoFilter(ScDocShell* pDocSh) ScDocShellModificator aModificator(*pDocSh); aModificator.SetDocumentModified(); - SfxBindings* pBindings = pDocSh->GetViewBindings(); - pBindings->Invalidate(SID_AUTO_FILTER); - pBindings->Invalidate(SID_AUTOFILTER_HIDE); + if (SfxBindings* pBindings = pDocSh->GetViewBindings()) + { + pBindings->Invalidate(SID_AUTO_FILTER); + pBindings->Invalidate(SID_AUTOFILTER_HIDE); + } } // just hide, no data change commit 6283511a57a7d66f850744981bab3cab35d0d5ce Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Mon Sep 16 16:14:33 2024 +0500 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 Check return value of GetViewBindings ... as done in all other places where it's called Change-Id: Ic941cf433e96bb8bfa6ea81c52c044cc424100eb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173436 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> (cherry picked from commit 5eab23392c5c80ae9cf712c4e7fba21cfff02dae) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173490 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx index c332c9542a66..ead308730fd9 100644 --- a/sc/source/ui/view/tabvwsha.cxx +++ b/sc/source/ui/view/tabvwsha.cxx @@ -842,7 +842,8 @@ void ScTabViewShell::ExecuteSave( SfxRequest& rReq ) // This will work only if .uno:ModifiedStatus message will be removed from // the mechanism that keeps in the message queue only last message of // a particular status even if the values are different. - GetViewData().GetDocShell()->GetViewBindings()->Update(SID_DOC_MODIFIED); + if (SfxBindings* pBindings = GetViewData().GetDocShell()->GetViewBindings()) + pBindings->Update(SID_DOC_MODIFIED); } } commit 81768386841c625d0a1ce307ff1d64625431185d Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Thu Sep 12 18:24:27 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 tdf#162823 package: fix loss of ODF encrypted basic macros The problem is that there is a ZipEntry ZipPackageStream::aEntry which does not necessarily correspond to the values read from the Zip central directory, because of a call to ZipPackageStream::setSize() in ZipPackageStream::successfullyWritten() to override nSize and nMethod for encrypted entries. This triggers the consistency checks in readLOC(), where this aEntry is passed. Refactor things so that ZipPackageStream::aEntry and thus hopefully all ZipEntry instances correspond to the Zip file's central directory. For encrypted entries, store the decompressed size (which is read from manifest.xml) in m_nOwnStreamOrigSize and pass it as a separate parameter to the ZipFile functions that need it, and ultimately to XUnbufferedStream, resolving multiple TODO comments. (regression from commit efae4fc42d5fe3c0a69757226f38efc10d101194) Change-Id: Ib6ea32595c6027b98da9196a2e2bd0a99b62a983 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173273 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> Tested-by: Jenkins (cherry picked from commit 33d55465d9f81863b88d649a46353cc4d19cd253) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173297 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/package/inc/ZipFile.hxx b/package/inc/ZipFile.hxx index d7a7d773b9b0..906f1fc5bd82 100644 --- a/package/inc/ZipFile.hxx +++ b/package/inc/ZipFile.hxx @@ -76,12 +76,13 @@ private: ZipEntry const & rEntry, const ::rtl::Reference < EncryptionData > &rData, sal_Int8 nStreamMode, - bool bDecrypt, + ::std::optional<sal_Int64> oDecryptedSize, const bool bUseBufferedStream = true, const OUString& aMediaType = OUString() ); css::uno::Reference<css::io::XInputStream> checkValidPassword( ZipEntry const& rEntry, rtl::Reference<EncryptionData> const& rData, + sal_Int64 nDecryptedSize, rtl::Reference<comphelper::RefCountedMutex> const& rMutexHolder); bool checkSizeAndCRC( const ZipEntry& aEntry ); @@ -116,7 +117,7 @@ public: css::uno::Reference< css::io::XInputStream > getRawData( ZipEntry& rEntry, const ::rtl::Reference < EncryptionData > &rData, - bool bDecrypt, + ::std::optional<sal_Int64> oDecryptedSize, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder, const bool bUseBufferedStream = true ); @@ -157,18 +158,19 @@ public: css::uno::Reference< css::io::XInputStream > getInputStream( ZipEntry& rEntry, const ::rtl::Reference < EncryptionData > &rData, - bool bDecrypt, + ::std::optional<sal_Int64> oDecryptedSize, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder ); css::uno::Reference< css::io::XInputStream > getDataStream( ZipEntry& rEntry, const ::rtl::Reference < EncryptionData > &rData, - bool bDecrypt, + ::std::optional<sal_Int64> oEncryptedSize, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder ); css::uno::Reference< css::io::XInputStream > getWrappedRawStream( ZipEntry& rEntry, const ::rtl::Reference < EncryptionData > &rData, + sal_Int64 nDecryptedSize, const OUString& aMediaType, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder ); diff --git a/package/source/zipapi/XUnbufferedStream.cxx b/package/source/zipapi/XUnbufferedStream.cxx index 8b628b14ddfe..4a65a54c7c08 100644 --- a/package/source/zipapi/XUnbufferedStream.cxx +++ b/package/source/zipapi/XUnbufferedStream.cxx @@ -47,7 +47,7 @@ XUnbufferedStream::XUnbufferedStream( Reference < XInputStream > const & xNewZipStream, const ::rtl::Reference< EncryptionData >& rData, sal_Int8 nStreamMode, - bool bIsEncrypted, + ::std::optional<sal_Int64> const oDecryptedSize, const OUString& aMediaType, bool bRecoveryMode ) : maMutexHolder(std::move( aMutexHolder )) @@ -66,16 +66,17 @@ XUnbufferedStream::XUnbufferedStream( , mbCheckCRC(!bRecoveryMode) { mnZipCurrent = maEntry.nOffset; - sal_Int64 nSize; + sal_Int64 nSize; // data size in the zip file + assert(maEntry.nMethod != STORED || maEntry.nCompressedSize == maEntry.nSize); if ( mbRawStream ) { - mnZipSize = maEntry.nMethod == DEFLATED ? maEntry.nCompressedSize : maEntry.nSize; + mnZipSize = maEntry.nCompressedSize; nSize = mnZipSize; } else { - mnZipSize = maEntry.nSize; - nSize = maEntry.nMethod == DEFLATED ? maEntry.nCompressedSize : maEntry.nSize; + mnZipSize = oDecryptedSize ? *oDecryptedSize : maEntry.nSize; + nSize = maEntry.nCompressedSize; } if (mnZipSize < 0) @@ -88,7 +89,7 @@ XUnbufferedStream::XUnbufferedStream( ((rData->m_aSalt.hasElements() && (rData->m_oPBKDFIterationCount || rData->m_oArgon2Args)) || rData->m_aKey.hasElements()); - bool bMustDecrypt = nStreamMode == UNBUFF_STREAM_DATA && bHaveEncryptData && bIsEncrypted; + bool bMustDecrypt = nStreamMode == UNBUFF_STREAM_DATA && bHaveEncryptData && oDecryptedSize; if ( bMustDecrypt ) { @@ -97,7 +98,7 @@ XUnbufferedStream::XUnbufferedStream( mnBlockSize = ( rData->m_nEncAlg == xml::crypto::CipherID::AES_CBC_W3C_PADDING ? 16 : 1 ); } - if ( !(bHaveEncryptData && mbWrappedRaw && bIsEncrypted) ) + if (!(bHaveEncryptData && mbWrappedRaw && oDecryptedSize)) return; // if we have the data needed to decrypt it, but didn't want it decrypted (or @@ -111,7 +112,7 @@ XUnbufferedStream::XUnbufferedStream( rData->m_aDigest.getLength() + aMediaType.getLength() * sizeof( sal_Unicode ) ); sal_Int8 * pHeader = maHeader.getArray(); - ZipFile::StaticFillHeader( rData, rEntry.nSize, aMediaType, pHeader ); + ZipFile::StaticFillHeader(rData, *oDecryptedSize, aMediaType, pHeader); mnHeaderToRead = static_cast < sal_Int16 > ( maHeader.getLength() ); mnZipSize += mnHeaderToRead; } diff --git a/package/source/zipapi/XUnbufferedStream.hxx b/package/source/zipapi/XUnbufferedStream.hxx index af57706386c3..f3efe0aaecce 100644 --- a/package/source/zipapi/XUnbufferedStream.hxx +++ b/package/source/zipapi/XUnbufferedStream.hxx @@ -19,6 +19,8 @@ #ifndef INCLUDED_PACKAGE_SOURCE_ZIPAPI_XUNBUFFEREDSTREAM_HXX #define INCLUDED_PACKAGE_SOURCE_ZIPAPI_XUNBUFFEREDSTREAM_HXX +#include <optional> + #include <com/sun/star/io/XSeekable.hpp> #include <com/sun/star/io/XInputStream.hpp> #include <com/sun/star/xml/crypto/XCipherContext.hpp> @@ -67,7 +69,7 @@ public: css::uno::Reference < css::io::XInputStream > const & xNewZipStream, const ::rtl::Reference< EncryptionData >& rData, sal_Int8 nStreamMode, - bool bIsEncrypted, + ::std::optional<sal_Int64> oDecryptedSize, const OUString& aMediaType, bool bRecoveryMode ); diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx index 80cd051c3787..01a8c16e2842 100644 --- a/package/source/zipapi/ZipFile.cxx +++ b/package/source/zipapi/ZipFile.cxx @@ -541,6 +541,7 @@ bool ZipFile::StaticHasValidPassword( const uno::Reference< uno::XComponentConte uno::Reference<io::XInputStream> ZipFile::checkValidPassword( ZipEntry const& rEntry, ::rtl::Reference<EncryptionData> const& rData, + sal_Int64 const nDecryptedSize, rtl::Reference<comphelper::RefCountedMutex> const& rMutex) { if (rData.is() && rData->m_nEncAlg == xml::crypto::CipherID::AES_GCM_W3C) @@ -548,7 +549,7 @@ uno::Reference<io::XInputStream> ZipFile::checkValidPassword( try // the only way to find out: decrypt the whole stream, which will { // check the tag uno::Reference<io::XInputStream> const xRet = - createStreamForZipEntry(rMutex, rEntry, rData, UNBUFF_STREAM_DATA, true); + createStreamForZipEntry(rMutex, rEntry, rData, UNBUFF_STREAM_DATA, nDecryptedSize); // currently XBufferedStream reads the whole stream in its ctor (to // verify the tag) - in case this gets changed, explicitly seek here uno::Reference<io::XSeekable> const xSeek(xRet, uno::UNO_QUERY_THROW); @@ -580,7 +581,7 @@ uno::Reference<io::XInputStream> ZipFile::checkValidPassword( if (StaticHasValidPassword(m_xContext, aReadBuffer, rData)) { return createStreamForZipEntry( - rMutex, rEntry, rData, UNBUFF_STREAM_DATA, true); + rMutex, rEntry, rData, UNBUFF_STREAM_DATA, nDecryptedSize); } } @@ -702,14 +703,14 @@ uno::Reference< XInputStream > ZipFile::createStreamForZipEntry( ZipEntry const & rEntry, const ::rtl::Reference< EncryptionData > &rData, sal_Int8 nStreamMode, - bool bIsEncrypted, + ::std::optional<sal_Int64> const oDecryptedSize, const bool bUseBufferedStream, const OUString& aMediaType ) { ::osl::MutexGuard aGuard( m_aMutexHolder->GetMutex() ); rtl::Reference< XUnbufferedStream > xSrcStream = new XUnbufferedStream( - m_xContext, aMutexHolder, rEntry, xStream, rData, nStreamMode, bIsEncrypted, aMediaType, bRecoveryMode); + m_xContext, aMutexHolder, rEntry, xStream, rData, nStreamMode, oDecryptedSize, aMediaType, bRecoveryMode); if (!bUseBufferedStream) return xSrcStream; @@ -808,7 +809,7 @@ ZipEnumeration ZipFile::entries() uno::Reference< XInputStream > ZipFile::getInputStream( ZipEntry& rEntry, const ::rtl::Reference< EncryptionData > &rData, - bool bIsEncrypted, + ::std::optional<sal_Int64> const oDecryptedSize, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder ) { ::osl::MutexGuard aGuard( m_aMutexHolder->GetMutex() ); @@ -821,9 +822,11 @@ uno::Reference< XInputStream > ZipFile::getInputStream( ZipEntry& rEntry, bool bNeedRawStream = rEntry.nMethod == STORED; - if (bIsEncrypted && rData.is()) + if (oDecryptedSize && rData.is()) { - uno::Reference<XInputStream> const xRet(checkValidPassword(rEntry, rData, aMutexHolder)); + assert(oDecryptedSize); + uno::Reference<XInputStream> const xRet( + checkValidPassword(rEntry, rData, *oDecryptedSize, aMutexHolder)); if (xRet.is()) { return xRet; @@ -835,12 +838,12 @@ uno::Reference< XInputStream > ZipFile::getInputStream( ZipEntry& rEntry, rEntry, rData, bNeedRawStream ? UNBUFF_STREAM_RAW : UNBUFF_STREAM_DATA, - bIsEncrypted ); + oDecryptedSize); } uno::Reference< XInputStream > ZipFile::getDataStream( ZipEntry& rEntry, const ::rtl::Reference< EncryptionData > &rData, - bool bIsEncrypted, + ::std::optional<sal_Int64> const oDecryptedSize, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder ) { ::osl::MutexGuard aGuard( m_aMutexHolder->GetMutex() ); @@ -851,7 +854,7 @@ uno::Reference< XInputStream > ZipFile::getDataStream( ZipEntry& rEntry, // An exception must be thrown in case stream is encrypted and // there is no key or the key is wrong bool bNeedRawStream = false; - if ( bIsEncrypted ) + if (oDecryptedSize) { // in case no digest is provided there is no way // to detect password correctness @@ -862,7 +865,7 @@ uno::Reference< XInputStream > ZipFile::getDataStream( ZipEntry& rEntry, // check if we can decrypt it or not SAL_WARN_IF(rData->m_nEncAlg != xml::crypto::CipherID::AES_GCM_W3C && !rData->m_aDigest.hasElements(), "package", "Can't detect password correctness without digest!"); - uno::Reference<XInputStream> const xRet(checkValidPassword(rEntry, rData, aMutexHolder)); + uno::Reference<XInputStream> const xRet(checkValidPassword(rEntry, rData, *oDecryptedSize, aMutexHolder)); if (!xRet.is()) { throw packages::WrongPasswordException(THROW_WHERE); @@ -876,12 +879,12 @@ uno::Reference< XInputStream > ZipFile::getDataStream( ZipEntry& rEntry, rEntry, rData, bNeedRawStream ? UNBUFF_STREAM_RAW : UNBUFF_STREAM_DATA, - bIsEncrypted ); + oDecryptedSize); } uno::Reference< XInputStream > ZipFile::getRawData( ZipEntry& rEntry, const ::rtl::Reference< EncryptionData >& rData, - bool bIsEncrypted, + ::std::optional<sal_Int64> const oDecryptedSize, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder, const bool bUseBufferedStream ) { @@ -890,12 +893,14 @@ uno::Reference< XInputStream > ZipFile::getRawData( ZipEntry& rEntry, if ( rEntry.nOffset <= 0 ) readLOC( rEntry ); - return createStreamForZipEntry ( aMutexHolder, rEntry, rData, UNBUFF_STREAM_RAW, bIsEncrypted, bUseBufferedStream ); + return createStreamForZipEntry(aMutexHolder, rEntry, rData, + UNBUFF_STREAM_RAW, oDecryptedSize, bUseBufferedStream); } uno::Reference< XInputStream > ZipFile::getWrappedRawStream( ZipEntry& rEntry, const ::rtl::Reference< EncryptionData >& rData, + sal_Int64 const nDecryptedSize, const OUString& aMediaType, const rtl::Reference<comphelper::RefCountedMutex>& aMutexHolder ) { @@ -907,7 +912,8 @@ uno::Reference< XInputStream > ZipFile::getWrappedRawStream( if ( rEntry.nOffset <= 0 ) readLOC( rEntry ); - return createStreamForZipEntry ( aMutexHolder, rEntry, rData, UNBUFF_STREAM_WRAPPEDRAW, true, true, aMediaType ); + return createStreamForZipEntry(aMutexHolder, rEntry, rData, + UNBUFF_STREAM_WRAPPEDRAW, nDecryptedSize, true, aMediaType); } sal_uInt64 ZipFile::readLOC(ZipEntry &rEntry) diff --git a/package/source/zipapi/ZipOutputStream.cxx b/package/source/zipapi/ZipOutputStream.cxx index 402a2930c0e2..bc15c599833b 100644 --- a/package/source/zipapi/ZipOutputStream.cxx +++ b/package/source/zipapi/ZipOutputStream.cxx @@ -87,7 +87,10 @@ void ZipOutputStream::rawCloseEntry( bool bEncrypt ) writeDataDescriptor(*m_pCurrentEntry); if (bEncrypt) + { m_pCurrentEntry->nMethod = STORED; + assert(m_pCurrentEntry->nSize == m_pCurrentEntry->nCompressedSize); + } m_pCurrentEntry = nullptr; } diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx index 35863f96c81f..84fae23d0f2a 100644 --- a/package/source/zippackage/ZipPackageStream.cxx +++ b/package/source/zippackage/ZipPackageStream.cxx @@ -133,6 +133,10 @@ void ZipPackageStream::setZipEntryOnLoading( const ZipEntry &rInEntry ) if ( aEntry.nMethod == STORED ) m_bToBeCompressed = false; + + // this is called first, parseManifest may overwrite it if it's encrypted + assert(m_nOwnStreamOrigSize == 0); + m_nOwnStreamOrigSize = aEntry.nSize; } uno::Reference< io::XInputStream > const & ZipPackageStream::GetOwnSeekStream() @@ -538,14 +542,11 @@ bool ZipPackageStream::saveChild( OSL_ENSURE( !m_bRawStream || !(bToBeCompressed || bToBeEncrypted), "The stream is already encrypted!" ); xSeek->seek ( m_bRawStream ? m_nMagicalHackPos : 0 ); ImplSetStoredData ( *pTempEntry, xStream ); - - // TODO/LATER: Get rid of hacks related to switching of Flag Method and Size properties! } else if ( bToBeEncrypted ) { // this is the correct original size - pTempEntry->nSize = xSeek->getLength(); - m_nOwnStreamOrigSize = pTempEntry->nSize; + m_nOwnStreamOrigSize = xSeek->getLength(); } xSeek->seek ( 0 ); @@ -907,10 +908,6 @@ void ZipPackageStream::successfullyWritten( ZipEntry const *pEntry ) // Then copy it back afterwards... aEntry = *pEntry; - // TODO/LATER: get rid of this hack ( the encrypted stream size property is changed during saving ) - if ( m_bIsEncrypted ) - setSize( m_nOwnStreamOrigSize ); - aEntry.nOffset *= -1; } @@ -944,7 +941,13 @@ uno::Reference< io::XInputStream > ZipPackageStream::getRawData() { if ( IsPackageMember() ) { - return m_rZipPackage.getZipFile().getRawData( aEntry, GetEncryptionData(), m_bIsEncrypted, m_rZipPackage.GetSharedMutexRef(), false/*bUseBufferedStream*/ ); + ::std::optional<sal_Int64> oDecryptedSize; + if (m_bIsEncrypted) + { + oDecryptedSize.emplace(m_nOwnStreamOrigSize); + } + return m_rZipPackage.getZipFile().getRawData( aEntry, GetEncryptionData(), + oDecryptedSize, m_rZipPackage.GetSharedMutexRef(), false/*bUseBufferedStream*/ ); } else if ( GetOwnSeekStream().is() ) { @@ -971,7 +974,13 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getInputStream() { if ( IsPackageMember() ) { - return m_rZipPackage.getZipFile().getInputStream( aEntry, GetEncryptionData(), m_bIsEncrypted, m_rZipPackage.GetSharedMutexRef() ); + ::std::optional<sal_Int64> oDecryptedSize; + if (m_bIsEncrypted) + { + oDecryptedSize.emplace(m_nOwnStreamOrigSize); + } + return m_rZipPackage.getZipFile().getInputStream(aEntry, GetEncryptionData(), + oDecryptedSize, m_rZipPackage.GetSharedMutexRef()); } else if ( GetOwnSeekStream().is() ) { @@ -1006,9 +1015,16 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() if ( IsPackageMember() ) { uno::Reference< io::XInputStream > xResult; + ::std::optional<sal_Int64> oDecryptedSize; + if (m_bIsEncrypted) + { + oDecryptedSize.emplace(m_nOwnStreamOrigSize); + } try { - xResult = m_rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData(Bugs::None), m_bIsEncrypted, m_rZipPackage.GetSharedMutexRef() ); + xResult = m_rZipPackage.getZipFile().getDataStream(aEntry, + GetEncryptionData(Bugs::None), oDecryptedSize, + m_rZipPackage.GetSharedMutexRef()); } catch( const packages::WrongPasswordException& ) { @@ -1020,7 +1036,9 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() SAL_WARN("package", "ZipPackageStream::getDataStream(): SHA1 mismatch, trying fallbacks..."); try { // tdf#114939 try with legacy StarOffice SHA1 bug - xResult = m_rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData(Bugs::WrongSHA1), m_bIsEncrypted, m_rZipPackage.GetSharedMutexRef() ); + xResult = m_rZipPackage.getZipFile().getDataStream(aEntry, + GetEncryptionData(Bugs::WrongSHA1), oDecryptedSize, + m_rZipPackage.GetSharedMutexRef()); return xResult; } catch (const packages::WrongPasswordException&) @@ -1037,7 +1055,9 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() // force SHA256 and see if that works m_nImportedStartKeyAlgorithm = xml::crypto::DigestID::SHA256; - xResult = m_rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData(), m_bIsEncrypted, m_rZipPackage.GetSharedMutexRef() ); + xResult = m_rZipPackage.getZipFile().getDataStream(aEntry, + GetEncryptionData(), oDecryptedSize, + m_rZipPackage.GetSharedMutexRef()); return xResult; } catch (const packages::WrongPasswordException&) @@ -1050,7 +1070,9 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getDataStream() // workaround for the encrypted documents generated with the old OOo1.x bug. if ( !m_bUseWinEncoding ) { - xResult = m_rZipPackage.getZipFile().getDataStream( aEntry, GetEncryptionData(Bugs::WinEncodingWrongSHA1), m_bIsEncrypted, m_rZipPackage.GetSharedMutexRef() ); + xResult = m_rZipPackage.getZipFile().getDataStream(aEntry, + GetEncryptionData(Bugs::WinEncodingWrongSHA1), + oDecryptedSize, m_rZipPackage.GetSharedMutexRef()); m_bUseWinEncoding = true; } else @@ -1086,7 +1108,8 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getRawStream() if ( !m_bIsEncrypted || !GetEncryptionData().is() ) throw packages::NoEncryptionException(THROW_WHERE ); - return m_rZipPackage.getZipFile().getWrappedRawStream( aEntry, GetEncryptionData(), msMediaType, m_rZipPackage.GetSharedMutexRef() ); + return m_rZipPackage.getZipFile().getWrappedRawStream(aEntry, GetEncryptionData(), + m_nOwnStreamOrigSize, msMediaType, m_rZipPackage.GetSharedMutexRef()); } else if ( GetOwnSeekStream().is() ) { @@ -1141,7 +1164,13 @@ uno::Reference< io::XInputStream > SAL_CALL ZipPackageStream::getPlainRawStream( if ( IsPackageMember() ) { - return m_rZipPackage.getZipFile().getRawData( aEntry, GetEncryptionData(), m_bIsEncrypted, m_rZipPackage.GetSharedMutexRef() ); + ::std::optional<sal_Int64> oDecryptedSize; + if (m_bIsEncrypted) + { + oDecryptedSize.emplace(m_nOwnStreamOrigSize); + } + return m_rZipPackage.getZipFile().getRawData(aEntry, GetEncryptionData(), + oDecryptedSize, m_rZipPackage.GetSharedMutexRef()); } else if ( GetOwnSeekStream().is() ) { @@ -1181,7 +1210,7 @@ void SAL_CALL ZipPackageStream::setPropertyValue( const OUString& aPropertyName, } else if ( aPropertyName == "Size" ) { - if ( !( aValue >>= aEntry.nSize ) ) + if (!(aValue >>= m_nOwnStreamOrigSize)) throw IllegalArgumentException(THROW_WHERE "Wrong type for Size property!", uno::Reference< XInterface >(), 2 ); @@ -1314,7 +1343,7 @@ Any SAL_CALL ZipPackageStream::getPropertyValue( const OUString& PropertyName ) } else if ( PropertyName == "Size" ) { - return Any(aEntry.nSize); + return Any(m_nOwnStreamOrigSize); } else if ( PropertyName == "Encrypted" ) { @@ -1342,10 +1371,9 @@ Any SAL_CALL ZipPackageStream::getPropertyValue( const OUString& PropertyName ) void ZipPackageStream::setSize ( const sal_Int64 nNewSize ) { - if ( aEntry.nCompressedSize != nNewSize ) - aEntry.nMethod = DEFLATED; - aEntry.nSize = nNewSize; + m_nOwnStreamOrigSize = nNewSize; } + OUString ZipPackageStream::getImplementationName() { return "ZipPackageStream"; diff --git a/package/source/zippackage/zipfileaccess.cxx b/package/source/zippackage/zipfileaccess.cxx index bd7caaf279e6..f05503cc66bc 100644 --- a/package/source/zippackage/zipfileaccess.cxx +++ b/package/source/zippackage/zipfileaccess.cxx @@ -267,7 +267,7 @@ uno::Any SAL_CALL OZipFileAccess::getByName( const OUString& aName ) { xEntryStream = m_pZipFile->getDataStream((*aIter).second, ::rtl::Reference< EncryptionData >(), - false, + {}, m_aMutexHolder); } catch (const container::NoSuchElementException&) @@ -391,7 +391,7 @@ uno::Reference< io::XInputStream > SAL_CALL OZipFileAccess::getStreamByPattern( { uno::Reference< io::XInputStream > xEntryStream( m_pZipFile->getDataStream( (*aIter).second, ::rtl::Reference< EncryptionData >(), - false, + {}, m_aMutexHolder ) ); if ( !xEntryStream.is() ) commit 600540631686773880600ce60061f912f0083fb8 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Tue Aug 20 16:31:36 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 sw: 0.03928 -> 0.04045 According to https://www.w3.org/TR/WCAG21/#dfn-relative-luminance: "Before May 2021 the value of 0.04045 in the definition was different (0.03928). It was taken from an older version of the specification and has been updated." Change-Id: I7cd7c0ee3e0d04795c7db9d93053e159e011fc62 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172146 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> (cherry picked from commit 02e2870c86a00380549266f944c9218187a002ec) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172187 (cherry picked from commit f0ca7d889f2b0d149c9f7df0ee2ab236ee11ae12) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172192 Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl> diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index dfa94c3ed9ab..2f534c97fe34 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -452,9 +452,9 @@ double calculateRelativeLuminance(Color const& rColor) double b = aBColor.getBlue(); // Calculate the values according to the described algorithm - r = (r <= 0.03928) ? r / 12.92 : std::pow((r + 0.055) / 1.055, 2.4); - g = (g <= 0.03928) ? g / 12.92 : std::pow((g + 0.055) / 1.055, 2.4); - b = (b <= 0.03928) ? b / 12.92 : std::pow((b + 0.055) / 1.055, 2.4); + r = (r <= 0.04045) ? r / 12.92 : std::pow((r + 0.055) / 1.055, 2.4); + g = (g <= 0.04045) ? g / 12.92 : std::pow((g + 0.055) / 1.055, 2.4); + b = (b <= 0.04045) ? b / 12.92 : std::pow((b + 0.055) / 1.055, 2.4); return 0.2126 * r + 0.7152 * g + 0.0722 * b; } commit 2624d88194957a4d0f90083be3e28e062f49dd76 Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Wed Sep 11 12:06:21 2024 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:16:33 2024 +0200 ofz: 22 byte .zip is min size at which point nPos is 0 on entering this test. If the buffer does not start with PK\x5\x6 then nPos is decremented before checking against 0, so nPos is -1 and doesn't throw as an unhandled .zip. Change-Id: I4a7fed6e863582324945a75bc077f6346ddd5c23 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173208 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit d22d47e940da3bea13fe20199b5ab410d9d6ac50) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173299 diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx index 12c625dab4d0..80cd051c3787 100644 --- a/package/source/zipapi/ZipFile.cxx +++ b/package/source/zipapi/ZipFile.cxx @@ -1143,11 +1143,11 @@ std::tuple<sal_Int64, sal_Int64, sal_Int64> ZipFile::findCentralDirectory() nEndPos = nPos + nEnd; break; } - nPos--; if (nPos == 0) { throw ZipException(u"Zip END signature not found!"_ustr); } + nPos--; } aGrabber.seek(nEndPos + 4); commit 9f3e378282db4152bb7fabb318f4fc2fd5ea6601 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Fri Sep 13 08:00:40 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:13:50 2024 +0200 libpng: upgrade to 1.6.44 Downloaded from https://unlimited.dl.sourceforge.net/project/libpng/libpng16/1.6.44/libpng-1.6.44.tar.xz Change-Id: I0132e6edb0078d1d4479bb79b7f740c23719d72b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173295 Tested-by: Jenkins Reviewed-by: Taichi Haradaguchi <20001...@ymail.ne.jp> diff --git a/download.lst b/download.lst index c9b6c44b44fc..c00c0e5b883d 100644 --- a/download.lst +++ b/download.lst @@ -636,8 +636,8 @@ PIXMAN_TARBALL := pixman-0.42.2.tar.gz # three static lines # so that git cherry-pick # will not run into conflicts -LIBPNG_SHA256SUM := 6a5ca0652392a2d7c9db2ae5b40210843c0bbc081cbd410825ab00cc59f14a6c -LIBPNG_TARBALL := libpng-1.6.43.tar.xz +LIBPNG_SHA256SUM := 60c4da1d5b7f0aa8d158da48e8f8afa9773c1c8baa5d21974df61f1886b8ce8e +LIBPNG_TARBALL := libpng-1.6.44.tar.xz # three static lines # so that git cherry-pick # will not run into conflicts commit d39cc55b5db48d33397f0ec54478a01eaf6171e4 Author: Christian Lohmaier <lohmaier+libreoff...@googlemail.com> AuthorDate: Mon Sep 9 12:16:46 2024 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 19 10:10:25 2024 +0200 update credits Change-Id: Ic881ef1c3575c8bd922db829aedcb7a22f9a6c72 (cherry picked from commit dce8738344e8fb6d000c71feb6a02e570e4660ec) diff --git a/readlicense_oo/license/CREDITS.fodt b/readlicense_oo/license/CREDITS.fodt index cab9b1410536..39f8779981ac 100644 --- a/readlicense_oo/license/CREDITS.fodt +++ b/readlicense_oo/license/CREDITS.fodt @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> <office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:c alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns: meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> - <office:meta><dc:title>Credits » LibreOffice</dc:title><meta:keyword>Credits</meta:keyword><meta:keyword>contributors</meta:keyword><meta:keyword>coders</meta:keyword><meta:keyword>developers</meta:keyword><dc:description>Credits for the LibreOffice development/coding.</dc:description><meta:generator>LibreOffice/24.2.5.2$Linux_X86_64 LibreOffice_project/bffef4ea93e59bebbeaf7f431bb02b1a39ee8a59</meta:generator><dc:date>2012-02-20T22:17:18.060000000</dc:date><meta:editing-duration>PT14M12S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:document-statistic meta:table-count="5" meta:image-count="1" meta:object-count="0" meta:page-count="2" meta:paragraph-count="4970" meta:word-count="18602" meta:character-count="134707" meta:non-whitespace-character-count="118170"/><meta:user-defined meta:name="google-site-verification">JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA</meta:user-defined></office:meta> + <office:meta><dc:title>Credits » LibreOffice</dc:title><meta:keyword>Credits</meta:keyword><meta:keyword>contributors</meta:keyword><meta:keyword>coders</meta:keyword><meta:keyword>developers</meta:keyword><dc:description>Credits for the LibreOffice development/coding.</dc:description><meta:generator>LibreOffice/24.2.5.2$Linux_X86_64 LibreOffice_project/bffef4ea93e59bebbeaf7f431bb02b1a39ee8a59</meta:generator><dc:date>2012-02-20T22:17:18.060000000</dc:date><meta:editing-duration>PT14M12S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:document-statistic meta:table-count="5" meta:image-count="1" meta:object-count="0" meta:page-count="2" meta:paragraph-count="4972" meta:word-count="18611" meta:character-count="134769" meta:non-whitespace-character-count="118224"/><meta:user-defined meta:name="google-site-verification">JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA</meta:user-defined></office:meta> <office:settings> <config:config-item-set config:name="ooo:view-settings"> - <config:config-item config:name="ViewAreaTop" config:type="long">572</config:config-item> + <config:config-item config:name="ViewAreaTop" config:type="long">2662</config:config-item> <config:config-item config:name="ViewAreaLeft" config:type="long">501</config:config-item> - <config:config-item config:name="ViewAreaWidth" config:type="long">38366</config:config-item> - <config:config-item config:name="ViewAreaHeight" config:type="long">26143</config:config-item> + <config:config-item config:name="ViewAreaWidth" config:type="long">38393</config:config-item> + <config:config-item config:name="ViewAreaHeight" config:type="long">26169</config:config-item> <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item> <config:config-item config:name="InBrowseMode" config:type="boolean">true</config:config-item> <config:config-item-map-indexed config:name="Views"> @@ -16,9 +16,9 @@ <config:config-item config:name="ViewLeft" config:type="long">3623</config:config-item> <config:config-item config:name="ViewTop" config:type="long">3434</config:config-item> <config:config-item config:name="VisibleLeft" config:type="long">501</config:config-item> - <config:config-item config:name="VisibleTop" config:type="long">572</config:config-item> - <config:config-item config:name="VisibleRight" config:type="long">38866</config:config-item> - <config:config-item config:name="VisibleBottom" config:type="long">26712</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">2662</config:config-item> + <config:config-item config:name="VisibleRight" config:type="long">38892</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">28829</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ViewLayoutColumns" config:type="short">0</config:config-item> <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item> @@ -147,7 +147,7 @@ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item> <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item> - <config:config-item config:name="Rsid" config:type="int">13795656</config:config-item> + <config:config-item config:name="Rsid" config:type="int">13858737</config:config-item> <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item> <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item> <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item> @@ -177,7 +177,7 @@ <office:styles> <style:default-style style:family="graphic"> <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" style:flow-with-text="true"/> - <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:font-independent-line-spacing="false"> <style:tab-stops/> </style:paragraph-properties> <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Thorndale AMT" fo:font-size="12pt" fo:language="hu" fo:country="HU" style:letter-kerning="true" style:font-name-asian="SimSun" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Mangal1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> @@ -388,7 +388,7 @@ <style:style style:name="Tabelle1.A1" style:family="table-cell"> <style:table-cell-properties style:vertical-align="middle" fo:padding="0.049cm" fo:border="none"/> </style:style> - <style:style style:name="Tabelle1.C464" style:family="table-cell"> + <style:style style:name="Tabelle1.D464" style:family="table-cell"> <style:table-cell-properties fo:padding="0.049cm" fo:border="none"/> </style:style> <style:style style:name="Tabelle2" style:family="table"> @@ -469,7 +469,7 @@ <style:style style:name="Tabelle5.A1" style:family="table-cell"> <style:table-cell-properties style:vertical-align="middle" fo:padding="0.049cm" fo:border="none"/> </style:style> - <style:style style:name="Tabelle5.B733" style:family="table-cell"> + <style:style style:name="Tabelle5.C733" style:family="table-cell"> <style:table-cell-properties fo:padding="0.049cm" fo:border="none"/> </style:style> <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents"> @@ -1167,7 +1167,7 @@ </draw:frame> <text:section text:style-name="Sect1" text:name="BgContainer"> <text:p text:style-name="P32">Credits</text:p> - <text:p text:style-name="Text_20_body">1984 individuals contributed to OpenOffice.org (and whose contributions were imported into LibreOffice) or LibreOffice until 2024-08-30 19:44:52.</text:p> + <text:p text:style-name="Text_20_body">1985 individuals contributed to OpenOffice.org (and whose contributions were imported into LibreOffice) or LibreOffice until 2024-07-17 14:41:40.</text:p> <text:p text:style-name="Text_20_body"><text:span text:style-name="T1">*</text:span> marks developers whose first contributions happened after 2010-09-28.</text:p> <text:h text:style-name="Heading_20_2" text:outline-level="2">Developers committing code since 2010-09-28</text:h> <table:table table:name="Tabelle1" table:style-name="Tabelle1"> @@ -1180,7 +1180,7 @@ <text:p text:style-name="Table_20_Contents">Ruediger Timm<text:line-break/>Commits: 82464<text:line-break/>Joined: 2000-10-10</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Caolán McNamara<text:line-break/>Commits: 35932<text:line-break/>Joined: 2000-10-10</text:p> + <text:p text:style-name="Table_20_Contents">Caolán McNamara<text:line-break/>Commits: 35945<text:line-break/>Joined: 2000-10-10</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Kurt Zenker<text:line-break/>Commits: 31752<text:line-break/>Joined: 2000-09-25</text:p> @@ -1197,15 +1197,15 @@ <text:p text:style-name="Table_20_Contents">Vladimir Glazunov<text:line-break/>Commits: 25434<text:line-break/>Joined: 2000-12-04</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Stephan Bergmann<text:line-break/>Commits: 21305<text:line-break/>Joined: 2000-10-04</text:p> + <text:p text:style-name="Table_20_Contents">Stephan Bergmann<text:line-break/>Commits: 21309<text:line-break/>Joined: 2000-10-04</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Noel Grandin<text:line-break/>Commits: 19162<text:line-break/>Joined: <text:span text:style-name="T2">2011-12-12</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Noel Grandin<text:line-break/>Commits: 19192<text:line-break/>Joined: <text:span text:style-name="T2">2011-12-12</text:span></text:p> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Miklos Vajna<text:line-break/>Commits: 10037<text:line-break/>Joined: 2010-07-29</text:p> + <text:p text:style-name="Table_20_Contents">Miklos Vajna<text:line-break/>Commits: 10044<text:line-break/>Joined: 2010-07-29</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Ivo Hinkelmann<text:line-break/>Commits: 9480<text:line-break/>Joined: 2002-09-09</text:p> @@ -1214,7 +1214,7 @@ <text:p text:style-name="Table_20_Contents">Tor Lillqvist<text:line-break/>Commits: 9160<text:line-break/>Joined: 2010-03-23</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Michael Stahl<text:line-break/>Commits: 8552<text:line-break/>Joined: 2008-06-16</text:p> + <text:p text:style-name="Table_20_Contents">Michael Stahl<text:line-break/>Commits: 8560<text:line-break/>Joined: 2008-06-16</text:p> </table:table-cell> </table:table-row> <table:table-row> @@ -1222,7 +1222,7 @@ <text:p text:style-name="Table_20_Contents">Kohei Yoshida<text:line-break/>Commits: 5571<text:line-break/>Joined: 2009-06-19</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Eike Rathke<text:line-break/>Commits: 5375<text:line-break/>Joined: 2000-10-11</text:p> + <text:p text:style-name="Table_20_Contents">Eike Rathke<text:line-break/>Commits: 5376<text:line-break/>Joined: 2000-10-11</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Markus Mohrhard<text:line-break/>Commits: 5203<text:line-break/>Joined: <text:span text:style-name="T2">2011-03-17</text:span></text:p> @@ -1233,16 +1233,16 @@ </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Andrea Gelmini<text:line-break/>Commits: 4167<text:line-break/>Joined: <text:span text:style-name="T2">2014-10-30</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Andrea Gelmini<text:line-break/>Commits: 4171<text:line-break/>Joined: <text:span text:style-name="T2">2014-10-30</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Julien Nabet<text:line-break/>Commits: 3917<text:line-break/>Joined: <text:span text:style-name="T2">2010-11-04</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Julien Nabet<text:line-break/>Commits: 3920<text:line-break/>Joined: <text:span text:style-name="T2">2010-11-04</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">David Tardon<text:line-break/>Commits: 3648<text:line-break/>Joined: 2009-11-12</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Mike Kaganski<text:line-break/>Commits: 3595<text:line-break/>Joined: <text:span text:style-name="T2">2015-04-26</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Mike Kaganski<text:line-break/>Commits: 3615<text:line-break/>Joined: <text:span text:style-name="T2">2015-04-26</text:span></text:p> </table:table-cell> </table:table-row> <table:table-row> @@ -1253,7 +1253,7 @@ <text:p text:style-name="Table_20_Contents">Luboš Luňák<text:line-break/>Commits: 3201<text:line-break/>Joined: 2010-09-21</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Xisco Fauli<text:line-break/>Commits: 3048<text:line-break/>Joined: <text:span text:style-name="T2">2011-02-06</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Xisco Fauli<text:line-break/>Commits: 3062<text:line-break/>Joined: <text:span text:style-name="T2">2011-02-06</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Hans-Joachim Lankenau<text:line-break/>Commits: 3007<text:line-break/>Joined: 2000-09-19</text:p> @@ -1267,7 +1267,7 @@ <text:p text:style-name="Table_20_Contents">Jan Holesovsky<text:line-break/>Commits: 2672<text:line-break/>Joined: 2009-06-23</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Oliver Specht<text:line-break/>Commits: 2616<text:line-break/>Joined: 2000-09-21</text:p> + <text:p text:style-name="Table_20_Contents">Oliver Specht<text:line-break/>Commits: 2619<text:line-break/>Joined: 2000-09-21</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Mathias Bauer<text:line-break/>Commits: 2580<text:line-break/>Joined: 2000-09-20</text:p> @@ -1275,13 +1275,13 @@ </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Michael Meeks<text:line-break/>Commits: 2525<text:line-break/>Joined: 2004-08-05</text:p> + <text:p text:style-name="Table_20_Contents">Michael Meeks<text:line-break/>Commits: 2526<text:line-break/>Joined: 2004-08-05</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Bjoern Michaelsen<text:line-break/>Commits: 2500<text:line-break/>Joined: 2009-10-14</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Olivier Hallot<text:line-break/>Commits: 2185<text:line-break/>Joined: <text:span text:style-name="T2">2010-10-25</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Olivier Hallot<text:line-break/>Commits: 2200<text:line-break/>Joined: <text:span text:style-name="T2">2010-10-25</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Norbert Thiebaud<text:line-break/>Commits: 2176<text:line-break/>Joined: <text:span text:style-name="T2">2010-09-29</text:span></text:p> @@ -1303,7 +1303,7 @@ </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Armin Le Grand (allotropia)<text:line-break/>Commits: 1738<text:line-break/>Joined: 2000-09-25</text:p> + <text:p text:style-name="Table_20_Contents">Armin Le Grand (Collabora)<text:line-break/>Commits: 1739<text:line-break/>Joined: 2000-09-25</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Matúš Kukan<text:line-break/>Commits: 1712<text:line-break/>Joined: <text:span text:style-name="T2">2011-04-06</text:span></text:p> @@ -1340,7 +1340,7 @@ <text:p text:style-name="Table_20_Contents">Niklas Nebel<text:line-break/>Commits: 1296<text:line-break/>Joined: 2000-09-19</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Christian Lohmaier<text:line-break/>Commits: 1284<text:line-break/>Joined: 2008-06-01</text:p> + <text:p text:style-name="Table_20_Contents">Christian Lohmaier<text:line-break/>Commits: 1288<text:line-break/>Joined: 2008-06-01</text:p> </table:table-cell> </table:table-row> <table:table-row> @@ -1376,7 +1376,7 @@ <text:p text:style-name="Table_20_Contents">Petr Mladek<text:line-break/>Commits: 958<text:line-break/>Joined: 2006-10-03</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>László Németh<text:line-break/>Commits: 955<text:line-break/>Joined: <text:span text:style-name="T2">2010-09-29</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>László Németh<text:line-break/>Commits: 956<text:line-break/>Joined: <text:span text:style-name="T2">2010-09-29</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Noel Power<text:line-break/>Commits: 950<text:line-break/>Joined: 2002-09-24</text:p> @@ -1460,10 +1460,10 @@ <text:p text:style-name="Table_20_Contents">Kai Sommerfeld<text:line-break/>Commits: 651<text:line-break/>Joined: 2000-10-10</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Ingrid Halama<text:line-break/>Commits: 639<text:line-break/>Joined: 2001-01-19</text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Jim Raykowski<text:line-break/>Commits: 640<text:line-break/>Joined: <text:span text:style-name="T2">2017-04-16</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Jim Raykowski<text:line-break/>Commits: 638<text:line-break/>Joined: <text:span text:style-name="T2">2017-04-16</text:span></text:p> + <text:p text:style-name="Table_20_Contents">Ingrid Halama<text:line-break/>Commits: 639<text:line-break/>Joined: 2001-01-19</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Justin Luth<text:line-break/>Commits: 626<text:line-break/>Joined: <text:span text:style-name="T2">2014-09-30</text:span></text:p> @@ -1485,7 +1485,7 @@ </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Adolfo Jayme Barrientos<text:line-break/>Commits: 587<text:line-break/>Joined: <text:span text:style-name="T2">2013-06-21</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Adolfo Jayme Barrientos<text:line-break/>Commits: 590<text:line-break/>Joined: <text:span text:style-name="T2">2013-06-21</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Jochen Nitschke<text:line-break/>Commits: 587<text:line-break/>Joined: <text:span text:style-name="T2">2016-02-02</text:span></text:p> @@ -1499,7 +1499,7 @@ </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Heiko Tietze<text:line-break/>Commits: 518<text:line-break/>Joined: <text:span text:style-name="T2">2016-10-06</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Heiko Tietze<text:line-break/>Commits: 521<text:line-break/>Joined: <text:span text:style-name="T2">2016-10-06</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Jürgen Schmidt<text:line-break/>Commits: 512<text:line-break/>Joined: 2000-10-09</text:p> @@ -1519,21 +1519,21 @@ <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Ashod Nakashian<text:line-break/>Commits: 400<text:line-break/>Joined: <text:span text:style-name="T2">2015-01-07</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Dirk Voelzke<text:line-break/>Commits: 392<text:line-break/>Joined: 2000-11-27</text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Jean-Pierre Ledure<text:line-break/>Commits: 395<text:line-break/>Joined: <text:span text:style-name="T2">2013-10-12</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Henry Castro<text:line-break/>Commits: 391<text:line-break/>Joined: <text:span text:style-name="T2">2015-01-09</text:span></text:p> + <text:p text:style-name="Table_20_Contents">Dirk Voelzke<text:line-break/>Commits: 392<text:line-break/>Joined: 2000-11-27</text:p> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Jean-Pierre Ledure<text:line-break/>Commits: 390<text:line-break/>Joined: <text:span text:style-name="T2">2013-10-12</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Henry Castro<text:line-break/>Commits: 391<text:line-break/>Joined: <text:span text:style-name="T2">2015-01-09</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Laurent BP<text:line-break/>Commits: 389<text:line-break/>Joined: <text:span text:style-name="T2">2011-08-31</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Rafael Lima<text:line-break/>Commits: 382<text:line-break/>Joined: <text:span text:style-name="T2">2020-11-13</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Rafael Lima<text:line-break/>Commits: 383<text:line-break/>Joined: <text:span text:style-name="T2">2020-11-13</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Ivan Timofeev<text:line-break/>Commits: 380<text:line-break/>Joined: <text:span text:style-name="T2">2011-09-16</text:span></text:p> @@ -1575,15 +1575,15 @@ <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Stanislav Horacek<text:line-break/>Commits: 319<text:line-break/>Joined: <text:span text:style-name="T2">2012-12-09</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Radek Doulik<text:line-break/>Commits: 305<text:line-break/>Joined: 2010-05-03</text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Justin Luth<text:line-break/>Commits: 308<text:line-break/>Joined: <text:span text:style-name="T2">2020-02-03</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Mark Hung<text:line-break/>Commits: 305<text:line-break/>Joined: <text:span text:style-name="T2">2014-11-04</text:span></text:p> + <text:p text:style-name="Table_20_Contents">Radek Doulik<text:line-break/>Commits: 305<text:line-break/>Joined: 2010-05-03</text:p> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Justin Luth<text:line-break/>Commits: 305<text:line-break/>Joined: <text:span text:style-name="T2">2020-02-03</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Mark Hung<text:line-break/>Commits: 305<text:line-break/>Joined: <text:span text:style-name="T2">2014-11-04</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Chr. Rossmanith<text:line-break/>Commits: 300<text:line-break/>Joined: <text:span text:style-name="T2">2011-01-03</text:span></text:p> @@ -1625,10 +1625,10 @@ </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Ilmari Lauhakangas<text:line-break/>Commits: 224<text:line-break/>Joined: <text:span text:style-name="T2">2017-04-15</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Ilmari Lauhakangas<text:line-break/>Commits: 228<text:line-break/>Joined: <text:span text:style-name="T2">2017-04-15</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Balazs Varga<text:line-break/>Commits: 218<text:line-break/>Joined: <text:span text:style-name="T2">2022-06-29</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Balazs Varga<text:line-break/>Commits: 219<text:line-break/>Joined: <text:span text:style-name="T2">2022-06-29</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Winfried Donkers<text:line-break/>Commits: 217<text:line-break/>Joined: <text:span text:style-name="T2">2011-11-11</text:span></text:p> @@ -1676,7 +1676,7 @@ <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Philipp Riemer<text:line-break/>Commits: 171<text:line-break/>Joined: <text:span text:style-name="T2">2012-05-25</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Gülşah Köse<text:line-break/>Commits: 170<text:line-break/>Joined: <text:span text:style-name="T2">2015-03-14</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Gülşah Köse<text:line-break/>Commits: 171<text:line-break/>Joined: <text:span text:style-name="T2">2015-03-14</text:span></text:p> </table:table-cell> </table:table-row> <table:table-row> @@ -1690,7 +1690,7 @@ <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Hossein<text:line-break/>Commits: 156<text:line-break/>Joined: <text:span text:style-name="T2">2021-06-29</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Bogdan Buzea<text:line-break/>Commits: 153<text:line-break/>Joined: <text:span text:style-name="T2">2022-11-01</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Bogdan Buzea<text:line-break/>Commits: 156<text:line-break/>Joined: <text:span text:style-name="T2">2022-11-01</text:span></text:p> </table:table-cell> </table:table-row> <table:table-row> @@ -1709,7 +1709,7 @@ </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Tibor Nagy<text:line-break/>Commits: 149<text:line-break/>Joined: <text:span text:style-name="T2">2020-04-01</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Tibor Nagy<text:line-break/>Commits: 150<text:line-break/>Joined: <text:span text:style-name="T2">2020-04-01</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Gregor Hartmann<gh<text:line-break/>Commits: 141<text:line-break/>Joined: 2000-10-12</text:p> @@ -1757,18 +1757,18 @@ <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Pranam Lashkari<text:line-break/>Commits: 128<text:line-break/>Joined: <text:span text:style-name="T2">2020-04-03</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Helge Delfs [hde]<text:line-break/>Commits: 126<text:line-break/>Joined: 2009-07-28</text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Taichi Haradaguchi<text:line-break/>Commits: 128<text:line-break/>Joined: <text:span text:style-name="T2">2022-09-06</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Ariel Constenla-Haile<text:line-break/>Commits: 126<text:line-break/>Joined: <text:span text:style-name="T2">2012-01-16</text:span></text:p> + <text:p text:style-name="Table_20_Contents">Helge Delfs [hde]<text:line-break/>Commits: 126<text:line-break/>Joined: 2009-07-28</text:p> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>haochen<text:line-break/>Commits: 126<text:line-break/>Joined: <text:span text:style-name="T2">2013-10-10</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Ariel Constenla-Haile<text:line-break/>Commits: 126<text:line-break/>Joined: <text:span text:style-name="T2">2012-01-16</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Taichi Haradaguchi<text:line-break/>Commits: 126<text:line-break/>Joined: <text:span text:style-name="T2">2022-09-06</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>haochen<text:line-break/>Commits: 126<text:line-break/>Joined: <text:span text:style-name="T2">2013-10-10</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Alain Romedenne<text:line-break/>Commits: 123<text:line-break/>Joined: <text:span text:style-name="T2">2021-02-17</text:span></text:p> @@ -1834,6 +1834,9 @@ </table:table-cell> </table:table-row> <table:table-row> + <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Laurent Balland<text:line-break/>Commits: 92<text:line-break/>Joined: <text:span text:style-name="T2">2022-06-19</text:span></text:p> + </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Stefan Knorr<text:line-break/>Commits: 91<text:line-break/>Joined: <text:span text:style-name="T2">2011-07-04</text:span></text:p> </table:table-cell> @@ -1843,16 +1846,13 @@ <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Krisztian Pinter<text:line-break/>Commits: 90<text:line-break/>Joined: <text:span text:style-name="T2">2013-02-18</text:span></text:p> </table:table-cell> - <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Philipp Hofer<text:line-break/>Commits: 90<text:line-break/>Joined: <text:span text:style-name="T2">2020-11-06</text:span></text:p> - </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Albert Thuswaldner<text:line-break/>Commits: 89<text:line-break/>Joined: <text:span text:style-name="T2">2011-01-26</text:span></text:p> -e ... etc. - the rest is truncated