From 8add7f2715aa860606c264168d602850130c5fe7 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 7 May 2019 03:47:06 -0400 Subject: [PATCH] import libreoffice-6.0.6.1-13.el8 --- .gitignore | 16 + .libreoffice.metadata | 16 + SOURCES/0001-Adapt-to-Python-3.patch | 23 + ...elevant-part-of-external-icu-icu4c-u.patch | 67 + ...8703-Properly-handle-failure-decodin.patch | 94 + ...98-except-cut-and-paste-as-bitmap-in.patch | 74 + ...00-recover-mangled-svg-in-presentati.patch | 67 + ...bz-1432468-disable-opencl-by-default.patch | 26 + ...47507-try-inputted-password-as-both-.patch | 40 + SOURCES/0001-Upgrade-to-ICU-61.1.patch | 675 +++ SOURCES/0001-Upgrade-to-ICU-62.1.patch | 236 + ...stead-of-hard-coded-Upgrade-to-ICU-6.patch | 43 + SOURCES/0001-We-use-ICU-61-now.patch | 43 + SOURCES/0001-cov-scan-help-warnings.patch | 25 + SOURCES/0001-cov-scan-warnings.patch | 2547 ++++++++++ SOURCES/0001-disable-libe-book-support.patch | 144 + SOURCES/0001-don-t-suppress-crashes.patch | 35 + ...epoint-fix-out-of-bounds-read-in-ICU.patch | 74 + SOURCES/0001-gtk3-only-for-3.20.patch | 26 + ...xport-of-underline-for-outlined-font.patch | 48 + ...uno-script-processing-below-base-uri.patch | 70 + ...tallation-of-langpack-via-packagekit.patch | 946 ++++ ...import-fix-loss-of-free-form-text-in.patch | 334 ++ ...8703-Properly-handle-failure-encodin.patch | 124 + ...8703-Properly-handle-failure-encodin.patch | 284 ++ ...18703-Properly-handle-failure-en-dec.patch | 204 + ...ow-to-use-OpenSSL-as-backend-for-rtl.patch | 684 +++ SOURCES/libreoffice-6.0.6.1.tar.xz.asc | 16 + SOURCES/libreoffice-help-6.0.6.1.tar.xz.asc | 16 + SOURCES/libreoffice-multiliblauncher.sh | 16 + ...ibreoffice-translations-6.0.6.1.tar.xz.asc | 16 + SPECS/libreoffice.spec | 4426 +++++++++++++++++ 32 files changed, 11455 insertions(+) create mode 100644 .gitignore create mode 100644 .libreoffice.metadata create mode 100644 SOURCES/0001-Adapt-to-Python-3.patch create mode 100644 SOURCES/0001-Keep-the-still-relevant-part-of-external-icu-icu4c-u.patch create mode 100644 SOURCES/0001-Related-rhbz-1618703-Properly-handle-failure-decodin.patch create mode 100644 SOURCES/0001-Related-tdf-105998-except-cut-and-paste-as-bitmap-in.patch create mode 100644 SOURCES/0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch create mode 100644 SOURCES/0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch create mode 100644 SOURCES/0001-Resolves-rhbz-1647507-try-inputted-password-as-both-.patch create mode 100644 SOURCES/0001-Upgrade-to-ICU-61.1.patch create mode 100644 SOURCES/0001-Upgrade-to-ICU-62.1.patch create mode 100644 SOURCES/0001-Use-ICU_MAJOR-instead-of-hard-coded-Upgrade-to-ICU-6.patch create mode 100644 SOURCES/0001-We-use-ICU-61-now.patch create mode 100644 SOURCES/0001-cov-scan-help-warnings.patch create mode 100644 SOURCES/0001-cov-scan-warnings.patch create mode 100644 SOURCES/0001-disable-libe-book-support.patch create mode 100644 SOURCES/0001-don-t-suppress-crashes.patch create mode 100644 SOURCES/0001-forcepoint-fix-out-of-bounds-read-in-ICU.patch create mode 100644 SOURCES/0001-gtk3-only-for-3.20.patch create mode 100644 SOURCES/0001-implement-pdf-export-of-underline-for-outlined-font.patch create mode 100644 SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch create mode 100644 SOURCES/0001-request-installation-of-langpack-via-packagekit.patch create mode 100644 SOURCES/0001-tdf-121203-DOCX-import-fix-loss-of-free-form-text-in.patch create mode 100644 SOURCES/0002-Related-rhbz-1618703-Properly-handle-failure-encodin.patch create mode 100644 SOURCES/0003-Related-rhbz-1618703-Properly-handle-failure-encodin.patch create mode 100644 SOURCES/0004-iRelated-rhbz-1618703-Properly-handle-failure-en-dec.patch create mode 100644 SOURCES/0005-rhbz-1618703-Allow-to-use-OpenSSL-as-backend-for-rtl.patch create mode 100644 SOURCES/libreoffice-6.0.6.1.tar.xz.asc create mode 100644 SOURCES/libreoffice-help-6.0.6.1.tar.xz.asc create mode 100644 SOURCES/libreoffice-multiliblauncher.sh create mode 100644 SOURCES/libreoffice-translations-6.0.6.1.tar.xz.asc create mode 100644 SPECS/libreoffice.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ab4eac --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll +SOURCES/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +SOURCES/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +SOURCES/gpgkey-C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3.gpg.asc +SOURCES/libreoffice-6.0.6.1.tar.xz +SOURCES/libreoffice-base-symbolic.svg +SOURCES/libreoffice-calc-symbolic.svg +SOURCES/libreoffice-draw-symbolic.svg +SOURCES/libreoffice-help-6.0.6.1.tar.xz +SOURCES/libreoffice-impress-symbolic.svg +SOURCES/libreoffice-main-symbolic.svg +SOURCES/libreoffice-math-symbolic.svg +SOURCES/libreoffice-translations-6.0.6.1.tar.xz +SOURCES/libreoffice-writer-symbolic.svg diff --git a/.libreoffice.metadata b/.libreoffice.metadata new file mode 100644 index 0000000..9999e10 --- /dev/null +++ b/.libreoffice.metadata @@ -0,0 +1,16 @@ +7168b0f40aa5c72267899601c116d2348d2f56ec SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +0619ed3a89644bef318df67db12045b2b590585b SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll +1acea86fd399ed7817879d36370d3d1f8b109050 SOURCES/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +8a90669029e107b61953b90ba11545fef586c2ca SOURCES/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +2d49e11b0b711970f494294dc3698f05eb294853 SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +7b5fd93d787fbc6d9c2d4025d543730ee8dc4559 SOURCES/gpgkey-C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3.gpg.asc +7a10bc2e3d39a2b61a507eae30c8b505dcd4f553 SOURCES/libreoffice-6.0.6.1.tar.xz +54fc749ba924f9ca4e0391caaf579ab344302038 SOURCES/libreoffice-base-symbolic.svg +9de544172d736d59589767000c1f657034a5d53d SOURCES/libreoffice-calc-symbolic.svg +0f6dc4726da0920869354fbe4b2924f9ac569b4a SOURCES/libreoffice-draw-symbolic.svg +d453fdf82bf65f79bfbf70986720436ba4d9ed51 SOURCES/libreoffice-help-6.0.6.1.tar.xz +8c74dd667c660cc643c4d715dd50491ba92146d5 SOURCES/libreoffice-impress-symbolic.svg +c77acd04a7647b09745f9424ab0f65d52dfcd397 SOURCES/libreoffice-main-symbolic.svg +3857a55644148eb25ed1a594bd00d1262761fb39 SOURCES/libreoffice-math-symbolic.svg +9dbf1c8f3b373a3ec15e989f86c1a34a7d7aa761 SOURCES/libreoffice-translations-6.0.6.1.tar.xz +d4f0674ad46a832120db956cc01a27fdc2060458 SOURCES/libreoffice-writer-symbolic.svg diff --git a/SOURCES/0001-Adapt-to-Python-3.patch b/SOURCES/0001-Adapt-to-Python-3.patch new file mode 100644 index 0000000..c563af1 --- /dev/null +++ b/SOURCES/0001-Adapt-to-Python-3.patch @@ -0,0 +1,23 @@ +From 6deba9b85bc9d5eb4f297ea305bcddfbad0060e1 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Tue, 3 Jul 2018 09:30:37 +0200 +Subject: [PATCH] Adapt to Python 3 + +Change-Id: I7c44c23810a79242ec5ddf52a316b4bba7d838ce +--- + solenv/bin/pack_images.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/solenv/bin/pack_images.py b/solenv/bin/pack_images.py +index 0f493c8f3035..b66ea34e731c 100755 +--- a/solenv/bin/pack_images.py ++++ b/solenv/bin/pack_images.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # -*- coding: utf-8 -*- + # -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- + # +-- +2.17.1 + diff --git a/SOURCES/0001-Keep-the-still-relevant-part-of-external-icu-icu4c-u.patch b/SOURCES/0001-Keep-the-still-relevant-part-of-external-icu-icu4c-u.patch new file mode 100644 index 0000000..fb453d1 --- /dev/null +++ b/SOURCES/0001-Keep-the-still-relevant-part-of-external-icu-icu4c-u.patch @@ -0,0 +1,67 @@ +From 811575c105b0a2bc597afda2f84a087199447ae5 Mon Sep 17 00:00:00 2001 +Message-Id: <811575c105b0a2bc597afda2f84a087199447ae5.1531842164.git.erack@redhat.com> +From: Stephan Bergmann +Date: Wed, 18 Apr 2018 16:35:55 +0200 +Subject: [PATCH] Keep the still relevant part of + external/icu/icu4c-ubsan.patch.1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +...which f247f08e370626bbb427acd8f4a400fd875350a3 "Upgrade to ICU 61.1" had +removed completely, in error. + +Change-Id: I7239011561851333cac58e54e4e7d590b8529dbc +--- + external/icu/UnpackedTarball_icu.mk | 1 + + external/icu/icu4c-ubsan.patch.1 | 14 ++++++++++++++ + 2 files changed, 15 insertions(+) + create mode 100644 external/icu/icu4c-ubsan.patch.1 + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-Keep-the-still-relevant-part-of-external-icu-icu4c-u.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-Keep-the-still-relevant-part-of-external-icu-icu4c-u.patch" + +diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk +index b81cdaab6242..c789e6eb8d84 100644 +--- a/external/icu/UnpackedTarball_icu.mk ++++ b/external/icu/UnpackedTarball_icu.mk +@@ -27,6 +27,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,icu,\ + external/icu/icu4c-solarisgcc.patch.1 \ + external/icu/icu4c-mkdir.patch.1 \ + external/icu/icu4c-$(if $(filter ANDROID,$(OS)),android,rpath).patch.1 \ ++ external/icu/icu4c-ubsan.patch.1 \ + external/icu/icu4c-icu11100.patch.1 \ + external/icu/icu4c-scriptrun.patch.1 \ + external/icu/icu4c-rtti.patch.1 \ +diff --git a/external/icu/icu4c-ubsan.patch.1 b/external/icu/icu4c-ubsan.patch.1 +new file mode 100644 +index 000000000000..ea9f13fd85cd +--- /dev/null ++++ b/external/icu/icu4c-ubsan.patch.1 +@@ -0,0 +1,14 @@ ++diff -ur icu.org/source/common/ubidiimp.h icu/source/common/ubidiimp.h ++--- icu.org/source/common/ubidiimp.h 2017-02-03 19:57:23.000000000 +0100 +++++ icu/source/common/ubidiimp.h 2017-04-21 22:46:25.374651159 +0200 ++@@ -198,8 +198,8 @@ ++ /* in a Run, logicalStart will get this bit set if the run level is odd */ ++ #define INDEX_ODD_BIT (1UL<<31) ++ ++-#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((int32_t)(level)<<31)) ++-#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((int32_t)(level)<<31)) +++#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((uint32_t)(level)<<31)) +++#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((uint32_t)(level)<<31)) ++ #define REMOVE_ODD_BIT(x) ((x)&=~INDEX_ODD_BIT) ++ ++ #define GET_INDEX(x) ((x)&~INDEX_ODD_BIT) + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-Related-rhbz-1618703-Properly-handle-failure-decodin.patch b/SOURCES/0001-Related-rhbz-1618703-Properly-handle-failure-decodin.patch new file mode 100644 index 0000000..1b45161 --- /dev/null +++ b/SOURCES/0001-Related-rhbz-1618703-Properly-handle-failure-decodin.patch @@ -0,0 +1,94 @@ +From 03ab9306c70df34d7824f700d5635e8b458e6d6d Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Thu, 23 Aug 2018 16:45:34 +0200 +Subject: [PATCH 1/5] Related rhbz#1618703: Properly handle failure decoding + master password +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +...when e.g. FIPS mode makes PasswordContainer::DecodePasswords fail by throwing +an exception which needs to be caught in PasswordContainerHelper::addRecord (in +uui/source/passwordcontainer.cxx, but which only catches NoMasterException, not +generic RuntimeException) + +Change-Id: I877bb5126e79ac2c90b11ef6d31bf81a2927f409 +Reviewed-on: https://gerrit.libreoffice.org/59511 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit e17987f4bd54fec7e0d94bdefdb94809255b3436) +Reviewed-on: https://gerrit.libreoffice.org/59568 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 24b3d08018b6350d5e60615eb375b337ab1b4f75) +--- + svl/source/passwordcontainer/passwordcontainer.cxx | 11 ++++++----- + svl/source/passwordcontainer/passwordcontainer.hxx | 2 +- + 2 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx b/svl/source/passwordcontainer/passwordcontainer.cxx +index c2e8b7100028..6d4bb02427ac 100644 +--- a/svl/source/passwordcontainer/passwordcontainer.cxx ++++ b/svl/source/passwordcontainer/passwordcontainer.cxx +@@ -417,7 +417,7 @@ void SAL_CALL PasswordContainer::disposing( const EventObject& ) + } + } + +-std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLine, const OUString& aMasterPasswd ) ++std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLine, const OUString& aMasterPasswd, css::task::PasswordRequestMode mode ) + { + if( !aMasterPasswd.isEmpty() ) + { +@@ -463,7 +463,8 @@ std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLin + + // problems with decoding + OSL_FAIL( "Problem with decoding" ); +- throw RuntimeException("Can't decode!" ); ++ throw css::task::NoMasterException( ++ "Can't decode!", css::uno::Reference(), mode); + } + + OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& lines, const OUString& aMasterPasswd ) +@@ -586,7 +587,7 @@ UserRecord PasswordContainer::CopyToUserRecord( const NamePassRecord& aRecord, b + { + try + { +- ::std::vector< OUString > aDecodedPasswords = DecodePasswords( aRecord.GetPersPasswords(), GetMasterPassword( aHandler ) ); ++ ::std::vector< OUString > aDecodedPasswords = DecodePasswords( aRecord.GetPersPasswords(), GetMasterPassword( aHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ); + aPasswords.insert( aPasswords.end(), aDecodedPasswords.begin(), aDecodedPasswords.end() ); + } + catch( NoMasterException& ) +@@ -848,7 +849,7 @@ OUString const & PasswordContainer::GetMasterPassword( const Reference< XInterac + } + else + { +- std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aPass ) ); ++ std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aPass, aRMode ) ); + if( aRM.empty() || aPass != aRM[0] ) + { + bAskAgain = true; +@@ -1005,7 +1006,7 @@ Sequence< UrlRecord > SAL_CALL PasswordContainer::getAllPersistent( const Refere + { + sal_Int32 oldLen = aUsers.getLength(); + aUsers.realloc( oldLen + 1 ); +- aUsers[ oldLen ] = UserRecord( aNP.GetUserName(), comphelper::containerToSequence( DecodePasswords( aNP.GetPersPasswords(), GetMasterPassword( xHandler ) ) ) ); ++ aUsers[ oldLen ] = UserRecord( aNP.GetUserName(), comphelper::containerToSequence( DecodePasswords( aNP.GetPersPasswords(), GetMasterPassword( xHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ) ) ); + } + + if( aUsers.getLength() ) +diff --git a/svl/source/passwordcontainer/passwordcontainer.hxx b/svl/source/passwordcontainer/passwordcontainer.hxx +index 67ad63e72722..a1190549eb77 100644 +--- a/svl/source/passwordcontainer/passwordcontainer.hxx ++++ b/svl/source/passwordcontainer/passwordcontainer.hxx +@@ -268,7 +268,7 @@ css::task::UrlRecord find( + const css::uno::Reference< css::task::XInteractionHandler >& Handler ); + + /// @throws css::uno::RuntimeException +- static ::std::vector< OUString > DecodePasswords( const OUString& aLine, const OUString& aMasterPassword ); ++ static ::std::vector< OUString > DecodePasswords( const OUString& aLine, const OUString& aMasterPassword, css::task::PasswordRequestMode mode ); + + /// @throws css::uno::RuntimeException + static OUString EncodePasswords(const std::vector< OUString >& lines, const OUString& aMasterPassword ); +-- +2.17.1 + diff --git a/SOURCES/0001-Related-tdf-105998-except-cut-and-paste-as-bitmap-in.patch b/SOURCES/0001-Related-tdf-105998-except-cut-and-paste-as-bitmap-in.patch new file mode 100644 index 0000000..1d09956 --- /dev/null +++ b/SOURCES/0001-Related-tdf-105998-except-cut-and-paste-as-bitmap-in.patch @@ -0,0 +1,74 @@ +From 15cdcd0346b7aa98d4697edec8aeea9c810efa62 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 5 Dec 2017 17:13:28 +0000 +Subject: [PATCH] Related: tdf#105998 except cut and paste as bitmap instead of + export +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Take a drawing rectangle in draw and cut and paste as bitmap to writer. The +hairline border along the very right/bottom edge of the bitmap appear missing. + +fallback to default handlers which can distort the hairline to be visible + +Change-Id: Iedb580f65879628839c83e41092745ae7c11267c +Reviewed-on: https://gerrit.libreoffice.org/45902 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + .../source/processor2d/vclpixelprocessor2d.cxx | 25 +++++++++++++++++----- + 1 file changed, 20 insertions(+), 5 deletions(-) + +diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +index 9c21c83ee..5c5c0bb 100644 +--- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx ++++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +@@ -41,6 +41,7 @@ + #include "helperwrongspellrenderer.hxx" + #include + #include ++#include + #include + #include + #include +@@ -210,10 +211,6 @@ namespace drawinglayer + maBColorModifierStack.getModifiedColor( + rSource.getLineAttribute().getColor())); + +- mpOutputDevice->SetFillColor(); +- mpOutputDevice->SetLineColor(Color(aLineColor)); +- aHairLinePolyPolygon.transform(maCurrentTransformation); +- + double fLineWidth(rSource.getLineAttribute().getWidth()); + + if(basegfx::fTools::more(fLineWidth, 0.0)) +@@ -234,6 +231,24 @@ namespace drawinglayer + fLineWidth = 0.0; + } + ++ //Related: tdf#105998 cut and paste as bitmap of shape from draw to ++ //writer. If we are a hairline along the very right/bottom edge of ++ //the canvas then fallback to defaults which can distort the ++ //hairline inside the paintable area ++ if (fLineWidth == 0.0) ++ { ++ Size aSize = mpOutputDevice->GetOutputSize(); ++ basegfx::B2DRange aRange = aHairLinePolyPolygon.getB2DRange(); ++ basegfx::B2DRange aOutputRange = aRange; ++ aOutputRange.transform(maCurrentTransformation); ++ if (std::round(aOutputRange.getMaxX()) == aSize.Width() || std::round(aOutputRange.getMaxY()) == aSize.Height()) ++ return false; ++ } ++ ++ mpOutputDevice->SetFillColor(); ++ mpOutputDevice->SetLineColor(Color(aLineColor)); ++ aHairLinePolyPolygon.transform(maCurrentTransformation); ++ + bool bHasPoints(false); + bool bTryWorked(false); + +-- +2.9.5 + diff --git a/SOURCES/0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch b/SOURCES/0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch new file mode 100644 index 0000000..518896e --- /dev/null +++ b/SOURCES/0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch @@ -0,0 +1,67 @@ +From a74837a0e7c7259e4396aa5f05cf1384e256db35 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 20 Feb 2017 16:04:58 +0000 +Subject: [PATCH] Related: tdf#106100 recover mangled svg in presentations + +Change-Id: I77b452aa69a8341aa30e1e93d0d5ee8160533095 +--- + svgio/Module_svgio.mk | 4 ---- + svgio/source/svgreader/svgsvgnode.cxx | 27 +++------------------------ + 2 files changed, 3 insertions(+), 28 deletions(-) + +diff --git a/svgio/Module_svgio.mk b/svgio/Module_svgio.mk +index 29ef97d..8b827fc 100644 +--- a/svgio/Module_svgio.mk ++++ b/svgio/Module_svgio.mk +@@ -22,8 +22,4 @@ $(eval $(call gb_Module_add_targets,svgio,\ + Library_svgio \ + )) + +-$(eval $(call gb_Module_add_check_targets,svgio,\ +- CppunitTest_svgio \ +-)) +- + # vim: set noet ts=4 sw=4: +diff --git a/svgio/source/svgreader/svgsvgnode.cxx b/svgio/source/svgreader/svgsvgnode.cxx +index 7800666..087c621 100644 +--- a/svgio/source/svgreader/svgsvgnode.cxx ++++ b/svgio/source/svgreader/svgsvgnode.cxx +@@ -522,32 +522,11 @@ namespace svgio + } + else + { +- // There exists no parent to resolve relative width or height. +- // Use child size as fallback and expand to aspect ratio given +- // by the viewBox. No mapping. +- // We get viewport >= content, therefore no clipping. +- bNeedsMapping = false; +- const basegfx::B2DRange aChildRange( +- aSequence.getB2DRange( +- drawinglayer::geometry::ViewInformation2D())); +- const double fChildWidth(aChildRange.getWidth()); +- const double fChildHeight(aChildRange.getHeight()); +- const double fLeft(aChildRange.getMinX()); +- const double fTop(aChildRange.getMinY()); +- if ( fChildWidth / fViewBoxWidth > fChildHeight / fViewBoxHeight ) +- { // expand y +- fW = fChildWidth; +- fH = fChildWidth / fViewBoxRatio; +- } +- else +- { // expand x +- fH = fChildHeight; +- fW = fChildHeight * fViewBoxRatio; +- } +- aSvgCanvasRange = basegfx::B2DRange(fLeft, fTop, fLeft + fW, fTop + fH); ++ fW = fViewBoxWidth; ++ fH = fViewBoxHeight; ++ aSvgCanvasRange = basegfx::B2DRange(0.0, 0.0, fW, fH); + } + +- + if (bNeedsMapping) + { + // create mapping +-- +2.9.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch b/SOURCES/0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch new file mode 100644 index 0000000..d17e9c0 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch @@ -0,0 +1,26 @@ +From b54cfe9d3d22fdd40f7015bd343df8620c983779 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 27 Mar 2017 11:47:01 +0100 +Subject: [PATCH] Resolves: rhbz#1432468 disable opencl by default + +Change-Id: Ie037fcabdd219f195425979dd721501fb5527573 +--- + officecfg/registry/schema/org/openoffice/Office/Common.xcs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +index 946bd32..284d694 100644 +--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs ++++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +@@ -5670,7 +5670,7 @@ + Determines whether OpenCL can be used, when available, to speed up + some operations. + +- true ++ false + + + +-- +2.9.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1647507-try-inputted-password-as-both-.patch b/SOURCES/0001-Resolves-rhbz-1647507-try-inputted-password-as-both-.patch new file mode 100644 index 0000000..f542832 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1647507-try-inputted-password-as-both-.patch @@ -0,0 +1,40 @@ +From f648553dfc356b3c5e6dd77ea96039a9977f00d6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 8 Nov 2018 10:58:00 +0000 +Subject: [PATCH] Resolves: rhbz#1647507 try inputted password as both user and + owner password +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: Ibe1fae39d3153238e85400c9645766c260c9290d +Reviewed-on: https://gerrit.libreoffice.org/63080 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit e3ca8385fed93e61efb8200149e06b822a84a47e) +--- + sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx +index 16db05afe870..b536a710e832 100644 +--- a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx ++++ b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx +@@ -101,9 +101,11 @@ int main(int argc, char **argv) + : (ownerPassword[0] != '\001' + ? new GooString(ownerPassword) + : nullptr ) ); +- GooString* pUserPasswordStr( userPassword[0] != '\001' ++ GooString* pUserPasswordStr( aPwBuf[0] != 0 ++ ? new GooString( aPwBuf ) ++ : (userPassword[0] != '\001' + ? new GooString(userPassword) +- : nullptr ); ++ : nullptr ) ); + if( outputFile[0] != '\001' ) + g_binary_out = fopen(outputFile,"wb"); + +-- +2.17.1 + diff --git a/SOURCES/0001-Upgrade-to-ICU-61.1.patch b/SOURCES/0001-Upgrade-to-ICU-61.1.patch new file mode 100644 index 0000000..ed64bec --- /dev/null +++ b/SOURCES/0001-Upgrade-to-ICU-61.1.patch @@ -0,0 +1,675 @@ +From f247f08e370626bbb427acd8f4a400fd875350a3 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Eike Rathke +Date: Tue, 17 Apr 2018 20:13:52 +0200 +Subject: [PATCH] Upgrade to ICU 61.1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +Change-Id: I89c1c3d13d85decc72576744de2a16d20471d29d +Reviewed-on: https://gerrit.libreoffice.org/53064 +Tested-by: Jenkins +Reviewed-by: Eike Rathke +--- + configure.ac | 4 +- + download.lst | 8 +- + external/icu/UnpackedTarball_icu.mk | 3 +- + ...patch.1 => icu4c-61-werror-shadow.patch.1} | 30 ++- + external/icu/icu4c-khmerbreakengine.patch.1 | 246 +++++++++--------- + external/icu/icu4c-ubsan.patch.1 | 91 ------- + 6 files changed, 147 insertions(+), 235 deletions(-) + rename external/icu/{icu4c-59-werror-shadow.patch.1 => icu4c-61-werror-shadow.patch.1} (50%) + delete mode 100644 external/icu/icu4c-ubsan.patch.1 + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-Upgrade-to-ICU-61.1.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-Upgrade-to-ICU-61.1.patch" + +diff --git a/configure.ac b/configure.ac +index bdc374699cb9..458f9f3c2735 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -9001,8 +9001,8 @@ SYSTEM_GENBRK= + SYSTEM_GENCCODE= + SYSTEM_GENCMN= + +-ICU_MAJOR=60 +-ICU_MINOR=2 ++ICU_MAJOR=61 ++ICU_MINOR=1 + ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE" + ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE" + ICU_RECLASSIFIED_HEBREW_LETTER="TRUE" +diff --git a/download.lst b/download.lst +index 0a1fa65396d1..76f067bff4d7 100644 +--- a/download.lst ++++ b/download.lst +@@ -102,10 +102,10 @@ export HUNSPELL_SHA256SUM := 3cd9ceb062fe5814f668e4f22b2fa6e3ba0b339b921739541ce + export HUNSPELL_TARBALL := hunspell-1.6.2.tar.gz + export HYPHEN_SHA256SUM := 304636d4eccd81a14b6914d07b84c79ebb815288c76fe027b9ebff6ff24d5705 + export HYPHEN_TARBALL := 5ade6ae2a99bc1e9e57031ca88d36dad-hyphen-2.8.8.tar.gz +-export ICU_SHA256SUM := f073ea8f35b926d70bb33e6577508aa642a8b316a803f11be20af384811db418 +-export ICU_TARBALL := icu4c-60_2-src.tgz +-export ICU_DATA_SHA256SUM := 68f42ad0c9e0a5a5af8eba0577ba100833912288bad6e4d1f42ff480bbcfd4a9 +-export ICU_DATA_TARBALL := icu4c-60_2-data.zip ++export ICU_SHA256SUM := d007f89ae8a2543a53525c74359b65b36412fa84b3349f1400be6dcf409fafef ++export ICU_TARBALL := icu4c-61_1-src.tgz ++export ICU_DATA_SHA256SUM := d149ed0985b5a6e16a9d8ed66f105dd58fd334c276779f74241cfa656ed2830a ++export ICU_DATA_TARBALL := icu4c-61_1-data.zip + export JFREEREPORT_FLOW_ENGINE_SHA256SUM := 233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd + export JFREEREPORT_FLOW_ENGINE_TARBALL := ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip + export JFREEREPORT_FLUTE_SHA256SUM := 1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133 +diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk +index a4d0b16ecb36..b81cdaab6242 100644 +--- a/external/icu/UnpackedTarball_icu.mk ++++ b/external/icu/UnpackedTarball_icu.mk +@@ -27,15 +27,14 @@ $(eval $(call gb_UnpackedTarball_add_patches,icu,\ + external/icu/icu4c-solarisgcc.patch.1 \ + external/icu/icu4c-mkdir.patch.1 \ + external/icu/icu4c-$(if $(filter ANDROID,$(OS)),android,rpath).patch.1 \ +- external/icu/icu4c-ubsan.patch.1 \ + external/icu/icu4c-icu11100.patch.1 \ + external/icu/icu4c-scriptrun.patch.1 \ + external/icu/icu4c-rtti.patch.1 \ + external/icu/icu4c-clang-cl.patch.1 \ + $(if $(filter-out ANDROID,$(OS)),external/icu/icu4c-icudata-stdlibs.patch.1) \ + external/icu/icu4c-khmerbreakengine.patch.1 \ +- external/icu/icu4c-59-werror-shadow.patch.1 \ + external/icu/ofz4860.patch.2 \ ++ external/icu/icu4c-61-werror-shadow.patch.1 \ + )) + + $(eval $(call gb_UnpackedTarball_add_file,icu,source/data/brkitr/khmerdict.dict,external/icu/khmerdict.dict)) +diff --git a/external/icu/icu4c-59-werror-shadow.patch.1 b/external/icu/icu4c-61-werror-shadow.patch.1 +similarity index 50% +rename from external/icu/icu4c-59-werror-shadow.patch.1 +rename to external/icu/icu4c-61-werror-shadow.patch.1 +index fb88244aff13..b00f76317eff 100644 +--- a/external/icu/icu4c-59-werror-shadow.patch.1 ++++ b/external/icu/icu4c-61-werror-shadow.patch.1 +@@ -1,33 +1,35 @@ ++# https://ssl.icu-project.org/trac/ticket/13709 ++# Werror=shadow fails for unistr.h + diff -ur icu.org/source/common/unicode/unistr.h icu/source/common/unicode/unistr.h +---- icu.org/source/common/unicode/unistr.h 2017-03-29 06:44:37.000000000 +0200 +-+++ icu/source/common/unicode/unistr.h 2017-04-24 11:59:51.782076511 +0200 +-@@ -3080,11 +3080,11 @@ ++--- icu.org/source/common/unicode/unistr.h 2018-03-26 15:38:29.000000000 +0200 +++++ icu/source/common/unicode/unistr.h 2018-04-18 10:44:16.321188314 +0200 ++@@ -3053,11 +3053,11 @@ + * uint16_t * constructor. + * Delegates to UnicodeString(const char16_t *, int32_t). + * @param text UTF-16 string + - * @param length string length +-+ * @param length_ string length +- * @draft ICU 59 +++ * @param textLength string length ++ * @stable ICU 59 + */ + - UnicodeString(const uint16_t *text, int32_t length) : + - UnicodeString(ConstChar16Ptr(text), length) {} +-+ UnicodeString(const uint16_t *text, int32_t length_) : +-+ UnicodeString(ConstChar16Ptr(text), length_) {} +++ UnicodeString(const uint16_t *text, int32_t textLength) : +++ UnicodeString(ConstChar16Ptr(text), textLength) {} + #endif + +- /* +-@@ -3097,11 +3097,11 @@ ++ #if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) ++@@ -3066,11 +3066,11 @@ + * (Only defined if U_SIZEOF_WCHAR_T==2.) + * Delegates to UnicodeString(const char16_t *, int32_t). + * @param text NUL-terminated UTF-16 string + - * @param length string length +-+ * @param length_ string length +- * @draft ICU 59 +++ * @param textLength string length ++ * @stable ICU 59 + */ + - UnicodeString(const wchar_t *text, int32_t length) : + - UnicodeString(ConstChar16Ptr(text), length) {} +-+ UnicodeString(const wchar_t *text, int32_t length_) : +-+ UnicodeString(ConstChar16Ptr(text), length_) {} +++ UnicodeString(const wchar_t *text, int32_t textLength) : +++ UnicodeString(ConstChar16Ptr(text), textLength) {} + #endif + +- /* ++ /** +diff --git a/external/icu/icu4c-khmerbreakengine.patch.1 b/external/icu/icu4c-khmerbreakengine.patch.1 +index 6b45b3743611..9f134dd961b1 100644 +--- a/external/icu/icu4c-khmerbreakengine.patch.1 ++++ b/external/icu/icu4c-khmerbreakengine.patch.1 +@@ -1,16 +1,18 @@ + diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp +---- icu.org/source/common/dictbe.cpp 2017-01-20 01:20:31.000000000 +0100 +-+++ icu/source/common/dictbe.cpp 2017-04-21 23:14:23.845894374 +0200 +-@@ -29,8 +29,17 @@ ++--- icu.org/source/common/dictbe.cpp 2018-03-26 15:38:30.000000000 +0200 +++++ icu/source/common/dictbe.cpp 2018-04-17 17:55:38.620944919 +0200 ++@@ -29,7 +29,19 @@ + ****************************************************************** + */ + +--DictionaryBreakEngine::DictionaryBreakEngine(uint32_t breakTypes) { +-+DictionaryBreakEngine::DictionaryBreakEngine(uint32_t breakTypes) : +-+ clusterLimit(3) +-+{ ++-DictionaryBreakEngine::DictionaryBreakEngine() { +++DictionaryBreakEngine::DictionaryBreakEngine() +++ : fTypes(0), clusterLimit(0) { +++} +++ +++DictionaryBreakEngine::DictionaryBreakEngine(uint32_t breakTypes) +++ : fTypes(breakTypes), clusterLimit(3) { + + UErrorCode status = U_ZERO_ERROR; +- fTypes = breakTypes; + + fViramaSet.applyPattern(UNICODE_STRING_SIMPLE("[[:ccc=VR:]]"), status); + + + + // note Skip Sets contain fIgnoreSet characters too. +@@ -20,16 +22,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + } + + DictionaryBreakEngine::~DictionaryBreakEngine() { +-@@ -92,7 +101,7 @@ +- result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks); +- utext_setNativeIndex(text, current); +- } +-- +-+ +- return result; +- } +- +-@@ -103,6 +112,169 @@ ++@@ -76,6 +88,169 @@ + fSet.compact(); + } + +@@ -199,7 +192,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + /* + ****************************************************************** + * PossibleWord +-@@ -130,35 +302,35 @@ ++@@ -103,35 +278,35 @@ + public: + PossibleWord() : count(0), prefix(0), offset(-1), mark(0), current(0) {}; + ~PossibleWord() {}; +@@ -244,7 +237,7 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + // Dictionary leaves text after longest prefix, not longest word. Back up. + if (count <= 0) { + utext_setNativeIndex(text, start); +-@@ -830,51 +1002,28 @@ ++@@ -803,51 +978,28 @@ + * KhmerBreakEngine + */ + +@@ -265,7 +258,8 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + -static const int32_t KHMER_MIN_WORD_SPAN = KHMER_MIN_WORD * 2; + - + KhmerBreakEngine::KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status) +- : DictionaryBreakEngine((1 << UBRK_WORD) | (1 << UBRK_LINE)), ++- : DictionaryBreakEngine(), +++ : DictionaryBreakEngine((1 << UBRK_WORD) | (1 << UBRK_LINE)), + fDictionary(adoptDictionary) + { + - fKhmerWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Khmr:]&[:LineBreak=SA:]]"), status); +@@ -301,13 +295,13 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + - fEndWordSet.compact(); + - fBeginWordSet.compact(); + -// fSuffixSet.compact(); +-+ fIgnoreSet.compact(); +-+ fBaseSet.compact(); +-+ fPuncSet.compact(); +++ fIgnoreSet.compact(); +++ fBaseSet.compact(); +++ fPuncSet.compact(); + } + + KhmerBreakEngine::~KhmerBreakEngine() { +-@@ -886,180 +1035,204 @@ ++@@ -859,180 +1011,204 @@ + int32_t rangeStart, + int32_t rangeEnd, + UVector32 &foundBreaks ) const { +@@ -350,17 +344,6 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + + foundBreaks.push(rangeEnd, status); + + return foundBreaks.size() - wordsFound; + + } +-+ +-+ scanStart = rangeStart; +-+ scanWJ(text, scanStart, rangeEnd, before, after); +-+ if (startZwsp || initAfter >= before) { +-+ after = initAfter; +-+ before = 0; +-+ } +-+ if (!endZwsp && after > finalBefore && after < rangeEnd) +-+ endZwsp = true; +-+ if (endZwsp && before > finalBefore) +-+ before = finalBefore; + + - while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) { + - cuWordLength = 0; +@@ -375,7 +358,17 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + - cpWordLength = words[wordsFound % KHMER_LOOKAHEAD].markedCPLength(); + - wordsFound += 1; + - } +-- +++ scanStart = rangeStart; +++ scanWJ(text, scanStart, rangeEnd, before, after); +++ if (startZwsp || initAfter >= before) { +++ after = initAfter; +++ before = 0; +++ } +++ if (!endZwsp && after > finalBefore && after < rangeEnd) +++ endZwsp = true; +++ if (endZwsp && before > finalBefore) +++ before = finalBefore; ++ + - // If there was more than one, see which one can take us forward the most words + - else if (candidates > 1) { + - // If we're already at the end of the range, we're done +@@ -390,22 +383,6 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + - words[wordsFound % KHMER_LOOKAHEAD].markCurrent(); + - wordsMatched = 2; + - } +-- +-- // If we're already at the end of the range, we're done +-- if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) { +-- goto foundBest; +-- } +-- +-- // See if any of the possible second words is followed by a third word +-- do { +-- // If we find a third word, stop right away +-- if (words[(wordsFound + 2) % KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd)) { +-- words[wordsFound % KHMER_LOOKAHEAD].markCurrent(); +-- goto foundBest; +-- } +-- } +-- while (words[(wordsFound + 1) % KHMER_LOOKAHEAD].backUp(text)); +-- } + + utext_setNativeIndex(text, rangeStart); + + int32_t numCodePts = rangeEnd - rangeStart; + + // bestSnlp[i] is the snlp of the best segmentation of the first i +@@ -415,7 +392,11 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + + for(int32_t i = 1; i <= numCodePts; i++) { + + bestSnlp.addElement(kuint32max, status); + + } +-+ ++ ++- // If we're already at the end of the range, we're done ++- if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) { ++- goto foundBest; ++- } + + // prev[i] is the index of the last code point in the previous word in + + // the best segmentation of the first i characters. Note negative implies + + // that the code point is part of an unknown word. +@@ -423,7 +404,17 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + + for(int32_t i = 0; i <= numCodePts; i++) { + + prev.addElement(kuint32max, status); + + } +-+ ++ ++- // See if any of the possible second words is followed by a third word ++- do { ++- // If we find a third word, stop right away ++- if (words[(wordsFound + 2) % KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd)) { ++- words[wordsFound % KHMER_LOOKAHEAD].markCurrent(); ++- goto foundBest; ++- } ++- } ++- while (words[(wordsFound + 1) % KHMER_LOOKAHEAD].backUp(text)); ++- } + + const int32_t maxWordSize = 20; + + UVector32 values(maxWordSize, status); + + values.setSize(maxWordSize); +@@ -528,27 +519,17 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + - if (cuWordLength <= 0) { + - wordsFound += 1; + - } +-- +-- // Update the length with the passed-over characters +-- cuWordLength += chars; +-- } +-- else { +-- // Back up to where we were for next iteration +-- utext_setNativeIndex(text, current+cuWordLength); + + } while (fMarkSet.contains(c) || fIgnoreSet.contains(c)); + + values.setElementAt(BADSNLP, count); + + lengths.setElementAt(utext_getNativeIndex(text) - currix, count++); + + } else { + + values.setElementAt(BADSNLP, count); + + lengths.setElementAt(1, count++); +- } +- } +++ } +++ } + +-- // Never stop before a combining mark. +-- int32_t currPos; +-- while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) { +-- utext_next32(text); +-- cuWordLength += (int32_t)utext_getNativeIndex(text) - currPos; ++- // Update the length with the passed-over characters ++- cuWordLength += chars; + + for (int32_t j = 0; j < count; j++) { + + uint32_t v = values.elementAti(j); + + int32_t newSnlp = bestSnlp.elementAti(i) + v; +@@ -559,7 +540,10 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + + ++ln; + + utext_next32(text); + + c = utext_current32(text); +-+ } ++ } ++- else { ++- // Back up to where we were for next iteration ++- utext_setNativeIndex(text, current+cuWordLength); + + int32_t ln_j_i = ln + i; // yes really i! + + if (newSnlp < bestSnlp.elementAti(ln_j_i)) { + + if (v == BADSNLP) { +@@ -572,9 +556,38 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + + else + + prev.setElementAt(i, ln_j_i); + + bestSnlp.setElementAt(newSnlp, ln_j_i); +-+ } ++ } + } + - ++- // Never stop before a combining mark. ++- int32_t currPos; ++- while ((currPos = (int32_t)utext_getNativeIndex(text)) < rangeEnd && fMarkSet.contains(utext_current32(text))) { ++- utext_next32(text); ++- cuWordLength += (int32_t)utext_getNativeIndex(text) - currPos; +++ } +++ // Start pushing the optimal offset index into t_boundary (t for tentative). +++ // prev[numCodePts] is guaranteed to be meaningful. +++ // We'll first push in the reverse order, i.e., +++ // t_boundary[0] = numCodePts, and afterwards do a swap. +++ UVector32 t_boundary(numCodePts+1, status); +++ +++ int32_t numBreaks = 0; +++ // No segmentation found, set boundary to end of range +++ while (numCodePts >= 0 && (uint32_t)bestSnlp.elementAti(numCodePts) == kuint32max) { +++ --numCodePts; +++ } +++ if (numCodePts < 0) { +++ t_boundary.addElement(numCodePts, status); +++ numBreaks++; +++ } else { +++ for (int32_t i = numCodePts; (uint32_t)i != kuint32max; i = prev.elementAti(i)) { +++ if (i < 0) i = -i; +++ t_boundary.addElement(i, status); +++ numBreaks++; ++ } +++ U_ASSERT(prev.elementAti(t_boundary.elementAti(numBreaks - 1)) == 0); +++ } ++ + - // Look ahead for possible suffixes if a dictionary word does not follow. + - // We do this in code rather than using a rule so that the heuristic + - // resynch continues to function. For example, one of the suffix characters +@@ -616,30 +629,6 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + - // Did we find a word on this iteration? If so, push it on the break stack + - if (cuWordLength > 0) { + - foundBreaks.push((current+cuWordLength), status); +-+ } +-+ // Start pushing the optimal offset index into t_boundary (t for tentative). +-+ // prev[numCodePts] is guaranteed to be meaningful. +-+ // We'll first push in the reverse order, i.e., +-+ // t_boundary[0] = numCodePts, and afterwards do a swap. +-+ UVector32 t_boundary(numCodePts+1, status); +-+ +-+ int32_t numBreaks = 0; +-+ // No segmentation found, set boundary to end of range +-+ while (numCodePts >= 0 && (uint32_t)bestSnlp.elementAti(numCodePts) == kuint32max) { +-+ --numCodePts; +-+ } +-+ if (numCodePts < 0) { +-+ t_boundary.addElement(numCodePts, status); +-+ numBreaks++; +-+ } else { +-+ for (int32_t i = numCodePts; (uint32_t)i != kuint32max; i = prev.elementAti(i)) { +-+ if (i < 0) i = -i; +-+ t_boundary.addElement(i, status); +-+ numBreaks++; +-+ } +-+ U_ASSERT(prev.elementAti(t_boundary.elementAti(numBreaks - 1)) == 0); +-+ } +-+ + + // Now that we're done, convert positions in t_boundary[] (indices in + + // the normalized input string) back to indices in the original input UText + + // while reversing t_boundary and pushing values to foundBreaks. +@@ -669,38 +658,35 @@ diff -ur icu.org/source/common/dictbe.cpp icu/source/common/dictbe.cpp + + #if !UCONFIG_NO_NORMALIZATION + diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h +---- icu.org/source/common/dictbe.h 2017-01-20 01:20:31.000000000 +0100 +-+++ icu/source/common/dictbe.h 2017-04-21 23:14:23.845894374 +0200 +-@@ -34,6 +34,15 @@ ++--- icu.org/source/common/dictbe.h 2018-03-26 15:38:30.000000000 +0200 +++++ icu/source/common/dictbe.h 2018-04-17 14:55:33.307639865 +0200 ++@@ -34,7 +34,8 @@ ++ * threads without synchronization.

+ */ + class DictionaryBreakEngine : public LanguageBreakEngine { +- private: +-+ +-+ /** +-+ *

Default constructor.

+-+ * +-+ */ +-+ DictionaryBreakEngine(); +-+ ++- private: + + protected: + + + /** + * The set of characters handled by this engine + * @internal +-@@ -48,11 +57,63 @@ ++@@ -42,14 +43,84 @@ + +- uint32_t fTypes; ++ UnicodeSet fSet; + + + const int32_t WJ = 0x2060; + + const int32_t ZWSP = 0x200B; + + +- /** +-- *

Default constructor.

+-- * +++ /** +++ * The break types it was constructed with +++ * @internal +++ */ +++ uint32_t fTypes; +++ +++ /** + + * A Unicode set of all viramas + + * @internal +- */ +-- DictionaryBreakEngine(); +++ */ + + UnicodeSet fViramaSet; + + + + /** +@@ -751,10 +737,26 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h + + bool scanAfterEnd(UText *text, int32_t rangeEnd, int32_t& end, bool &doBreak) const; + + void scanBackClusters(UText *text, int32_t textStart, int32_t& start) const; + + void scanFwdClusters(UText *text, int32_t textEnd, int32_t& end) const; +- +++ + public: + +-@@ -83,7 +144,7 @@ ++ /** ++- *

Constructor

+++ *

Default constructor.

+++ * ++ */ ++ DictionaryBreakEngine(); ++ ++ /** +++ *

Constructor with break types.

+++ */ +++ explicit DictionaryBreakEngine(uint32_t breakTypes); +++ +++ /** ++ *

Virtual destructor.

++ */ ++ virtual ~DictionaryBreakEngine(); ++@@ -68,7 +139,7 @@ + *

Find any breaks within a run in the supplied text.

+ * + * @param text A UText representing the text. The iterator is left at +@@ -763,7 +765,7 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h + * that starts from the first character in the range. + * @param startPos The start of the run within the supplied text. + * @param endPos The end of the run within the supplied text. +-@@ -245,118 +306,120 @@ ++@@ -218,118 +289,120 @@ + + }; + +@@ -997,8 +999,8 @@ diff -ur icu.org/source/common/dictbe.h icu/source/common/dictbe.h + + /******************************************************************* + diff -ur icu.org/source/common/dictionarydata.cpp icu/source/common/dictionarydata.cpp +---- icu.org/source/common/dictionarydata.cpp 2017-01-20 01:20:31.000000000 +0100 +-+++ icu/source/common/dictionarydata.cpp 2017-04-21 23:14:23.846894372 +0200 ++--- icu.org/source/common/dictionarydata.cpp 2018-03-26 15:38:30.000000000 +0200 +++++ icu/source/common/dictionarydata.cpp 2018-04-17 14:04:50.775567214 +0200 + @@ -44,7 +44,7 @@ + + int32_t UCharsDictionaryMatcher::matches(UText *text, int32_t maxLength, int32_t limit, +@@ -1046,8 +1048,8 @@ diff -ur icu.org/source/common/dictionarydata.cpp icu/source/common/dictionaryda + if (values != NULL) { + values[wordCount] = bt.getValue(); + diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata.h +---- icu.org/source/common/dictionarydata.h 2017-01-20 01:20:31.000000000 +0100 +-+++ icu/source/common/dictionarydata.h 2017-04-21 23:14:23.846894372 +0200 ++--- icu.org/source/common/dictionarydata.h 2018-03-26 15:38:30.000000000 +0200 +++++ icu/source/common/dictionarydata.h 2018-04-17 14:04:50.775567214 +0200 + @@ -21,6 +21,7 @@ + #include "unicode/utext.h" + #include "unicode/udata.h" +@@ -1084,8 +1086,8 @@ diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata + private: + UChar32 transform(UChar32 c) const; + diff -ur icu.org/source/data/Makefile.in icu/source/data/Makefile.in +---- icu.org/source/data/Makefile.in 2017-04-21 23:13:03.248087545 +0200 +-+++ icu/source/data/Makefile.in 2017-04-21 23:14:23.846894372 +0200 ++--- icu.org/source/data/Makefile.in 2018-04-17 12:28:37.098707466 +0200 +++++ icu/source/data/Makefile.in 2018-04-17 14:04:50.775567214 +0200 + @@ -183,7 +183,7 @@ + endif + endif +diff --git a/external/icu/icu4c-ubsan.patch.1 b/external/icu/icu4c-ubsan.patch.1 +deleted file mode 100644 +index 9f6aa3fbc9f8..000000000000 +--- a/external/icu/icu4c-ubsan.patch.1 ++++ /dev/null +@@ -1,91 +0,0 @@ +-diff -ur icu.org/source/common/rbbidata.h icu/source/common/rbbidata.h +---- icu.org/source/common/rbbidata.h 2017-02-03 19:57:23.000000000 +0100 +-+++ icu/source/common/rbbidata.h 2017-04-21 22:46:25.371651160 +0200 +-@@ -115,7 +115,7 @@ +- /* StatusTable of the set of matching */ +- /* tags (rule status values) */ +- int16_t fReserved; +-- uint16_t fNextState[2]; /* Next State, indexed by char category. */ +-+ uint16_t fNextState[1]; /* Next State, indexed by char category. */ +- /* This array does not have two elements */ +- /* Array Size is actually fData->fHeader->fCatCount */ +- /* CAUTION: see RBBITableBuilder::getTableSize() */ +-@@ -128,7 +128,7 @@ +- uint32_t fRowLen; /* Length of a state table row, in bytes. */ +- uint32_t fFlags; /* Option Flags for this state table */ +- uint32_t fReserved; /* reserved */ +-- char fTableData[4]; /* First RBBIStateTableRow begins here. */ +-+ char fTableData[1]; /* First RBBIStateTableRow begins here. */ +- /* (making it char[] simplifies ugly address */ +- /* arithmetic for indexing variable length rows.) */ +- }; +-diff -ur icu.org/source/common/rbbitblb.cpp icu/source/common/rbbitblb.cpp +---- icu.org/source/common/rbbitblb.cpp 2017-01-20 01:20:31.000000000 +0100 +-+++ icu/source/common/rbbitblb.cpp 2017-04-21 22:46:25.373651159 +0200 +-@@ -1095,15 +1095,15 @@ +- return 0; +- } +- +-- size = sizeof(RBBIStateTable) - 4; // The header, with no rows to the table. +-+ size = offsetof(RBBIStateTable, fTableData); // The header, with no rows to the table. +- +- numRows = fDStates->size(); +- numCols = fRB->fSetBuilder->getNumCharCategories(); +- +-- // Note The declaration of RBBIStateTableRow is for a table of two columns. +-- // Therefore we subtract two from numCols when determining +-+ // Note The declaration of RBBIStateTableRow is for a table of one columns. +-+ // Therefore we subtract one from numCols when determining +- // how much storage to add to a row for the total columns. +-- rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-2); +-+ rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-1); +- size += numRows * rowSize; +- return size; +- } +-@@ -1133,7 +1133,7 @@ +- } +- +- table->fRowLen = sizeof(RBBIStateTableRow) + +-- sizeof(uint16_t) * (fRB->fSetBuilder->getNumCharCategories() - 2); +-+ sizeof(uint16_t) * (fRB->fSetBuilder->getNumCharCategories() - 1); +- table->fNumStates = fDStates->size(); +- table->fFlags = 0; +- if (fRB->fLookAheadHardBreak) { +-diff -ur icu.org/source/common/ubidiimp.h icu/source/common/ubidiimp.h +---- icu.org/source/common/ubidiimp.h 2017-02-03 19:57:23.000000000 +0100 +-+++ icu/source/common/ubidiimp.h 2017-04-21 22:46:25.374651159 +0200 +-@@ -198,8 +198,8 @@ +- /* in a Run, logicalStart will get this bit set if the run level is odd */ +- #define INDEX_ODD_BIT (1UL<<31) +- +--#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((int32_t)(level)<<31)) +--#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((int32_t)(level)<<31)) +-+#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((uint32_t)(level)<<31)) +-+#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((uint32_t)(level)<<31)) +- #define REMOVE_ODD_BIT(x) ((x)&=~INDEX_ODD_BIT) +- +- #define GET_INDEX(x) ((x)&~INDEX_ODD_BIT) +-diff -ur icu.org/source/common/ucmndata.cpp icu/source/common/ucmndata.cpp +---- icu.org/source/common/ucmndata.cpp 2017-03-08 16:34:47.000000000 +0100 +-+++ icu/source/common/ucmndata.cpp 2017-04-21 22:46:25.376651159 +0200 +-@@ -77,7 +77,7 @@ +- typedef struct { +- uint32_t count; +- uint32_t reserved; +-- PointerTOCEntry entry[2]; /* Actual size is from count. */ +-+ PointerTOCEntry entry[1]; /* Actual size is from count. */ +- } PointerTOC; +- +- +-diff -ur icu.org/source/common/ucmndata.h icu/source/common/ucmndata.h +---- icu.org/source/common/ucmndata.h 2017-01-20 01:20:31.000000000 +0100 +-+++ icu/source/common/ucmndata.h 2017-04-21 22:46:25.377651159 +0200 +-@@ -52,7 +52,7 @@ +- +- typedef struct { +- uint32_t count; +-- UDataOffsetTOCEntry entry[2]; /* Actual size of array is from count. */ +-+ UDataOffsetTOCEntry entry[1]; /* Actual size of array is from count. */ +- } UDataOffsetTOC; +- +- /** + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-Upgrade-to-ICU-62.1.patch b/SOURCES/0001-Upgrade-to-ICU-62.1.patch new file mode 100644 index 0000000..cfbb5d0 --- /dev/null +++ b/SOURCES/0001-Upgrade-to-ICU-62.1.patch @@ -0,0 +1,236 @@ +From 86dfa34c6d83b70923d462fecad316dafd9a1fc4 Mon Sep 17 00:00:00 2001 +Message-Id: <86dfa34c6d83b70923d462fecad316dafd9a1fc4.1531839924.git.erack@redhat.com> +From: Eike Rathke +Date: Mon, 16 Jul 2018 15:20:32 +0200 +Subject: [PATCH] Upgrade to ICU 62.1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +Change-Id: I9426e77aa85cfe068df59db47b8ac50b59cd4eb3 +Reviewed-on: https://gerrit.libreoffice.org/57500 +Reviewed-by: Eike Rathke +Tested-by: Jenkins +--- + configure.ac | 2 +- + download.lst | 8 +++---- + external/icu/UnpackedTarball_icu.mk | 1 - + external/icu/icu4c-mkdir.patch.1 | 6 ++--- + external/icu/ofz4860.patch.2 | 25 --------------------- + i18nutil/source/utility/unicode.cxx | 23 +++++++++++++++++++ + include/svx/strings.hrc | 11 +++++++++ + svx/source/dialog/charmap.cxx | 35 +++++++++++++++++++++++++++++ + 8 files changed, 77 insertions(+), 34 deletions(-) + delete mode 100644 external/icu/ofz4860.patch.2 + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-Upgrade-to-ICU-62.1.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-Upgrade-to-ICU-62.1.patch" + +diff --git a/configure.ac b/configure.ac +index 23b3fd4953c9..2fd11a9b3d19 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -9066,7 +9066,7 @@ SYSTEM_GENBRK= + SYSTEM_GENCCODE= + SYSTEM_GENCMN= + +-ICU_MAJOR=61 ++ICU_MAJOR=62 + ICU_MINOR=1 + ICU_RECLASSIFIED_PREPEND_SET_EMPTY="TRUE" + ICU_RECLASSIFIED_CONDITIONAL_JAPANESE_STARTER="TRUE" +diff --git a/download.lst b/download.lst +index dd3519b74a8d..0d4e974ed105 100644 +--- a/download.lst ++++ b/download.lst +@@ -102,10 +102,10 @@ export HUNSPELL_SHA256SUM := 3cd9ceb062fe5814f668e4f22b2fa6e3ba0b339b921739541ce + export HUNSPELL_TARBALL := hunspell-1.6.2.tar.gz + export HYPHEN_SHA256SUM := 304636d4eccd81a14b6914d07b84c79ebb815288c76fe027b9ebff6ff24d5705 + export HYPHEN_TARBALL := 5ade6ae2a99bc1e9e57031ca88d36dad-hyphen-2.8.8.tar.gz +-export ICU_SHA256SUM := d007f89ae8a2543a53525c74359b65b36412fa84b3349f1400be6dcf409fafef +-export ICU_TARBALL := icu4c-61_1-src.tgz +-export ICU_DATA_SHA256SUM := d149ed0985b5a6e16a9d8ed66f105dd58fd334c276779f74241cfa656ed2830a +-export ICU_DATA_TARBALL := icu4c-61_1-data.zip ++export ICU_SHA256SUM := 3dd9868d666350dda66a6e305eecde9d479fb70b30d5b55d78a1deffb97d5aa3 ++export ICU_TARBALL := icu4c-62_1-src.tgz ++export ICU_DATA_SHA256SUM := 93bcaf58cfa9223972da79cb8e0f94819ace4995db6041b84f4d9bd810246d1d ++export ICU_DATA_TARBALL := icu4c-62_1-data.zip + export JFREEREPORT_FLOW_ENGINE_SHA256SUM := 233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd + export JFREEREPORT_FLOW_ENGINE_TARBALL := ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip + export JFREEREPORT_FLUTE_SHA256SUM := 1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133 +diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk +index c789e6eb8d84..6800c1fb5ea8 100644 +--- a/external/icu/UnpackedTarball_icu.mk ++++ b/external/icu/UnpackedTarball_icu.mk +@@ -34,7 +34,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,icu,\ + external/icu/icu4c-clang-cl.patch.1 \ + $(if $(filter-out ANDROID,$(OS)),external/icu/icu4c-icudata-stdlibs.patch.1) \ + external/icu/icu4c-khmerbreakengine.patch.1 \ +- external/icu/ofz4860.patch.2 \ + external/icu/icu4c-61-werror-shadow.patch.1 \ + )) + +diff --git a/external/icu/icu4c-mkdir.patch.1 b/external/icu/icu4c-mkdir.patch.1 +index 3234f151b677..7de4cf51174c 100644 +--- a/external/icu/icu4c-mkdir.patch.1 ++++ b/external/icu/icu4c-mkdir.patch.1 +@@ -1,10 +1,10 @@ + diff -ur icu.org/source/data/Makefile.in icu/source/data/Makefile.in +---- icu.org/source/data/Makefile.in 2016-06-15 20:58:17.000000000 +0200 +-+++ icu/source/data/Makefile.in 2017-04-21 22:29:00.747158002 +0200 ++--- icu.org/source/data/Makefile.in 2018-06-21 11:39:15.000000000 +0200 +++++ icu/source/data/Makefile.in 2018-07-16 13:18:26.928109541 +0200 + @@ -367,6 +367,7 @@ + ifeq ($(PKGDATA_MODE),dll) + SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res +- $(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc ++ $(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc | build-dir + + mkdir -p $(OUTTMPDIR) + ifeq ($(MSYS_RC_MODE),1) + rc.exe -i$(srcdir)/../common -i$(top_builddir)/common -fo$@ $(CPPFLAGS) $< +diff --git a/external/icu/ofz4860.patch.2 b/external/icu/ofz4860.patch.2 +deleted file mode 100644 +index 14114d52878b..000000000000 +--- a/external/icu/ofz4860.patch.2 ++++ /dev/null +@@ -1,25 +0,0 @@ +-From 529ba01ee606940ca273b187be8ce9ba31cf2d90 Mon Sep 17 00:00:00 2001 +-From: David Tardon +-Date: Fri, 19 Jan 2018 10:41:02 +0100 +-Subject: [PATCH] ofz#4860 fix past-the-end read from array +- +---- +- icu4c/source/common/locmap.cpp | 2 +- +- 1 file changed, 1 insertion(+), 1 deletion(-) +- +-diff --git a/icu4c/source/common/locmap.cpp b/icu4c/source/common/locmap.cpp +-index cbb2b810a..6d62d8310 100644 +---- a/icu4c/source/common/locmap.cpp +-+++ b/icu4c/source/common/locmap.cpp +-@@ -1015,7 +1015,7 @@ static const char* +- getPosixID(const ILcidPosixMap *this_0, uint32_t hostID) +- { +- uint32_t i; +-- for (i = 0; i <= this_0->numRegions; i++) +-+ for (i = 0; i < this_0->numRegions; i++) +- { +- if (this_0->regionMaps[i].hostID == hostID) +- { +--- +-2.14.3 +- +diff --git a/i18nutil/source/utility/unicode.cxx b/i18nutil/source/utility/unicode.cxx +index 6d90b15ca42e..876750d6119d 100644 +--- a/i18nutil/source/utility/unicode.cxx ++++ b/i18nutil/source/utility/unicode.cxx +@@ -726,6 +726,29 @@ OString unicode::getExemplarLanguageForUScriptCode(UScriptCode eScript) + case USCRIPT_ZANABAZAR_SQUARE: + sRet = "mn-Zanb"; // abugida to write Mongolian + break; ++#endif ++#if (U_ICU_VERSION_MAJOR_NUM >= 62) ++ case USCRIPT_DOGRA: ++ sRet = "dgo"; // Dogri proper ++ break; ++ case USCRIPT_GUNJALA_GONDI: ++ sRet = "wsg"; // Adilabad Gondi ++ break; ++ case USCRIPT_MAKASAR: ++ sRet = "mak"; ++ break; ++ case USCRIPT_MEDEFAIDRIN: ++ sRet = "mis-Medf"; // Uncoded with script ++ break; ++ case USCRIPT_HANIFI_ROHINGYA: ++ sRet = "rhg"; ++ break; ++ case USCRIPT_SOGDIAN: ++ sRet = "sog"; ++ break; ++ case USCRIPT_OLD_SOGDIAN: ++ sRet = "sog"; ++ break; + #endif + } + return sRet; +# Slightly adapted to rawhide/F29 libreoffice-6-0-6 +diff --git a/include/svx/strings.hrc b/include/svx/strings.hrc +index 86c2215ac1c4..18fd984a1bd8 100644 +--- a/include/svx/strings.hrc ++++ b/include/svx/strings.hrc +@@ -1656,6 +1656,17 @@ + #define RID_SUBSETSTR_SOYOMBO NC_("RID_SUBSETMAP", "Soyombo") + #define RID_SUBSETSTR_SYRIAC_SUPPLEMENT NC_("RID_SUBSETMAP", "Syriac Supplement") + #define RID_SUBSETSTR_ZANABAZAR_SQUARE NC_("RID_SUBSETMAP", "Zanabazar Square") ++#define RID_SUBSETSTR_CHESS_SYMBOLS NC_("RID_SUBSETMAP", "Chess Symbols") ++#define RID_SUBSETSTR_DOGRA NC_("RID_SUBSETMAP", "Dogra") ++#define RID_SUBSETSTR_GEORGIAN_EXTENDED NC_("RID_SUBSETMAP", "Georgian Extended") ++#define RID_SUBSETSTR_GUNJALA_GONDI NC_("RID_SUBSETMAP", "Gunjala Gondi") ++#define RID_SUBSETSTR_HANIFI_ROHINGYA NC_("RID_SUBSETMAP", "Hanifi Rohingya") ++#define RID_SUBSETSTR_INDIC_SIYAQ_NUMBERS NC_("RID_SUBSETMAP", "Indic Siyaq Numbers") ++#define RID_SUBSETSTR_MAKASAR NC_("RID_SUBSETMAP", "Makasar") ++#define RID_SUBSETSTR_MAYAN_NUMERALS NC_("RID_SUBSETMAP", "Mayan Numerals") ++#define RID_SUBSETSTR_MEDEFAIDRIN NC_("RID_SUBSETMAP", "Medefaidrin") ++#define RID_SUBSETSTR_OLD_SOGDIAN NC_("RID_SUBSETMAP", "Old Sogdian") ++#define RID_SUBSETSTR_SOGDIAN NC_("RID_SUBSETMAP", "Sogdian") + + #endif + +diff --git a/svx/source/dialog/charmap.cxx b/svx/source/dialog/charmap.cxx +index 3bf3a01d520f..fcaa955541df 100644 +--- a/svx/source/dialog/charmap.cxx ++++ b/svx/source/dialog/charmap.cxx +@@ -1744,6 +1744,41 @@ void SubsetMap::InitList() + aAllSubsets.emplace_back( 0x11A00, 0x11A4F, SvxResId(RID_SUBSETSTR_ZANABAZAR_SQUARE) ); + break; + #endif ++#if (U_ICU_VERSION_MAJOR_NUM >= 62) ++ case UBLOCK_CHESS_SYMBOLS: ++ aAllSubsets.emplace_back( 0x1FA00, 0x1FA6F, SvxResId(RID_SUBSETSTR_CHESS_SYMBOLS) ); ++ break; ++ case UBLOCK_DOGRA: ++ aAllSubsets.emplace_back( 0x11800, 0x1184F, SvxResId(RID_SUBSETSTR_DOGRA) ); ++ break; ++ case UBLOCK_GEORGIAN_EXTENDED: ++ aAllSubsets.emplace_back( 0x1C90, 0x1CBF, SvxResId(RID_SUBSETSTR_GEORGIAN_EXTENDED) ); ++ break; ++ case UBLOCK_GUNJALA_GONDI: ++ aAllSubsets.emplace_back( 0x11D60, 0x11DAF, SvxResId(RID_SUBSETSTR_GUNJALA_GONDI) ); ++ break; ++ case UBLOCK_HANIFI_ROHINGYA: ++ aAllSubsets.emplace_back( 0x10D00, 0x10D3F, SvxResId(RID_SUBSETSTR_HANIFI_ROHINGYA) ); ++ break; ++ case UBLOCK_INDIC_SIYAQ_NUMBERS: ++ aAllSubsets.emplace_back( 0x1EC70, 0x1ECBF, SvxResId(RID_SUBSETSTR_INDIC_SIYAQ_NUMBERS) ); ++ break; ++ case UBLOCK_MAKASAR: ++ aAllSubsets.emplace_back( 0x11EE0, 0x11EFF, SvxResId(RID_SUBSETSTR_MAKASAR) ); ++ break; ++ case UBLOCK_MAYAN_NUMERALS: ++ aAllSubsets.emplace_back( 0x1D2E0, 0x1D2FF, SvxResId(RID_SUBSETSTR_MAYAN_NUMERALS) ); ++ break; ++ case UBLOCK_MEDEFAIDRIN: ++ aAllSubsets.emplace_back( 0x16E40, 0x16E9F, SvxResId(RID_SUBSETSTR_MEDEFAIDRIN) ); ++ break; ++ case UBLOCK_OLD_SOGDIAN: ++ aAllSubsets.emplace_back( 0x10F00, 0x10F2F, SvxResId(RID_SUBSETSTR_OLD_SOGDIAN) ); ++ break; ++ case UBLOCK_SOGDIAN: ++ aAllSubsets.emplace_back( 0x10F30, 0x10F6F, SvxResId(RID_SUBSETSTR_SOGDIAN) ); ++ break; ++#endif + + } + + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-Use-ICU_MAJOR-instead-of-hard-coded-Upgrade-to-ICU-6.patch b/SOURCES/0001-Use-ICU_MAJOR-instead-of-hard-coded-Upgrade-to-ICU-6.patch new file mode 100644 index 0000000..2e33f8e --- /dev/null +++ b/SOURCES/0001-Use-ICU_MAJOR-instead-of-hard-coded-Upgrade-to-ICU-6.patch @@ -0,0 +1,43 @@ +From 1d3de59ac2d12e42e12c9642bd252236a80b096b Mon Sep 17 00:00:00 2001 +Message-Id: <1d3de59ac2d12e42e12c9642bd252236a80b096b.1531842210.git.erack@redhat.com> +From: Eike Rathke +Date: Tue, 17 Jul 2018 17:37:55 +0200 +Subject: [PATCH] Use $(ICU_MAJOR) instead of hard coded (Upgrade to ICU 62.1) +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +Change-Id: Ifea7072922388b2c0b7631fb809b23e2a5524a3c +--- + ios/CustomTarget_iOS_setup.mk | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-Use-ICU_MAJOR-instead-of-hard-coded-Upgrade-to-ICU-6.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-Use-ICU_MAJOR-instead-of-hard-coded-Upgrade-to-ICU-6.patch" + +# Slightly adapted to rawhide/F29 libreoffice-6-0-6 +diff --git a/ios/CustomTarget_iOS_setup.mk b/ios/CustomTarget_iOS_setup.mk +index a0d1a18823ab..718bb8b90d46 100644 +--- a/ios/CustomTarget_iOS_setup.mk ++++ b/ios/CustomTarget_iOS_setup.mk +@@ -32,7 +32,7 @@ $(IOSGEN)/native-code.h: $(BUILDDIR)/config_host.mk $(SRCDIR)/ios/CustomTarget_iOS_setup.mk + > $(IOSGEN)/native-code.h + + # generate resource files used to start/run LibreOffice +- cp $(WORKDIR)/UnpackedTarball/icu/source/data/in/icudt61l.dat $(IOSRES)/icudt61l.dat ++ cp $(WORKDIR)/UnpackedTarball/icu/source/data/in/icudt$(ICU_MAJOR)l.dat $(IOSRES)/icudt$(ICU_MAJOR)l.dat + cp $(INSTDIR)/program/types.rdb $(IOSRES)/udkapi.rdb + cp $(INSTDIR)/program/types/offapi.rdb $(IOSRES) + cp $(INSTDIR)/program/types/oovbaapi.rdb $(IOSRES) + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-We-use-ICU-61-now.patch b/SOURCES/0001-We-use-ICU-61-now.patch new file mode 100644 index 0000000..1b3f5de --- /dev/null +++ b/SOURCES/0001-We-use-ICU-61-now.patch @@ -0,0 +1,43 @@ +From b9dde4a74cba5a771cbc85880d518f6717d19216 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Tor Lillqvist +Date: Thu, 7 Jun 2018 21:51:14 +0300 +Subject: [PATCH] We use ICU 61 now +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +Change-Id: I7faf23de08db680599658206faaf3028888563f6 +--- + ios/CustomTarget_iOS_setup.mk | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-We-use-ICU-61-now.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-We-use-ICU-61-now.patch" + +# Slightly adapted to rawhide/F29 libreoffice-6-0-6 +diff --git a/ios/CustomTarget_iOS_setup.mk b/ios/CustomTarget_iOS_setup.mk +index a9f98850c6d8..a0d1a18823ab 100644 +--- a/ios/CustomTarget_iOS_setup.mk ++++ b/ios/CustomTarget_iOS_setup.mk +@@ -32,7 +32,7 @@ $(IOSGEN)/native-code.h: $(BUILDDIR)/config_host.mk $(SRCDIR)/ios/CustomTarget_iOS_setup.mk + > $(IOSGEN)/native-code.h + + # generate resource files used to start/run LibreOffice +- cp $(WORKDIR)/UnpackedTarball/icu/source/data/in/icudt60l.dat $(IOSRES)/icudt60l.dat ++ cp $(WORKDIR)/UnpackedTarball/icu/source/data/in/icudt61l.dat $(IOSRES)/icudt61l.dat + cp $(INSTDIR)/program/types.rdb $(IOSRES)/udkapi.rdb + cp $(INSTDIR)/program/types/offapi.rdb $(IOSRES) + cp $(INSTDIR)/program/types/oovbaapi.rdb $(IOSRES) + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-cov-scan-help-warnings.patch b/SOURCES/0001-cov-scan-help-warnings.patch new file mode 100644 index 0000000..cd6b21f --- /dev/null +++ b/SOURCES/0001-cov-scan-help-warnings.patch @@ -0,0 +1,25 @@ +From fa5f426359bbe1b6a9c521130bf7bbee2e60f69f Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Wed, 18 Jul 2018 15:31:31 +0100 +Subject: [PATCH] foo + +--- + helpcontent2/to-wiki/wikiconv2.py | 2 -- + 5 files changed, 7 insertions(+), 12 deletions(-) + +diff --git a/helpcontent2/to-wiki/wikiconv2.py b/helpcontent2/to-wiki/wikiconv2.py +index 93f72eb..55ff72f 100755 +--- a/helpcontent2/to-wiki/wikiconv2.py ++++ b/helpcontent2/to-wiki/wikiconv2.py +@@ -1071,8 +1071,6 @@ class Item(ElementBase): + sys.stderr.write('Unhandled item type. Possibly type has been localized.\n') + finally: + raise UnhandledItemType +- return replace_text(self.text) +- + + class Paragraph(ElementBase): + def __init__(self, attrs, parent): +-- +2.14.4 + diff --git a/SOURCES/0001-cov-scan-warnings.patch b/SOURCES/0001-cov-scan-warnings.patch new file mode 100644 index 0000000..11afe49 --- /dev/null +++ b/SOURCES/0001-cov-scan-warnings.patch @@ -0,0 +1,2547 @@ +From b2549a70cb5d27f9c869451650c289ca831af97d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 26 Jul 2018 13:08:01 +0100 +Subject: [PATCH] cov scan warnings +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: If27bcfe85c5f2502ac1adb4ed4850ee42447516a + +coverity#705646 Resource leak + +Reviewed-on: https://gerrit.libreoffice.org/54139 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 1a3deaa7f7ff1d7e6ab5f5d551bcbc8c00d84052) + +Change-Id: I709b16f720cf97c05207cfb22d0c0ea15622367a + +Related: rhbz#1602589 silence error[memleak]: Memory leak: newValue + +Change-Id: I2d04c75aa9b5e1d91e06992fdb99899657ecf96d + +Related: rhbz#1602589 double_free, convert to std::vector + +Change-Id: I5fa19422d7ee61e7aad74eae86d843072e94016c + +Related: rhbz#1602589 silence coverity leaked_storage + +Change-Id: Iae694be40b32cc3821d326bb362e6091dba19a35 + +Related: rhbz#1602589 silence coverity use_after_free + +Change-Id: If5345b6515c45bee2742d1293cd181ab46e8e61b + +Related: rhbz#1602589 silence coverity copy_paste_error + +Change-Id: Idca4bfaaa9f127eae87ae879e2131aed747ce4b3 + +Related: rhbz#1602589 add comments to coverity annotations + +Change-Id: I88c941832a0d682ea4b6028c28edd48cf5df38f7 + +Related: rhbz#1602589 silence leaked_storage + +Change-Id: Ib489ebf55d3a18d2af6f34b3f6128231d6d7758c + +InsertNewTable always returns true + +Change-Id: I28b2cd46bf40011f5f813784bd5c182f18ee103f + +pDPObject can never be null + +Change-Id: Ie98da9b53e952c2fb1f8f91e4b9489060114c366 + +ScDPObject is only needed in endFastElement + +Change-Id: I8e1a7897777111c225e42ebcf81e67face6b29b9 + +Related: rhbz#1602589 silence leaked_storage + +Change-Id: I21cc4af40429fa3ef4284d6c0ea592b05bf36620 + +bodge it + +Change-Id: Ie9e4e3173a91f5380a98d629c8a67d2ebb9c6c14 + +Related: rhbz#1602589 rework to avoid bogus cppcheck double free warning + +Change-Id: Ie673de68f39b903536c2287b8989fe6afcc9fd66 + +SHELLCHECK_WARNING, VERBOSE is unused + +gengal.sh was originally based on unopkg.sh +which had this --verbose switch... + +commit 164027e48899faaee284242eaca04b8aa5545319 +Date: Fri Apr 5 16:39:24 2013 +0100 + + gengal: re-base on original tool. + + new wrapper based on unopkg.sh. + work re-based on original SUSE implementation. + +and unopkg.sh later had VERBOSE removed... + +commit 1fc195f7e830619d56cc4c56043b154bc3a72b02 +Author: Stephan Bergmann +Date: Thu Oct 17 15:34:53 2013 +0200 + + Simplify code (VERBOSE was unused) + +but gengal.sh retained its unused VERBOSE variable + +Change-Id: I56aa830aef829c7727550fcaf7aed5058fffdc78 +--- + bridges/source/cpp_uno/shared/bridge.cxx | 2 +- + bridges/source/jni_uno/jni_bridge.cxx | 4 +- + bridges/source/jni_uno/jni_info.cxx | 6 +- + comphelper/source/misc/threadpool.cxx | 2 +- + cppu/source/typelib/static_types.cxx | 2 +- + cppu/source/typelib/typelib.cxx | 9 +- + extensions/source/scanner/sanedlg.cxx | 2 +- + filter/source/svg/presentation_engine.js | 8 +- + .../accelerators/acceleratorconfiguration.cxx | 4 +- + idlc/source/parser.y | 2 +- + include/LibreOfficeKit/LibreOfficeKitInit.h | 4 +- + include/vcl/bitmap.hxx | 14 +- + pyuno/source/module/pyuno_dlopenwrapper.c | 1 + + registry/source/reflwrit.cxx | 8 +- + registry/source/regimpl.cxx | 124 ++++++--------- + sal/osl/unx/file.cxx | 4 +- + sal/osl/unx/pipe.cxx | 9 +- + sal/osl/unx/profile.cxx | 1 + + sal/osl/w32/file.cxx | 4 +- + sal/rtl/alloc_arena.cxx | 2 +- + sal/rtl/alloc_cache.cxx | 6 +- + sc/inc/dpobject.hxx | 2 +- + sc/qa/unit/ucalc_pivottable.cxx | 142 +++++++----------- + sc/source/core/data/dpobject.cxx | 3 +- + sc/source/core/tool/chgtrack.cxx | 20 ++- + sc/source/core/tool/compiler.cxx | 1 + + sc/source/filter/xml/xmldpimp.cxx | 19 +-- + sc/source/filter/xml/xmldpimp.hxx | 3 +- + sc/source/ui/docshell/dbdocfun.cxx | 4 +- + sc/source/ui/undo/undodat.cxx | 6 +- + sc/source/ui/view/viewdata.cxx | 2 + + .../ui/animations/CustomAnimationPane.cxx | 2 + + sd/source/ui/unoidl/unosrch.cxx | 71 +++------ + sfx2/source/control/itemdel.cxx | 2 +- + solenv/bin/pack_images.py | 2 +- + soltools/cpp/_unix.c | 1 + + soltools/mkdepend/parse.c | 1 + + svtools/source/svhtml/htmlout.cxx | 2 +- + svx/source/gengal/gengal.sh | 2 - + sw/source/core/text/itrform2.cxx | 2 + + sw/source/ui/index/cnttab.cxx | 9 +- + unoidl/source/legacyprovider.cxx | 32 ++-- + unotest/source/cpp/officeconnection.cxx | 2 +- + vcl/source/bitmap/BitmapScaleConvolution.cxx | 62 ++++---- + vcl/source/gdi/bitmap3.cxx | 10 +- + vcl/source/gdi/bitmap4.cxx | 53 +++---- + vcl/source/gdi/pdfwriter_impl.cxx | 1 + + vcl/unx/generic/plugadapt/salplug.cxx | 1 + + .../sun/star/wizards/agenda/TopicsControl.py | 6 +- + .../star/wizards/document/OfficeDocument.py | 1 - + 50 files changed, 306 insertions(+), 376 deletions(-) + +diff --git a/bridges/source/cpp_uno/shared/bridge.cxx b/bridges/source/cpp_uno/shared/bridge.cxx +index 556350022e48..186d89aa1956 100644 +--- a/bridges/source/cpp_uno/shared/bridge.cxx ++++ b/bridges/source/cpp_uno/shared/bridge.cxx +@@ -144,7 +144,7 @@ uno_Mapping * Bridge::createMapping( + bool bExportCpp2Uno) + { + Bridge * bridge = new Bridge(pCppEnv, pUnoEnv, bExportCpp2Uno); +- //coverity[leaked_storage] ++ // coverity[leaked_storage] - on purpose + return bExportCpp2Uno ? &bridge->aCpp2Uno : &bridge->aUno2Cpp; + } + +diff --git a/bridges/source/jni_uno/jni_bridge.cxx b/bridges/source/jni_uno/jni_bridge.cxx +index 3859b148c541..15daa8e28603 100644 +--- a/bridges/source/jni_uno/jni_bridge.cxx ++++ b/bridges/source/jni_uno/jni_bridge.cxx +@@ -551,7 +551,7 @@ SAL_DLLPUBLIC_EXPORT void SAL_CALL uno_ext_getMapping( + uno_registerMapping( + &mapping, Bridge_free, + pFrom, &pTo->pExtEnv->aBase, nullptr ); +- // coverity[leaked_storage] ++ // coverity[leaked_storage] - on purpose + } + else if ( from_env_typename == UNO_LB_UNO && to_env_typename == UNO_LB_JAVA ) + { +@@ -561,7 +561,7 @@ SAL_DLLPUBLIC_EXPORT void SAL_CALL uno_ext_getMapping( + uno_registerMapping( + &mapping, Bridge_free, + &pFrom->pExtEnv->aBase, pTo, nullptr ); +- // coverity[leaked_storage] ++ // coverity[leaked_storage] - on purpose + } + } + catch (const BridgeRuntimeError & err) +diff --git a/bridges/source/jni_uno/jni_info.cxx b/bridges/source/jni_uno/jni_info.cxx +index 82b773d6d58c..1542eebbf4e6 100644 +--- a/bridges/source/jni_uno/jni_info.cxx ++++ b/bridges/source/jni_uno/jni_info.cxx +@@ -103,7 +103,7 @@ JNI_interface_type_info::JNI_interface_type_info( + typelib_InterfaceTypeDescription * td = + reinterpret_cast< typelib_InterfaceTypeDescription * >( + m_td.get() ); +- // coverity [ctor_dtor_leak] ++ // coverity[ctor_dtor_leak] - on purpose + m_methods = new jmethodID[ td->nMapFunctionIndexToMemberIndex ]; + sal_Int32 nMethodIndex = 0; + typelib_TypeDescriptionReference ** ppMembers = td->ppMembers; +@@ -288,7 +288,7 @@ JNI_compound_type_info::JNI_compound_type_info( + td->aBase.pWeakRef, + jni_info->m_RuntimeException_type.getTypeLibType() )) + { +- // coverity [ctor_dtor_leak] ++ // coverity[ctor_dtor_leak] - on purpose + m_fields = new jfieldID[ 2 ]; + m_fields[ 0 ] = nullptr; // special Throwable.getMessage() + // field Context +@@ -860,7 +860,7 @@ JNI_info::JNI_info( + { + css::uno::TypeDescription XInterface_td( + cppu::UnoType::get()); +- // coverity [ctor_dtor_leak] ++ // coverity[ctor_dtor_leak] - on purpose + m_XInterface_type_info = + new JNI_interface_type_info( jni, XInterface_td.get() ); + } +diff --git a/comphelper/source/misc/threadpool.cxx b/comphelper/source/misc/threadpool.cxx +index 23e363213206..d8e984fe58d5 100644 +--- a/comphelper/source/misc/threadpool.cxx ++++ b/comphelper/source/misc/threadpool.cxx +@@ -153,7 +153,7 @@ void ThreadPool::shutdownLocked(std::unique_lock& aGuard) + } + assert( maTasks.empty() ); + +- // coverity[missing_lock] ++ // coverity[missing_lock] - on purpose + mbTerminate = true; + + maTasksChanged.notify_all(); +diff --git a/cppu/source/typelib/static_types.cxx b/cppu/source/typelib/static_types.cxx +index 3fb0bf6ab62a..f432b766a84a 100644 +--- a/cppu/source/typelib/static_types.cxx ++++ b/cppu/source/typelib/static_types.cxx +@@ -439,7 +439,7 @@ void SAL_CALL typelib_static_interface_type_init( + typelib_TypeDescriptionReference * pBaseType ) + SAL_THROW_EXTERN_C() + { +- // coverity[callee_ptr_arith] ++ // coverity[callee_ptr_arith] - not a bug + typelib_static_mi_interface_type_init( + ppRef, pTypeName, pBaseType == nullptr ? 0 : 1, &pBaseType); + } +diff --git a/cppu/source/typelib/typelib.cxx b/cppu/source/typelib/typelib.cxx +index 4ef5aaf18ac7..8d0c8e5647de 100644 +--- a/cppu/source/typelib/typelib.cxx ++++ b/cppu/source/typelib/typelib.cxx +@@ -564,6 +564,7 @@ extern "C" void SAL_CALL typelib_typedescription_newEmpty( + osl_atomic_increment( &Init::get().nIndirectTypeDescriptionCount ); + #endif + pTmp->pType = nullptr; ++ // coverity[leaked_storage] - this is on purpose + } + break; + +@@ -581,6 +582,7 @@ extern "C" void SAL_CALL typelib_typedescription_newEmpty( + pTmp->aBase.ppTypeRefs = nullptr; + pTmp->aBase.ppMemberNames = nullptr; + pTmp->pParameterizedTypes = nullptr; ++ // coverity[leaked_storage] - this is on purpose + } + break; + +@@ -597,6 +599,7 @@ extern "C" void SAL_CALL typelib_typedescription_newEmpty( + pTmp->pMemberOffsets = nullptr; + pTmp->ppTypeRefs = nullptr; + pTmp->ppMemberNames = nullptr; ++ // coverity[leaked_storage] - this is on purpose + } + break; + +@@ -611,6 +614,7 @@ extern "C" void SAL_CALL typelib_typedescription_newEmpty( + pTmp->nEnumValues = 0; + pTmp->ppEnumNames = nullptr; + pTmp->pEnumValues = nullptr; ++ // coverity[leaked_storage] - this is on purpose + } + break; + +@@ -632,6 +636,7 @@ extern "C" void SAL_CALL typelib_typedescription_newEmpty( + pTmp->pMapMemberIndexToFunctionIndex= nullptr; + pTmp->nBaseTypes = 0; + pTmp->ppBaseTypes = nullptr; ++ // coverity[leaked_storage] - this is on purpose + } + break; + +@@ -652,6 +657,7 @@ extern "C" void SAL_CALL typelib_typedescription_newEmpty( + pTmp->pInterface = nullptr; + pTmp->pBaseRef = nullptr; + pTmp->nIndex = 0; ++ // coverity[leaked_storage] - this is on purpose + } + break; + +@@ -672,6 +678,7 @@ extern "C" void SAL_CALL typelib_typedescription_newEmpty( + pTmp->ppGetExceptions = nullptr; + pTmp->nSetExceptions = 0; + pTmp->ppSetExceptions = nullptr; ++ // coverity[leaked_storage] - this is on purpose + } + break; + +@@ -892,7 +899,7 @@ extern "C" void SAL_CALL typelib_typedescription_newInterface( + typelib_TypeDescriptionReference ** ppMembers ) + SAL_THROW_EXTERN_C() + { +- // coverity[callee_ptr_arith] ++ // coverity[callee_ptr_arith] - not a bug + typelib_typedescription_newMIInterface( + ppRet, pTypeName, 0, 0, 0, 0, 0, pBaseInterface == nullptr ? 0 : 1, + &pBaseInterface, nMembers, ppMembers); +diff --git a/extensions/source/scanner/sanedlg.cxx b/extensions/source/scanner/sanedlg.cxx +index e515a763af39..d4b4bf9d3156 100644 +--- a/extensions/source/scanner/sanedlg.cxx ++++ b/extensions/source/scanner/sanedlg.cxx +@@ -495,7 +495,6 @@ void SaneDlg::InitFields() + pField->SetMax( (long)pDouble[ nValue-1 ] ); + else + pField->SetMax( (long)pDouble[ 1 ] ); +- delete [] pDouble; + } + switch( i ) { + case 0: aMinTopLeft.X() = pField->GetMin();break; +@@ -513,6 +512,7 @@ void SaneDlg::InitFields() + case 3: aMaxBottomRight.Y() = (int)fValue;break; + } + } ++ delete [] pDouble; + pField->Enable(); + } + else +diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js +index 7dbe377697dd..f4b9db25e4e0 100644 +--- a/filter/source/svg/presentation_engine.js ++++ b/filter/source/svg/presentation_engine.js +@@ -7987,7 +7987,7 @@ AnimationBaseNode3.prototype.info = function( bVerbose ) + sInfo += '; keyTimes: ' + this.getKeyTimes().join( ',' ); + + // values +- if( this.getKeyTimes().length ) ++ if( this.getValues().length ) + sInfo += '; values: ' + this.getValues().join( ',' ); + + // formula +@@ -12170,7 +12170,6 @@ SlideTransition.prototype.createSlideTransition = function( aLeavingSlide, aEnte + + case PUSHWIPE_TRANSITION: + { +- var bCombined = false; + var aDirection = null; + switch( this.eTransitionSubType ) + { +@@ -12192,10 +12191,7 @@ SlideTransition.prototype.createSlideTransition = function( aLeavingSlide, aEnte + aDirection = { x: -1.0, y: 0.0 }; + break; + } +- if( bCombined ) +- return null; +- else +- return new MovingSlideChange( aLeavingSlide, aEnteringSlide, aDirection, aDirection ); ++ return new MovingSlideChange( aLeavingSlide, aEnteringSlide, aDirection, aDirection ); + } + + case SLIDEWIPE_TRANSITION: +diff --git a/framework/source/accelerators/acceleratorconfiguration.cxx b/framework/source/accelerators/acceleratorconfiguration.cxx +index ecc33938ab75..6a5a120331c1 100644 +--- a/framework/source/accelerators/acceleratorconfiguration.cxx ++++ b/framework/source/accelerators/acceleratorconfiguration.cxx +@@ -1125,7 +1125,7 @@ void XCUBasedAcceleratorConfiguration::impl_ts_save(bool bPreferred) + + // take over all changes into the original container + SolarMutexGuard g; +- // coverity[check_after_deref] ++ // coverity[check_after_deref] - confusing but correct + if (m_pPrimaryWriteCache) + { + m_aPrimaryReadCache.takeOver(*m_pPrimaryWriteCache); +@@ -1164,7 +1164,7 @@ void XCUBasedAcceleratorConfiguration::impl_ts_save(bool bPreferred) + + // take over all changes into the original container + SolarMutexGuard g; +- // coverity[check_after_deref] ++ // coverity[check_after_deref] - confusing but correct + if (m_pSecondaryWriteCache) + { + m_aSecondaryReadCache.takeOver(*m_pSecondaryWriteCache); +diff --git a/idlc/source/parser.y b/idlc/source/parser.y +index 1e873853b46e..592a082d58f8 100644 +--- a/idlc/source/parser.y ++++ b/idlc/source/parser.y +@@ -2136,7 +2136,7 @@ at_least_one_scoped_name : + } else + { + std::list< OString >* pScopedNames = new std::list< OString >; +- // coverity [copy_paste_error] ++ // coverity[copy_paste_error] - this is not a cut and paste + pScopedNames->push_back(*$1); + $$ = pScopedNames; + } +diff --git a/include/LibreOfficeKit/LibreOfficeKitInit.h b/include/LibreOfficeKit/LibreOfficeKitInit.h +index a0c111a9e0e2..71f4f2e68b04 100644 +--- a/include/LibreOfficeKit/LibreOfficeKitInit.h ++++ b/include/LibreOfficeKit/LibreOfficeKitInit.h +@@ -280,13 +280,13 @@ static LibreOfficeKit *lok_init_2( const char *install_path, const char *user_p + } + free( imp_lib ); + // dlhandle is "leaked" +- // coverity[leaked_storage] ++ // coverity[leaked_storage] - on purpose + return pSym( install_path ); + } + + free( imp_lib ); + // dlhandle is "leaked" +- // coverity[leaked_storage] ++ // coverity[leaked_storage] - on purpose + return pSym2( install_path, user_profile_url ); + } + +diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx +index 66a056448b53..d38aabac32f3 100644 +--- a/include/vcl/bitmap.hxx ++++ b/include/vcl/bitmap.hxx +@@ -667,9 +667,9 @@ public: + Bitmap& aNewBitmap, + BitmapReadAccess const * pReadAcc, + int aNumberOfContributions, +- const double* pWeights, +- int const * pPixels, +- const int* pCount ); ++ const std::vector& rWeights, ++ const std::vector& rPixels, ++ const std::vector& rCounts ); + + SAL_DLLPRIVATE bool ImplMakeMono( sal_uInt8 cThreshold ); + SAL_DLLPRIVATE bool ImplMakeGreyscales( sal_uInt16 nGreyscales ); +@@ -704,10 +704,10 @@ public: + SAL_DLLPRIVATE static void ImplBlurContributions( + const int aSize, + const int aNumberOfContributions, +- const double* pBlurVector, +- double*& pWeights, +- int*& pPixels, +- int*& pCount ); ++ const std::vector& rBlurVector, ++ std::vector& pWeights, ++ std::vector& rPixels, ++ std::vector& rCounts ); + + public: + +diff --git a/pyuno/source/module/pyuno_dlopenwrapper.c b/pyuno/source/module/pyuno_dlopenwrapper.c +index 5654cb0f8f0a..44e711653e35 100644 +--- a/pyuno/source/module/pyuno_dlopenwrapper.c ++++ b/pyuno/source/module/pyuno_dlopenwrapper.c +@@ -72,6 +72,7 @@ static void * load(void const * address, char const * symbol) { + dlclose(h); + abort(); + } ++ // coverity[leaked_storage] - this is on purpose + return func; + } + +diff --git a/registry/source/reflwrit.cxx b/registry/source/reflwrit.cxx +index 45c5ae474a2c..7f82f9cd5172 100644 +--- a/registry/source/reflwrit.cxx ++++ b/registry/source/reflwrit.cxx +@@ -376,11 +376,11 @@ void FieldEntry::setData(const OString& name, + RTValueType constValueType, + RTConstValueUnion constValue) + { +- sal_Unicode * newValue = nullptr; ++ std::unique_ptr newValue; + if (constValueType == RT_TYPE_STRING && constValue.aString != nullptr) { + sal_Int32 n = rtl_ustr_getLength(constValue.aString) + 1; +- newValue = new sal_Unicode[n]; +- memcpy(newValue, constValue.aString, n * sizeof (sal_Unicode)); ++ newValue.reset(new sal_Unicode[n]); ++ memcpy(newValue.get(), constValue.aString, n * sizeof (sal_Unicode)); + } + + m_name = name; +@@ -406,7 +406,7 @@ void FieldEntry::setData(const OString& name, + m_constValue.aString = NULL_WSTRING; + else + { +- m_constValue.aString = newValue; ++ m_constValue.aString = newValue.release(); + } + } + else +diff --git a/registry/source/regimpl.cxx b/registry/source/regimpl.cxx +index 6dec181933ea..260c7e9d2a7e 100644 +--- a/registry/source/regimpl.cxx ++++ b/registry/source/regimpl.cxx +@@ -21,6 +21,7 @@ + #include "regimpl.hxx" + + #include ++#include + #include + #include + +@@ -323,8 +324,7 @@ void dumpType(typereg::Reader const & reader, OString const & indent) { + printf( + "%s parameter count: %u\n", indent.getStr(), + static_cast< unsigned int >(reader.getMethodParameterCount(i))); +- // coverity[tainted_data] cid#1215304 unhelpfully warns about an +- // untrusted loop bound here: ++ // coverity[tainted_data] - cid#1215304 unhelpfully warns about untrusted loop bound + for (sal_uInt16 j = 0; j < reader.getMethodParameterCount(i); ++j) + { + printf( +@@ -365,8 +365,7 @@ void dumpType(typereg::Reader const & reader, OString const & indent) { + printf( + "%s exception count: %u\n", indent.getStr(), + static_cast< unsigned int >(reader.getMethodExceptionCount(i))); +- // coverity[tainted_data] cid#1215304 unhelpfully warns about an +- // untrusted loop bound here: ++ // coverity[tainted_data] - cid#1215304 unhelpfully warns about untrusted loop bound + for (sal_uInt16 j = 0; j < reader.getMethodExceptionCount(i); ++j) + { + printf( +@@ -903,7 +902,6 @@ RegError ORegistry::loadAndSaveValue(ORegKey* pTargetKey, + bool bReport) + { + OStoreStream rValue; +- sal_uInt8* pBuffer; + RegValueType valueType; + sal_uInt32 valueSize; + sal_uInt32 nSize; +@@ -937,37 +935,32 @@ RegError ORegistry::loadAndSaveValue(ORegKey* pTargetKey, + return RegError::VALUE_NOT_EXISTS; + } + +- pBuffer = static_cast(rtl_allocateMemory(VALUE_HEADERSIZE)); ++ std::vector aBuffer(VALUE_HEADERSIZE); + + sal_uInt32 rwBytes; +- if (rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, rwBytes)) ++ if (rValue.readAt(0, aBuffer.data(), VALUE_HEADERSIZE, rwBytes)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + if (rwBytes != VALUE_HEADERSIZE) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + + RegError _ret = RegError::NO_ERROR; +- sal_uInt8 type = *pBuffer; +- valueType = (RegValueType)type; +- readUINT32(pBuffer+VALUE_TYPEOFFSET, valueSize); +- rtl_freeMemory(pBuffer); ++ sal_uInt8 type = aBuffer[0]; ++ valueType = static_cast(type); ++ readUINT32(aBuffer.data() + VALUE_TYPEOFFSET, valueSize); + + nSize = VALUE_HEADERSIZE + valueSize; +- pBuffer = static_cast(rtl_allocateMemory(nSize)); ++ aBuffer.resize(nSize); + +- if (rValue.readAt(0, pBuffer, nSize, rwBytes)) ++ if (rValue.readAt(0, aBuffer.data(), nSize, rwBytes)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + if (rwBytes != nSize) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + +@@ -978,19 +971,17 @@ RegError ORegistry::loadAndSaveValue(ORegKey* pTargetKey, + if (valueType == RegValueType::BINARY) + { + _ret = checkBlop( +- rValue, sTargetPath, valueSize, pBuffer+VALUE_HEADEROFFSET, ++ rValue, sTargetPath, valueSize, aBuffer.data() + VALUE_HEADEROFFSET, + bReport); + if (_ret != RegError::NO_ERROR) + { + if (_ret == RegError::MERGE_ERROR || + (_ret == RegError::MERGE_CONFLICT && bWarnings)) + { +- rtl_freeMemory(pBuffer); + return _ret; + } + } else + { +- rtl_freeMemory(pBuffer); + return _ret; + } + } +@@ -998,23 +989,19 @@ RegError ORegistry::loadAndSaveValue(ORegKey* pTargetKey, + + if (rValue.create(rTargetFile, sTargetPath, valueName, storeAccessMode::Create)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } +- if (rValue.writeAt(0, pBuffer, nSize, rwBytes)) ++ if (rValue.writeAt(0, aBuffer.data(), nSize, rwBytes)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + + if (rwBytes != nSize) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + pTargetKey->setModified(); + +- rtl_freeMemory(pBuffer); + return _ret; + } + +@@ -1031,33 +1018,30 @@ RegError ORegistry::checkBlop(OStoreStream& rValue, + return RegError::INVALID_VALUE; + } + +- sal_uInt8* pBuffer = static_cast(rtl_allocateMemory(VALUE_HEADERSIZE)); ++ std::vector aBuffer(VALUE_HEADERSIZE); + RegValueType valueType; + sal_uInt32 valueSize; + sal_uInt32 rwBytes; + OString targetPath(OUStringToOString(sTargetPath, RTL_TEXTENCODING_UTF8)); + +- if (!rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, rwBytes) && ++ if (!rValue.readAt(0, aBuffer.data(), VALUE_HEADERSIZE, rwBytes) && + (rwBytes == VALUE_HEADERSIZE)) + { +- sal_uInt8 type = *pBuffer; +- valueType = (RegValueType)type; +- readUINT32(pBuffer+VALUE_TYPEOFFSET, valueSize); +- rtl_freeMemory(pBuffer); ++ sal_uInt8 type = aBuffer[0]; ++ valueType = static_cast(type); ++ readUINT32(aBuffer.data() + VALUE_TYPEOFFSET, valueSize); + + if (valueType == RegValueType::BINARY) + { +- pBuffer = static_cast(rtl_allocateMemory(valueSize)); +- if (!rValue.readAt(VALUE_HEADEROFFSET, pBuffer, valueSize, rwBytes) && ++ aBuffer.resize(valueSize); ++ if (!rValue.readAt(VALUE_HEADEROFFSET, aBuffer.data(), valueSize, rwBytes) && + (rwBytes == valueSize)) + { +- RegistryTypeReader reader2(pBuffer, valueSize); ++ RegistryTypeReader reader2(aBuffer.data(), valueSize); + + if ((reader.getTypeClass() != reader2.getTypeClass()) + || reader2.getTypeClass() == RT_TYPE_INVALID) + { +- rtl_freeMemory(pBuffer); +- + if (bReport) + { + fprintf(stdout, "ERROR: values of blop from key \"%s\" has different types.\n", +@@ -1073,22 +1057,17 @@ RegError ORegistry::checkBlop(OStoreStream& rValue, + { + mergeModuleValue(rValue, reader, reader2); + +- rtl_freeMemory(pBuffer); + return RegError::NO_ERROR; + } else + if (reader2.getFieldCount() > 0) + { +- rtl_freeMemory(pBuffer); + return RegError::NO_ERROR; + } else + { +- rtl_freeMemory(pBuffer); + return RegError::MERGE_CONFLICT; + } + } else + { +- rtl_freeMemory(pBuffer); +- + if (bReport) + { + fprintf(stderr, "WARNING: value of key \"%s\" already exists.\n", +@@ -1098,7 +1077,6 @@ RegError ORegistry::checkBlop(OStoreStream& rValue, + } + } else + { +- rtl_freeMemory(pBuffer); + if (bReport) + { + fprintf(stderr, "ERROR: values of key \"%s\" contains bad data.\n", +@@ -1108,7 +1086,6 @@ RegError ORegistry::checkBlop(OStoreStream& rValue, + } + } else + { +- rtl_freeMemory(pBuffer); + if (bReport) + { + fprintf(stderr, "ERROR: values of key \"%s\" has different types.\n", +@@ -1118,7 +1095,6 @@ RegError ORegistry::checkBlop(OStoreStream& rValue, + } + } else + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + } +@@ -1189,27 +1165,23 @@ RegError ORegistry::mergeModuleValue(OStoreStream& rTargetValue, + const sal_uInt8* pBlop = writer.getBlop(); + sal_uInt32 aBlopSize = writer.getBlopSize(); + +- sal_uInt8 type = (sal_uInt8)RegValueType::BINARY; +- sal_uInt8* pBuffer = static_cast(rtl_allocateMemory(VALUE_HEADERSIZE + aBlopSize)); ++ sal_uInt8 type = sal_uInt8(RegValueType::BINARY); ++ std::vector aBuffer(VALUE_HEADERSIZE + aBlopSize); + +- memcpy(pBuffer, &type, 1); +- writeUINT32(pBuffer+VALUE_TYPEOFFSET, aBlopSize); +- memcpy(pBuffer+VALUE_HEADEROFFSET, pBlop, aBlopSize); ++ memcpy(aBuffer.data(), &type, 1); ++ writeUINT32(aBuffer.data() + VALUE_TYPEOFFSET, aBlopSize); ++ memcpy(aBuffer.data() + VALUE_HEADEROFFSET, pBlop, aBlopSize); + + sal_uInt32 rwBytes; +- if (rTargetValue.writeAt(0, pBuffer, VALUE_HEADERSIZE+aBlopSize, rwBytes)) ++ if (rTargetValue.writeAt(0, aBuffer.data(), VALUE_HEADERSIZE+aBlopSize, rwBytes)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + + if (rwBytes != VALUE_HEADERSIZE+aBlopSize) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } +- +- rtl_freeMemory(pBuffer); + } + return RegError::NO_ERROR; + } +@@ -1325,7 +1297,6 @@ RegError ORegistry::dumpRegistry(RegKeyHandle hKey) const + RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_Int16 nSpc) const + { + OStoreStream rValue; +- sal_uInt8* pBuffer; + sal_uInt32 valueSize; + RegValueType valueType; + OUString sFullPath(sPath); +@@ -1348,33 +1319,29 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + return RegError::VALUE_NOT_EXISTS; + } + +- pBuffer = static_cast(rtl_allocateMemory(VALUE_HEADERSIZE)); ++ std::vector aBuffer(VALUE_HEADERSIZE); + + sal_uInt32 rwBytes; +- if (rValue.readAt(0, pBuffer, VALUE_HEADERSIZE, rwBytes)) ++ if (rValue.readAt(0, aBuffer.data(), VALUE_HEADERSIZE, rwBytes)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + if (rwBytes != (VALUE_HEADERSIZE)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + +- sal_uInt8 type = *pBuffer; +- valueType = (RegValueType)type; +- readUINT32(pBuffer+VALUE_TYPEOFFSET, valueSize); ++ sal_uInt8 type = aBuffer[0]; ++ valueType = static_cast(type); ++ readUINT32(aBuffer.data() + VALUE_TYPEOFFSET, valueSize); + +- pBuffer = static_cast(rtl_allocateMemory(valueSize)); +- if (rValue.readAt(VALUE_HEADEROFFSET, pBuffer, valueSize, rwBytes)) ++ aBuffer.resize(valueSize); ++ if (rValue.readAt(VALUE_HEADEROFFSET, aBuffer.data(), valueSize, rwBytes)) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + if (rwBytes != valueSize) + { +- rtl_freeMemory(pBuffer); + return RegError::INVALID_VALUE; + } + +@@ -1393,14 +1360,14 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + fprintf(stdout, "%s Data = ", indent); + + sal_Int32 value; +- readINT32(pBuffer, value); ++ readINT32(aBuffer.data(), value); + fprintf(stdout, "%ld\n", sal::static_int_cast< long >(value)); + } + break; + case RegValueType::STRING: + { + sal_Char* value = static_cast(rtl_allocateMemory(valueSize)); +- readUtf8(pBuffer, value, valueSize); ++ readUtf8(aBuffer.data(), value, valueSize); + fprintf(stdout, "%sValue: Type = RegValueType::STRING\n", indent); + fprintf( + stdout, "%s Size = %lu\n", indent, +@@ -1419,7 +1386,7 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + fprintf(stdout, "%s Data = ", indent); + + std::unique_ptr value(new sal_Unicode[size]); +- readString(pBuffer, value.get(), size); ++ readString(aBuffer.data(), value.get(), size); + + OString uStr = OUStringToOString(value.get(), RTL_TEXTENCODING_UTF8); + fprintf(stdout, "L\"%s\"\n", uStr.getStr()); +@@ -1433,7 +1400,7 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + sal::static_int_cast< unsigned long >(valueSize)); + fprintf(stdout, "%s Data = ", indent); + dumpType( +- typereg::Reader(pBuffer, valueSize), ++ typereg::Reader(aBuffer.data(), valueSize), + sIndent + " "); + } + break; +@@ -1442,7 +1409,7 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + sal_uInt32 offset = 4; // initial 4 bytes for the size of the array + sal_uInt32 len = 0; + +- readUINT32(pBuffer, len); ++ readUINT32(aBuffer.data(), len); + + fprintf(stdout, "%sValue: Type = RegValueType::LONGLIST\n", indent); + fprintf( +@@ -1456,7 +1423,7 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + sal_Int32 longValue; + for (sal_uInt32 i=0; i < len; i++) + { +- readINT32(pBuffer+offset, longValue); ++ readINT32(aBuffer.data() + offset, longValue); + + if (offset > 4) + fprintf(stdout, "%s ", indent); +@@ -1475,7 +1442,7 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + sal_uInt32 sLen = 0; + sal_uInt32 len = 0; + +- readUINT32(pBuffer, len); ++ readUINT32(aBuffer.data(), len); + + fprintf(stdout, "%sValue: Type = RegValueType::STRINGLIST\n", indent); + fprintf( +@@ -1488,12 +1455,12 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + + for (sal_uInt32 i=0; i < len; i++) + { +- readUINT32(pBuffer+offset, sLen); ++ readUINT32(aBuffer.data() + offset, sLen); + + offset += 4; // 4 bytes (sal_uInt32) for the string size + + sal_Char *pValue = static_cast(rtl_allocateMemory(sLen)); +- readUtf8(pBuffer+offset, pValue, sLen); ++ readUtf8(aBuffer.data() + offset, pValue, sLen); + + if (offset > 8) + fprintf(stdout, "%s ", indent); +@@ -1512,7 +1479,7 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + sal_uInt32 sLen = 0; + sal_uInt32 len = 0; + +- readUINT32(pBuffer, len); ++ readUINT32(aBuffer.data(), len); + + fprintf(stdout, "%sValue: Type = RegValueType::UNICODELIST\n", indent); + fprintf( +@@ -1526,12 +1493,12 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + OString uStr; + for (sal_uInt32 i=0; i < len; i++) + { +- readUINT32(pBuffer+offset, sLen); ++ readUINT32(aBuffer.data() + offset, sLen); + + offset += 4; // 4 bytes (sal_uInt32) for the string size + + sal_Unicode *pValue = static_cast(rtl_allocateMemory((sLen / 2) * sizeof(sal_Unicode))); +- readString(pBuffer+offset, pValue, sLen); ++ readString(aBuffer.data() + offset, pValue, sLen); + + if (offset > 8) + fprintf(stdout, "%s ", indent); +@@ -1552,7 +1519,6 @@ RegError ORegistry::dumpValue(const OUString& sPath, const OUString& sName, sal_ + + fprintf(stdout, "\n"); + +- rtl_freeMemory(pBuffer); + return RegError::NO_ERROR; + } + +diff --git a/sal/osl/unx/file.cxx b/sal/osl/unx/file.cxx +index de36b3d26a9c..d2b59dfb2851 100644 +--- a/sal/osl/unx/file.cxx ++++ b/sal/osl/unx/file.cxx +@@ -1148,10 +1148,10 @@ const off_t MAX_OFF_T = std::numeric_limits< off_t >::max(); + + namespace { + +-//coverity[result_independent_of_operands] ++// coverity[result_independent_of_operands] - crossplatform requirement + template bool exceedsMaxOffT(T n) { return n > MAX_OFF_T; } + +-//coverity[result_independent_of_operands] ++// coverity[result_independent_of_operands] - crossplatform requirement + template bool exceedsMinOffT(T n) + { return n < std::numeric_limits::min(); } + +diff --git a/sal/osl/unx/pipe.cxx b/sal/osl/unx/pipe.cxx +index e577e89608ba..aae01fd36439 100644 +--- a/sal/osl/unx/pipe.cxx ++++ b/sal/osl/unx/pipe.cxx +@@ -287,10 +287,11 @@ oslPipe SAL_CALL osl_psz_createPipe(const sal_Char *pszPipeName, oslPipeOptions + if (listen(pPipe->m_Socket, 5) < 0) + { + SAL_WARN("sal.osl.pipe", "listen() failed: " << strerror(errno)); +- // coverity[toctou] cid#1255391 warns about unlink(name) after +- // stat(name, &status) above, but the intervening call to bind makes +- // those two clearly unrelated, as it would fail if name existed at +- // that point in time: ++ // cid#1255391 warns about unlink(name) after stat(name, &status) ++ // above, but the intervening call to bind makes those two clearly ++ // unrelated, as it would fail if name existed at that point in ++ // time: ++ // coverity[toctou] - this is bogus + unlink(name); /* remove filesystem entry */ + close(pPipe->m_Socket); + destroyPipeImpl(pPipe); +diff --git a/sal/osl/unx/profile.cxx b/sal/osl/unx/profile.cxx +index a3d029e94da2..0671a80d264d 100644 +--- a/sal/osl/unx/profile.cxx ++++ b/sal/osl/unx/profile.cxx +@@ -181,6 +181,7 @@ static oslProfile SAL_CALL osl_psz_openProfile(const sal_Char *pszProfileName, o + if (pProfile->m_pFile == nullptr) + closeFileImpl(pFile,pProfile->m_Flags); + ++ // coverity[leaked_storage] - pFile is not leaked + return pProfile; + } + +diff --git a/sal/osl/w32/file.cxx b/sal/osl/w32/file.cxx +index 7c0b6674c23f..106e160f894e 100644 +--- a/sal/osl/w32/file.cxx ++++ b/sal/osl/w32/file.cxx +@@ -776,7 +776,7 @@ oslFileError SAL_CALL osl_closeFile(oslFileHandle Handle) + + namespace { + +-//coverity[result_independent_of_operands] ++// coverity[result_independent_of_operands] - crossplatform requirement + template bool exceedsMaxSIZE_T(T n) + { return n > std::numeric_limits< SIZE_T >::max(); } + +@@ -930,7 +930,7 @@ LONGLONG const g_limit_longlong = std::numeric_limits< LONGLONG >::max(); + + namespace { + +-//coverity[result_independent_of_operands] ++// coverity[result_independent_of_operands] - crossplatform requirement + template bool exceedsMaxLONGLONG(T n) + { return n > g_limit_longlong; } + +diff --git a/sal/rtl/alloc_arena.cxx b/sal/rtl/alloc_arena.cxx +index 373de6d51ad9..4967fac93293 100644 +--- a/sal/rtl/alloc_arena.cxx ++++ b/sal/rtl/alloc_arena.cxx +@@ -258,7 +258,7 @@ void rtl_arena_hash_rescale( + rtl_arena_segment_type * next = curr->m_fnext; + rtl_arena_segment_type ** head; + +- // coverity[negative_shift] ++ // coverity[negative_shift] - bogus + head = &(arena->m_hash_table[RTL_ARENA_HASH_INDEX(arena, curr->m_addr)]); + curr->m_fnext = (*head); + (*head) = curr; +diff --git a/sal/rtl/alloc_cache.cxx b/sal/rtl/alloc_cache.cxx +index 091a5bf774ee..6ffc506e2a6e 100644 +--- a/sal/rtl/alloc_cache.cxx ++++ b/sal/rtl/alloc_cache.cxx +@@ -829,7 +829,7 @@ void rtl_cache_deactivate(rtl_cache_type * cache) + /* cleanup cpu layer */ + if ((mag = cache->m_cpu_curr)) + { +- // coverity[missing_lock] ++ // coverity[missing_lock] - locking is fine + cache->m_cpu_curr = nullptr; + rtl_cache_magazine_clear (cache, mag); + rtl_cache_free (mag_cache, mag); +@@ -837,7 +837,7 @@ void rtl_cache_deactivate(rtl_cache_type * cache) + + if ((mag = cache->m_cpu_prev)) + { +- // coverity[missing_lock] ++ // coverity[missing_lock] - locking is fine + cache->m_cpu_prev = nullptr; + rtl_cache_magazine_clear (cache, mag); + rtl_cache_free (mag_cache, mag); +@@ -1279,7 +1279,7 @@ static void rtl_cache_depot_wsupdate( + RTL_MEMORY_LOCK_ACQUIRE(&(cache->m_depot_lock)); + } + } +- // coverity[missing_unlock] ++ // coverity[missing_unlock] - locking is fine + } + + /** +diff --git a/sc/inc/dpobject.hxx b/sc/inc/dpobject.hxx +index 39299c79ab26..814ad49e86c3 100644 +--- a/sc/inc/dpobject.hxx ++++ b/sc/inc/dpobject.hxx +@@ -391,7 +391,7 @@ public: + OUString CreateNewName() const; + + void FreeTable(const ScDPObject* pDPObj); +- SC_DLLPUBLIC bool InsertNewTable(ScDPObject* pDPObj); ++ SC_DLLPUBLIC void InsertNewTable(ScDPObject* pDPObj); + SC_DLLPUBLIC bool HasTable(const ScDPObject* pDPObj) const; + + SC_DLLPUBLIC SheetCaches& GetSheetCaches(); +diff --git a/sc/qa/unit/ucalc_pivottable.cxx b/sc/qa/unit/ucalc_pivottable.cxx +index 404de5d06c14..dbf991387fef 100644 +--- a/sc/qa/unit/ucalc_pivottable.cxx ++++ b/sc/qa/unit/ucalc_pivottable.cxx +@@ -221,8 +221,7 @@ void Test::testPivotTable() + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -247,7 +246,7 @@ void Test::testPivotTable() + { "Total Result", "50", "57", "23", "130" } + }; + +- bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); ++ bool bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be only one data cache.", size_t(1), pDPs->GetSheetCaches().size()); +@@ -285,7 +284,7 @@ void Test::testPivotTable() + { "Total Result", "50", "57", "23", "130" } + }; + +- bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (from old cache)"); ++ bool bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (from old cache)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -322,7 +321,7 @@ void Test::testPivotTable() + { "Total Result", "300", "700", "1100", "2100" } + }; + +- bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (refreshed)"); ++ bool bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (refreshed)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -351,8 +350,7 @@ void Test::testPivotTable() + + pDPObj = createDPFromRange( + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, false); +- bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -402,8 +400,7 @@ void Test::testPivotTableLabels() + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -418,7 +415,7 @@ void Test::testPivotTableLabels() + { "Total Result", "30", "20", "45", "95" } + }; + +- bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); ++ bool bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -458,8 +455,7 @@ void Test::testPivotTableDateLabels() + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -476,7 +472,7 @@ void Test::testPivotTableDateLabels() + { "Total Result", "30", "20", "45", "95" } + }; + +- bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); ++ bool bSuccess = checkDPTableOutput<5>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -541,8 +537,7 @@ void Test::testPivotTableFilters() + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, true); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -559,7 +554,7 @@ void Test::testPivotTableFilters() + { "Sum - Val2", "80" } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (unfiltered)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (unfiltered)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -593,7 +588,7 @@ void Test::testPivotTableFilters() + { "Sum - Val2", "40" } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by page)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by page)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -622,7 +617,7 @@ void Test::testPivotTableFilters() + { "Sum - Val2", "20" } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by query)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by query)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -645,7 +640,7 @@ void Test::testPivotTableFilters() + { "Sum - Val2", "40" } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by page)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output (filtered by page)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -701,8 +696,7 @@ void Test::testPivotTableNamedSource() + CPPUNIT_ASSERT_MESSAGE("Failed to create a new pivot table object.", pDPObj); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -977,9 +971,7 @@ void Test::testPivotTableDuplicateDataFields() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -997,7 +989,7 @@ void Test::testPivotTableDuplicateDataFields() + { "Total Count - Value", nullptr, "10" }, + }; + +- bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); ++ bool bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1021,7 +1013,7 @@ void Test::testPivotTableDuplicateDataFields() + { "Total Result", "411", "10" } + }; + +- bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); ++ bool bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1070,9 +1062,7 @@ void Test::testPivotTableNormalGrouping() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1092,7 +1082,7 @@ void Test::testPivotTableNormalGrouping() + { "Total Result", "28" } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Initial output without grouping"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Initial output without grouping"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1140,7 +1130,7 @@ void Test::testPivotTableNormalGrouping() + { "Total Result", nullptr, "28" } + }; + +- bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "A, B, C grouped by Group1."); ++ bool bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "A, B, C grouped by Group1."); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1177,7 +1167,7 @@ void Test::testPivotTableNormalGrouping() + { "Total Result", nullptr, "28" } + }; + +- bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "D, E, F grouped by Group2."); ++ bool bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "D, E, F grouped by Group2."); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1232,9 +1222,7 @@ void Test::testPivotTableNumberGrouping() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1272,7 +1260,7 @@ void Test::testPivotTableNumberGrouping() + { "Total Result", "1389" } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Order grouped by numbers"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Order grouped by numbers"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1317,9 +1305,7 @@ void Test::testPivotTableDateGrouping() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1389,7 +1375,7 @@ void Test::testPivotTableDateGrouping() + { "Total Result", nullptr, nullptr, "36" }, + }; + +- bSuccess = checkDPTableOutput<4>(m_pDoc, aOutRange, aOutputCheck, "Years, quarters and months date groups."); ++ bool bSuccess = checkDPTableOutput<4>(m_pDoc, aOutRange, aOutputCheck, "Years, quarters and months date groups."); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1417,7 +1403,7 @@ void Test::testPivotTableDateGrouping() + { "Total Result", nullptr, nullptr, "10" }, + }; + +- bSuccess = checkDPTableOutput<4>(m_pDoc, aOutRange, aOutputCheck, "Year 2012 data now hidden"); ++ bool bSuccess = checkDPTableOutput<4>(m_pDoc, aOutRange, aOutputCheck, "Year 2012 data now hidden"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1446,7 +1432,7 @@ void Test::testPivotTableDateGrouping() + { "Total Result", "36" } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Remove all date grouping."); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Remove all date grouping."); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1490,9 +1476,7 @@ void Test::testPivotTableEmptyRows() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1511,7 +1495,7 @@ void Test::testPivotTableEmptyRows() + { "Total Result", "10" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Include empty rows"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Include empty rows"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1533,7 +1517,7 @@ void Test::testPivotTableEmptyRows() + { "Total Result", "10" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Ignore empty rows"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Ignore empty rows"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1559,7 +1543,7 @@ void Test::testPivotTableEmptyRows() + { "Total Result", "10" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Ignore empty rows"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Ignore empty rows"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1617,9 +1601,7 @@ void Test::testPivotTableTextNumber() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1637,7 +1619,7 @@ void Test::testPivotTableTextNumber() + { "Total Result", "10" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Text number field members"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Text number field members"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1662,7 +1644,7 @@ void Test::testPivotTableTextNumber() + { "4", nullptr } + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Text number field members"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Text number field members"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1701,9 +1683,7 @@ void Test::testPivotTableCaseInsensitiveStrings() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1718,7 +1698,7 @@ void Test::testPivotTableCaseInsensitiveStrings() + { "Total Result", "3" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Case insensitive strings"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Case insensitive strings"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1792,9 +1772,7 @@ void Test::testPivotTableNumStability() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1864,9 +1842,7 @@ void Test::testPivotTableFieldReference() + m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -1884,7 +1860,7 @@ void Test::testPivotTableFieldReference() + { "Total Result", "15" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (none)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (none)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1911,7 +1887,7 @@ void Test::testPivotTableFieldReference() + { "Total Result", nullptr }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (difference from)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (difference from)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1931,7 +1907,7 @@ void Test::testPivotTableFieldReference() + { "Total Result", nullptr }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (% of)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (% of)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1951,7 +1927,7 @@ void Test::testPivotTableFieldReference() + { "Total Result", nullptr }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (% difference from)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (% difference from)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1971,7 +1947,7 @@ void Test::testPivotTableFieldReference() + { "Total Result", nullptr }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (Running total)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (Running total)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -1991,7 +1967,7 @@ void Test::testPivotTableFieldReference() + { "Total Result", "100.00%" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (% of column)"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Field reference (% of column)"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -2105,9 +2081,7 @@ void Test::testFuncGETPIVOTDATA() + } + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -2122,7 +2096,7 @@ void Test::testFuncGETPIVOTDATA() + { "Total Result", "21" }, + }; + +- bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Pivot table created for GETPIVOTDATA"); ++ bool bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Pivot table created for GETPIVOTDATA"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -2168,8 +2142,7 @@ void Test::testFuncGETPIVOTDATA() + pDPObj = createDPFromRange(m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + } + +- bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("InsertNewTable failed", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + aOutRange = refresh(pDPObj); + + { +@@ -2184,7 +2157,7 @@ void Test::testFuncGETPIVOTDATA() + { "Total Count - Value", nullptr, "6" }, + }; + +- bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "Pivot table refreshed"); ++ bool bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "Pivot table refreshed"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -2264,9 +2237,7 @@ void Test::testFuncGETPIVOTDATALeafAccess() + pDPObj = createDPFromRange(m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -2283,7 +2254,7 @@ void Test::testFuncGETPIVOTDATALeafAccess() + { "Total Result", nullptr, "10" }, + }; + +- bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "Pivot table refreshed"); ++ bool bSuccess = checkDPTableOutput<3>(m_pDoc, aOutRange, aOutputCheck, "Pivot table refreshed"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -2361,8 +2332,7 @@ void Test::testPivotTableRepeatItemLabels() + m_pDoc, ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0), aFields, nFieldCount, false); + + ScDPCollection* pDPs = m_pDoc->GetDPCollection(); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new datapilot object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", + size_t(1), pDPs->GetCount()); + pDPObj->SetName(pDPs->CreateNewName()); +@@ -2388,7 +2358,7 @@ void Test::testPivotTableRepeatItemLabels() + { "Total Result", nullptr, nullptr, "220" } + }; + +- bSuccess = checkDPTableOutput<4>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); ++ bool bSuccess = checkDPTableOutput<4>(m_pDoc, aOutRange, aOutputCheck, "DataPilot table output"); + CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess); + } + +@@ -2442,15 +2412,13 @@ void Test::testPivotTableDPCollection() + + // Add 2 DP objects + ScDPObject* pDPObj = createDPFromRange(m_pDoc, aDataRange , aFields, nFieldCount, false); +- bool bSuccess = pDPs->InsertNewTable(pDPObj); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new DP object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj); + pDPObj->SetName("DP1"); // set custom name + + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be only one data pilot table.", size_t(1), pDPs->GetCount()); + + ScDPObject* pDPObj2 = createDPFromRange(m_pDoc, aDataRange, aFields, nFieldCount, false); +- bSuccess = pDPs->InsertNewTable(pDPObj2); +- CPPUNIT_ASSERT_MESSAGE("failed to insert a new DP object into document", bSuccess); ++ pDPs->InsertNewTable(pDPObj2); + pDPObj2->SetName("DP2"); // set custom name + + CPPUNIT_ASSERT_EQUAL_MESSAGE("there should be two DP tables", size_t(2), pDPs->GetCount()); +diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx +index f86a608b156e..1cc9cf20f2ec 100644 +--- a/sc/source/core/data/dpobject.cxx ++++ b/sc/source/core/data/dpobject.cxx +@@ -3797,7 +3797,7 @@ void ScDPCollection::FreeTable(const ScDPObject* pDPObject) + maTables.erase(std::remove_if(maTables.begin(), maTables.end(), funcRemoveCondition), maTables.end()); + } + +-bool ScDPCollection::InsertNewTable(ScDPObject* pDPObj) ++void ScDPCollection::InsertNewTable(ScDPObject* pDPObj) + { + const ScRange& rOutRange = pDPObj->GetOutRange(); + const ScAddress& s = rOutRange.aStart; +@@ -3805,7 +3805,6 @@ bool ScDPCollection::InsertNewTable(ScDPObject* pDPObj) + mpDoc->ApplyFlagsTab(s.Col(), s.Row(), e.Col(), e.Row(), s.Tab(), ScMF::DpTable); + + maTables.push_back(std::unique_ptr(pDPObj)); +- return true; + } + + bool ScDPCollection::HasTable(const ScDPObject* pDPObj) const +diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx +index 67fe8aee6c41..1e461fed1ff4 100644 +--- a/sc/source/core/tool/chgtrack.cxx ++++ b/sc/source/core/tool/chgtrack.cxx +@@ -339,8 +339,11 @@ bool ScChangeAction::IsDeletedIn( const ScChangeAction* p ) const + void ScChangeAction::RemoveAllDeletedIn() + { + //TODO: Not from TopContent, but really this one +- while ( pLinkDeletedIn ) +- delete pLinkDeletedIn; // Moves up by itself ++ while (pLinkDeletedIn) ++ { ++ // coverity[use_after_free] - Moves up by itself ++ delete pLinkDeletedIn; ++ } + } + + bool ScChangeAction::IsDeletedInDelType( ScChangeActionType eDelType ) const +@@ -399,8 +402,11 @@ void ScChangeAction::SetDeletedIn( ScChangeAction* p ) + + void ScChangeAction::RemoveAllDependent() + { +- while ( pLinkDependent ) +- delete pLinkDependent; // Moves up by itself ++ while (pLinkDependent) ++ { ++ // coverity[use_after_free] - Moves up by itself ++ delete pLinkDependent; ++ } + } + + DateTime ScChangeAction::GetDateTime() const +@@ -828,8 +834,11 @@ ScChangeActionDel::ScChangeActionDel( + ScChangeActionDel::~ScChangeActionDel() + { + DeleteCellEntries(); +- while ( pLinkMove ) ++ while (pLinkMove) ++ { ++ // coverity[use_after_free] - Moves up by itself + delete pLinkMove; ++ } + } + + void ScChangeActionDel::AddContent( ScChangeActionContent* pContent ) +@@ -1054,6 +1063,7 @@ void ScChangeActionDel::UndoCutOffMoves() + { // Restore cut off Moves; delete Entries/Links + while ( pLinkMove ) + { ++ // coverity[deref_arg] - the call on delete pLinkMove at the block end Moves a new entry into pLinkMode by itself + ScChangeActionMove* pMove = pLinkMove->GetMove(); + short nFrom = pLinkMove->GetCutOffFrom(); + short nTo = pLinkMove->GetCutOffTo(); +diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx +index 9e9edb77dc7a..58e3bbb69976 100644 +--- a/sc/source/core/tool/compiler.cxx ++++ b/sc/source/core/tool/compiler.cxx +@@ -5697,6 +5697,7 @@ bool ScCompiler::HandleTableRef() + default: + ; // nothing + } ++ // coverity[copy_paste_error] - this is correct, aStart in both aDBRange uses + if (aColRange.aStart.Row() != aDBRange.aStart.Row() || aColRange.aEnd.Row() != aDBRange.aStart.Row()) + aRange = ScRange( ScAddress::INITIALIZE_INVALID); + else +diff --git a/sc/source/filter/xml/xmldpimp.cxx b/sc/source/filter/xml/xmldpimp.cxx +index c6d3581ca7a3..27c8804f8961 100644 +--- a/sc/source/filter/xml/xmldpimp.cxx ++++ b/sc/source/filter/xml/xmldpimp.cxx +@@ -96,7 +96,7 @@ ScXMLDataPilotTableContext::ScXMLDataPilotTableContext( ScXMLImport& rImport, + const rtl::Reference& rAttrList ) : + ScXMLImportContext( rImport ), + pDoc(GetScImport().GetDocument()), +- pDPObject(nullptr), ++ pDPSave(new ScDPSaveData()), + pDPDimSaveData(nullptr), + sDataPilotTableName(), + sApplicationData(), +@@ -194,9 +194,6 @@ ScXMLDataPilotTableContext::ScXMLDataPilotTableContext( ScXMLImport& rImport, + } + } + } +- +- pDPObject = new ScDPObject(pDoc); +- pDPSave.reset(new ScDPSaveData()); + } + + ScXMLDataPilotTableContext::~ScXMLDataPilotTableContext() +@@ -322,7 +319,7 @@ ScDPOutputGeometry::FieldType toFieldType(sheet::DataPilotFieldOrientation nOrie + + } + +-void ScXMLDataPilotTableContext::SetButtons() ++void ScXMLDataPilotTableContext::SetButtons(ScDPObject* pDPObject) + { + ScDPOutputGeometry aGeometry(aTargetRangeAddress, bShowFilter); + aGeometry.setColumnFieldCount(mnColFieldCount); +@@ -390,8 +387,7 @@ void ScXMLDataPilotTableContext::SetButtons() + } + } + +- if ( pDPObject ) +- pDPObject->RefreshAfterLoad(); ++ pDPObject->RefreshAfterLoad(); + } + + void ScXMLDataPilotTableContext::SetSelectedPage( const OUString& rDimName, const OUString& rSelected ) +@@ -455,6 +451,7 @@ void SAL_CALL ScXMLDataPilotTableContext::endFastElement( sal_Int32 /*nElement*/ + if (!bTargetRangeAddress) + return; + ++ ScDPObject* pDPObject(new ScDPObject(pDoc)); + pDPObject->SetName(sDataPilotTableName); + pDPObject->SetTag(sApplicationData); + pDPObject->SetOutRange(aTargetRangeAddress); +@@ -540,13 +537,9 @@ void SAL_CALL ScXMLDataPilotTableContext::endFastElement( sal_Int32 /*nElement*/ + if ( pDPCollection->GetByName(pDPObject->GetName()) ) + pDPObject->SetName( OUString() ); // ignore the invalid name, create a new name in AfterXMLLoading + +- if (!pDPCollection->InsertNewTable(pDPObject)) +- { +- OSL_FAIL("cannot insert DPObject"); +- DELETEZ( pDPObject ); +- } ++ pDPCollection->InsertNewTable(pDPObject); + +- SetButtons(); ++ SetButtons(pDPObject); + } + + void ScXMLDataPilotTableContext::SetGrandTotal( +diff --git a/sc/source/filter/xml/xmldpimp.hxx b/sc/source/filter/xml/xmldpimp.hxx +index 9cc139e0f08f..3c9ff0911ce8 100644 +--- a/sc/source/filter/xml/xmldpimp.hxx ++++ b/sc/source/filter/xml/xmldpimp.hxx +@@ -71,7 +71,6 @@ class ScXMLDataPilotTableContext : public ScXMLImportContext + GrandTotalItem(); + }; + ScDocument* pDoc; +- ScDPObject* pDPObject; + std::unique_ptr pDPSave; + std::unique_ptr pDPDimSaveData; + GrandTotalItem maRowGrandTotal; +@@ -139,7 +138,7 @@ public: + void AddDimension(ScDPSaveDimension* pDim); + void AddGroupDim(const ScDPSaveNumGroupDimension& aNumGroupDim); + void AddGroupDim(const ScDPSaveGroupDimension& aGroupDim); +- void SetButtons(); ++ void SetButtons(ScDPObject* pDPObject); + void SetSelectedPage( const OUString& rDimName, const OUString& rSelected ); + }; + +diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx +index d518ff17c03a..ed6fa69b0d08 100644 +--- a/sc/source/ui/docshell/dbdocfun.cxx ++++ b/sc/source/ui/docshell/dbdocfun.cxx +@@ -1431,9 +1431,7 @@ bool ScDBDocFunc::CreatePivotTable(const ScDPObject& rDPObj, bool bRecord, bool + } + } + +- if (!rDoc.GetDPCollection()->InsertNewTable(pDestObj.release())) +- // Insertion into collection failed. +- return false; ++ rDoc.GetDPCollection()->InsertNewTable(pDestObj.release()); + + rDestObj.ReloadGroupTableData(); + rDestObj.SyncAllDimensionMembers(); +diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx +index b7a745a87d98..c84d38cc8c80 100644 +--- a/sc/source/ui/undo/undodat.cxx ++++ b/sc/source/ui/undo/undodat.cxx +@@ -1442,11 +1442,7 @@ void ScUndoDataPilot::Undo() + // re-insert deleted object + + ScDPObject* pDestObj = new ScDPObject(*xOldDPObject); +- if ( !rDoc.GetDPCollection()->InsertNewTable(pDestObj) ) +- { +- OSL_FAIL("cannot insert DPObject"); +- DELETEZ( pDestObj ); +- } ++ rDoc.GetDPCollection()->InsertNewTable(pDestObj); + } + + if (xNewUndoDoc) +diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx +index e28704470b4e..8564c988336e 100644 +--- a/sc/source/ui/view/viewdata.cxx ++++ b/sc/source/ui/view/viewdata.cxx +@@ -176,6 +176,7 @@ ScPositionHelper::getNearestByIndex(index_type nIndex) const + } + + auto posLB = std::prev(posUB); ++ // coverity[copy_paste_error] - posUB is correct + if (posUB == mData.end()) + { + return *posLB; +@@ -206,6 +207,7 @@ ScPositionHelper::getNearestByPosition(long nPos) const + } + + auto posLB = std::prev(posUB); ++ // coverity[copy_paste_error] - posUB is correct + if (posUB == mData.end()) + { + return *posLB; +diff --git a/sd/source/ui/animations/CustomAnimationPane.cxx b/sd/source/ui/animations/CustomAnimationPane.cxx +index c00aedf6c607..14bc19266ed2 100644 +--- a/sd/source/ui/animations/CustomAnimationPane.cxx ++++ b/sd/source/ui/animations/CustomAnimationPane.cxx +@@ -2312,6 +2312,7 @@ void CustomAnimationPane::moveSelection( bool bUp ) + CustomAnimationEffectPtr pEffect = (*aIter++); + + EffectSequence::iterator aUpEffectPos( pSequence->find( pEffect ) ); ++ // coverity[copy_paste_error] - this is correct, checking if it exists + if( aUpEffectPos != rEffectSequence.end() ) + { + EffectSequence::iterator aInsertPos( rEffectSequence.erase( aUpEffectPos ) ); +@@ -2342,6 +2343,7 @@ void CustomAnimationPane::moveSelection( bool bUp ) + CustomAnimationEffectPtr pEffect = (*aIter++); + + EffectSequence::iterator aDownEffectPos( pSequence->find( pEffect ) ); ++ // coverity[copy_paste_error] - this is correct, checking if it exists + if( aDownEffectPos != rEffectSequence.end() ) + { + EffectSequence::iterator aInsertPos( rEffectSequence.erase( aDownEffectPos ) ); +diff --git a/sd/source/ui/unoidl/unosrch.cxx b/sd/source/ui/unoidl/unosrch.cxx +index a254bbe4a8b6..737710bcf4b2 100644 +--- a/sd/source/ui/unoidl/unosrch.cxx ++++ b/sd/source/ui/unoidl/unosrch.cxx +@@ -56,11 +56,10 @@ class SearchContext_impl + { + uno::Reference< drawing::XShapes > mxShapes; + sal_Int32 mnIndex; +- SearchContext_impl* mpParent; + + public: +- SearchContext_impl( uno::Reference< drawing::XShapes > const & xShapes, SearchContext_impl* pParent = nullptr ) +- : mxShapes( xShapes ), mnIndex( -1 ), mpParent( pParent ) {} ++ SearchContext_impl(uno::Reference const& xShapes) ++ : mxShapes( xShapes ), mnIndex( -1 ) {} + + uno::Reference< drawing::XShape > firstShape() + { +@@ -78,8 +77,6 @@ public: + } + return xShape; + } +- +- SearchContext_impl* getParent() const { return mpParent; } + }; + + /* ================================================================= */ +@@ -113,7 +110,7 @@ sal_Int32 SAL_CALL SdUnoSearchReplaceShape::replaceAll( const uno::Reference< ut + uno::Reference< drawing::XShapes > xShapes; + uno::Reference< drawing::XShape > xShape; + +- SearchContext_impl* pContext = nullptr; ++ std::vector aContexts; + if(mpPage) + { + uno::Reference< drawing::XDrawPage > xPage( mpPage ); +@@ -122,8 +119,8 @@ sal_Int32 SAL_CALL SdUnoSearchReplaceShape::replaceAll( const uno::Reference< ut + + if( xShapes.is() && (xShapes->getCount() > 0) ) + { +- pContext = new SearchContext_impl( xShapes ); +- xShape = pContext->firstShape(); ++ aContexts.push_back(SearchContext_impl(xShapes)); ++ xShape = aContexts.back().firstShape(); + } + else + { +@@ -154,34 +151,24 @@ sal_Int32 SAL_CALL SdUnoSearchReplaceShape::replaceAll( const uno::Reference< ut + uno::Reference< drawing::XShapes > xGroupShape( xShape, uno::UNO_QUERY ); + if( xGroupShape.is() && ( xGroupShape->getCount() > 0 ) ) + { +- pContext = new SearchContext_impl( xGroupShape, pContext ); +- xShape = pContext->firstShape(); ++ aContexts.push_back(SearchContext_impl(xGroupShape)); ++ xShape = aContexts.back().firstShape(); + } + else + { +- if( pContext ) +- xShape = pContext->nextShape(); ++ if (!aContexts.empty()) ++ xShape = aContexts.back().nextShape(); + else + xShape = nullptr; + } + + // test parent contexts for next shape if none + // is found in the current context +- while( pContext && !xShape.is() ) ++ while (!aContexts.empty() && !xShape.is()) + { +- if( pContext->getParent() ) +- { +- SearchContext_impl* pOldContext = pContext; +- pContext = pContext->getParent(); +- delete pOldContext; +- xShape = pContext->nextShape(); +- } +- else +- { +- delete pContext; +- pContext = nullptr; +- xShape = nullptr; +- } ++ aContexts.pop_back(); ++ if (!aContexts.empty()) ++ xShape = aContexts.back().nextShape(); + } + } + +@@ -210,7 +197,7 @@ uno::Reference< css::container::XIndexAccess > SAL_CALL SdUnoSearchReplaceShape: + uno::Reference< drawing::XShapes > xShapes; + uno::Reference< drawing::XShape > xShape; + +- SearchContext_impl* pContext = nullptr; ++ std::vector aContexts; + if(mpPage) + { + uno::Reference< drawing::XDrawPage > xPage( mpPage ); +@@ -218,8 +205,8 @@ uno::Reference< css::container::XIndexAccess > SAL_CALL SdUnoSearchReplaceShape: + + if( xShapes.is() && xShapes->getCount() > 0 ) + { +- pContext = new SearchContext_impl( xShapes ); +- xShape = pContext->firstShape(); ++ aContexts.push_back(SearchContext_impl(xShapes)); ++ xShape = aContexts.back().firstShape(); + } + else + { +@@ -259,34 +246,24 @@ uno::Reference< css::container::XIndexAccess > SAL_CALL SdUnoSearchReplaceShape: + + if( xGroupShape.is() && xGroupShape->getCount() > 0 ) + { +- pContext = new SearchContext_impl( xGroupShape, pContext ); +- xShape = pContext->firstShape(); ++ aContexts.push_back(SearchContext_impl(xGroupShape)); ++ xShape = aContexts.back().firstShape(); + } + else + { +- if( pContext ) +- xShape = pContext->nextShape(); ++ if (!aContexts.empty()) ++ xShape = aContexts.back().nextShape(); + else + xShape = nullptr; + } + + // test parent contexts for next shape if none + // is found in the current context +- while( pContext && !xShape.is() ) ++ while (!aContexts.empty() && !xShape.is()) + { +- if( pContext->getParent() ) +- { +- SearchContext_impl* pOldContext = pContext; +- pContext = pContext->getParent(); +- delete pOldContext; +- xShape = pContext->nextShape(); +- } +- else +- { +- delete pContext; +- pContext = nullptr; +- xShape = nullptr; +- } ++ aContexts.pop_back(); ++ if (!aContexts.empty()) ++ xShape = aContexts.back().nextShape(); + } + } + +diff --git a/sfx2/source/control/itemdel.cxx b/sfx2/source/control/itemdel.cxx +index 9ee76fd6a2bb..806b0895f2a5 100644 +--- a/sfx2/source/control/itemdel.cxx ++++ b/sfx2/source/control/itemdel.cxx +@@ -77,7 +77,7 @@ void DeleteItemOnIdle(SfxPoolItem* pItem) + DBG_ASSERT( 0 == pItem->GetRefCount(), "deleting item in use" ); + SfxItemDisruptor_Impl *pDesruptor = new SfxItemDisruptor_Impl(pItem); + pDesruptor->LaunchDeleteOnIdle(); +- // coverity[leaked_storage] pDesruptor takes care of its own destruction at idle time ++ // coverity[leaked_storage] - pDesruptor takes care of its own destruction at idle time + } + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/solenv/bin/pack_images.py b/solenv/bin/pack_images.py +index 0f493c8f3035..384b61db8bc6 100755 +--- a/solenv/bin/pack_images.py ++++ b/solenv/bin/pack_images.py +@@ -512,7 +512,7 @@ def parse_image_list(imagelist_filenames): + + if line.startswith('%MODULE%'): + key = line.replace('%MODULE%/', '') +- if key in global_image_list: ++ if key in module_image_list: + module_image_list[key] += 1 + else: + module_image_list[key] = 0 +diff --git a/soltools/cpp/_unix.c b/soltools/cpp/_unix.c +index 7d15d57ed45a..2ee9215524a2 100644 +--- a/soltools/cpp/_unix.c ++++ b/soltools/cpp/_unix.c +@@ -204,6 +204,7 @@ void + error(FATAL, "Can't open output file %s", argv[optind + 1]); + + dup2(fdo, 1); ++ // coverity[leaked_handle] - on purpose + } + includelist[NINCLUDE - 1].always = 0; + includelist[NINCLUDE - 1].file = dp; +diff --git a/soltools/mkdepend/parse.c b/soltools/mkdepend/parse.c +index b538c87be22b..7f87ca7e3529 100644 +--- a/soltools/mkdepend/parse.c ++++ b/soltools/mkdepend/parse.c +@@ -158,6 +158,7 @@ int find_includes(struct filepointer *filep, struct inclist *file, struct inclis + break; + } + } ++ // coverity[leaked_storage] - on purpose + return -1; + } + +diff --git a/svtools/source/svhtml/htmlout.cxx b/svtools/source/svhtml/htmlout.cxx +index a4d030631398..4d3ff3006a73 100644 +--- a/svtools/source/svhtml/htmlout.cxx ++++ b/svtools/source/svhtml/htmlout.cxx +@@ -465,7 +465,7 @@ static OString lcl_ConvertCharToHTML( sal_uInt32 c, + // If the character could not be converted to the destination + // character set, the UNICODE character is exported as character + // entity. +- // coverity[callee_ptr_arith] ++ // coverity[callee_ptr_arith] - its ok + nLen = lcl_FlushContext(rContext, cBuffer, nFlags); + sal_Char *pBuffer = cBuffer; + while( nLen-- ) +diff --git a/svx/source/gengal/gengal.sh b/svx/source/gengal/gengal.sh +index b4d10458650a..5f644c6702bb 100755 +--- a/svx/source/gengal/gengal.sh ++++ b/svx/source/gengal/gengal.sh +@@ -55,8 +55,6 @@ for arg in "$@" + do + case "$arg" in + -env:*) BOOTSTRAPVARS=$BOOTSTRAPVARS" ""$arg";; +- -v) VERBOSE=true;; +- --verbose) VERBOSE=true;; + esac + done + +diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx +index e762ab1f5842..68850b179d3f 100644 +--- a/sw/source/core/text/itrform2.cxx ++++ b/sw/source/core/text/itrform2.cxx +@@ -722,6 +722,8 @@ void SwTextFormatter::BuildPortions( SwTextFormatInfo &rInf ) + + // Reinit the tab overflow flag after the line + rInf.SetTabOverflow( false ); ++ ++ // coverity[leaked_storage] - ownership is too complicated to hazard a fix, it definitely normally doesn't leak + } + + void SwTextFormatter::CalcAdjustLine( SwLineLayout *pCurrent ) +diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx +index bd3693404b76..934676e47033 100644 +--- a/sw/source/ui/index/cnttab.cxx ++++ b/sw/source/ui/index/cnttab.cxx +@@ -4047,8 +4047,9 @@ bool SwEntryBrowseBox::SaveModified() + pController = m_xCheckController.get(); + bVal = static_cast< ::svt::CheckBoxCellController*>(pController)->GetCheckBox().IsChecked(); + } +- AutoMarkEntry* pEntry = (nRow >= m_Entries.size()) ? new AutoMarkEntry +- : m_Entries[nRow].get(); ++ const bool bAddEntry = nRow >= m_Entries.size(); ++ std::unique_ptr xNewEntry(bAddEntry ? new AutoMarkEntry : nullptr); ++ AutoMarkEntry* pEntry = bAddEntry ? xNewEntry.get() : m_Entries[nRow].get(); + switch(nCol) + { + case ITEM_SEARCH : pEntry->sSearch = sNew; break; +@@ -4059,9 +4060,9 @@ bool SwEntryBrowseBox::SaveModified() + case ITEM_CASE : pEntry->bCase = bVal; break; + case ITEM_WORDONLY : pEntry->bWord = bVal; break; + } +- if (nRow >= m_Entries.size()) ++ if (bAddEntry) + { +- m_Entries.push_back(std::unique_ptr(pEntry)); ++ m_Entries.push_back(std::move(xNewEntry)); + RowInserted(nRow, 1, true, true); + if(nCol < ITEM_WORDONLY) + { +diff --git a/unoidl/source/legacyprovider.cxx b/unoidl/source/legacyprovider.cxx +index a7eb47fc7a88..eb9462c733f2 100644 +--- a/unoidl/source/legacyprovider.cxx ++++ b/unoidl/source/legacyprovider.cxx +@@ -259,9 +259,9 @@ rtl::Reference< Entity > readEntity( + { + sal_uInt16 m + = reader.getMethodExceptionCount(k); +- // coverity[tainted_data] cid#1213376 +- // unhelpfully warns about an untrusted loop +- // bound here: ++ // cid#1213376 unhelpfully warns about an ++ // untrusted loop bound here: ++ // coverity[tainted_data] - trusted data source + for (sal_uInt16 l = 0; l != m; ++l) { + getExcs.push_back( + reader.getMethodExceptionTypeName(k, l). +@@ -273,9 +273,9 @@ rtl::Reference< Entity > readEntity( + { + sal_uInt16 m + = reader.getMethodExceptionCount(k); +- // coverity[tainted_data] cid#1213376 +- // unhelpfully warns about an untrusted loop +- // bound here: ++ // cid#1213376 unhelpfully warns about an ++ // untrusted loop bound here: ++ // coverity[tainted_data] - trusted data source + for (sal_uInt16 l = 0; l != m; ++l) { + setExcs.push_back( + reader.getMethodExceptionTypeName(k, l). +@@ -309,8 +309,9 @@ rtl::Reference< Entity > readEntity( + std::vector< InterfaceTypeEntity::Method::Parameter > + params; + sal_uInt16 m = reader.getMethodParameterCount(j); +- // coverity[tainted_data] cid#1213376 unhelpfully warns +- // about an untrusted loop bound here: ++ // cid#1213376 unhelpfully warns about an untrusted loop ++ // bound here: ++ // coverity[tainted_data] - trusted data source + for (sal_uInt16 k = 0; k != m; ++k) { + RTParamMode mode = reader.getMethodParameterFlags(j, k); + InterfaceTypeEntity::Method::Parameter::Direction dir; +@@ -342,8 +343,9 @@ rtl::Reference< Entity > readEntity( + } + std::vector< OUString > excs; + m = reader.getMethodExceptionCount(j); +- // coverity[tainted_data] cid#1213376 unhelpfully warns +- // about an untrusted loop bound here: ++ // cid#1213376 unhelpfully warns about an untrusted loop ++ // bound here: ++ // coverity[tainted_data] - trusted data source + for (sal_uInt16 k = 0; k != m; ++k) { + excs.push_back( + reader.getMethodExceptionTypeName(j, k).replace( +@@ -607,8 +609,9 @@ rtl::Reference< Entity > readEntity( + SingleInterfaceBasedServiceEntity::Constructor:: + Parameter > params; + sal_uInt16 m = reader.getMethodParameterCount(j); +- // coverity[tainted_data] cid#1213376 unhelpfully warns +- // about an untrusted loop bound here: ++ // cid#1213376 unhelpfully warns about an untrusted ++ // loop bound here: ++ // coverity[tainted_data] - trusted data source + for (sal_uInt16 k = 0; k != m; ++k) { + RTParamMode mode + = reader.getMethodParameterFlags(j, k); +@@ -647,8 +650,9 @@ rtl::Reference< Entity > readEntity( + } + std::vector< OUString > excs; + m = reader.getMethodExceptionCount(j); +- // coverity[tainted_data] cid#1213376 unhelpfully warns +- // about an untrusted loop bound here: ++ // cid#1213376 unhelpfully warns about an untrusted ++ // loop bound here: ++ // coverity[tainted_data] - trusted data source + for (sal_uInt16 k = 0; k != m; ++k) { + excs.push_back( + reader.getMethodExceptionTypeName(j, k).replace( +diff --git a/unotest/source/cpp/officeconnection.cxx b/unotest/source/cpp/officeconnection.cxx +index a82471e3b921..c85ad7b72e5f 100644 +--- a/unotest/source/cpp/officeconnection.cxx ++++ b/unotest/source/cpp/officeconnection.cxx +@@ -78,7 +78,7 @@ void OfficeConnection::setUp() { + { + envs = &argEnv.pData; + } +- // coverity[callee_ptr_arith] ++ // coverity[callee_ptr_arith] - arith is fine + CPPUNIT_ASSERT_EQUAL( + osl_Process_E_None, + osl_executeProcess( +diff --git a/vcl/source/bitmap/BitmapScaleConvolution.cxx b/vcl/source/bitmap/BitmapScaleConvolution.cxx +index 49aed5d5940b..a8b9bc4b2494 100644 +--- a/vcl/source/bitmap/BitmapScaleConvolution.cxx ++++ b/vcl/source/bitmap/BitmapScaleConvolution.cxx +@@ -36,9 +36,9 @@ void ImplCalculateContributions( + const long aSourceSize, + const long aDestinationSize, + long& aNumberOfContributions, +- double*& pWeights, +- long*& pPixels, +- long*& pCount, ++ std::vector& rWeights, ++ std::vector& rPixels, ++ std::vector& rCounts, + const Kernel& aKernel) + { + const double fSamplingRadius(aKernel.GetWidth()); +@@ -48,9 +48,9 @@ void ImplCalculateContributions( + + aNumberOfContributions = (long(fabs(ceil(fScaledRadius))) * 2) + 1; + const long nAllocSize(aDestinationSize * aNumberOfContributions); +- pWeights = new double[nAllocSize]; +- pPixels = new long[nAllocSize]; +- pCount = new long[aDestinationSize]; ++ rWeights.resize(nAllocSize); ++ rPixels.resize(nAllocSize); ++ rCounts.resize(aDestinationSize); + + for(long i(0); i < aDestinationSize; i++) + { +@@ -74,13 +74,13 @@ void ImplCalculateContributions( + const long aPixelIndex(MinMax(j, 0, aSourceSize - 1)); + const long nIndex(aIndex + aCurrentCount); + +- pWeights[nIndex] = aWeight; +- pPixels[nIndex] = aPixelIndex; ++ rWeights[nIndex] = aWeight; ++ rPixels[nIndex] = aPixelIndex; + + aCurrentCount++; + } + +- pCount[i] = aCurrentCount; ++ rCounts[i] = aCurrentCount; + } + } + +@@ -100,13 +100,13 @@ bool ImplScaleConvolutionHor(Bitmap& rSource, Bitmap& rTarget, const double& rSc + + if(pReadAcc) + { +- double* pWeights = nullptr; +- long* pPixels = nullptr; +- long* pCount = nullptr; ++ std::vector aWeights; ++ std::vector aPixels; ++ std::vector aCounts; + long aNumberOfContributions(0); + + const long nHeight(rSource.GetSizePixel().Height()); +- ImplCalculateContributions(nWidth, nNewWidth, aNumberOfContributions, pWeights, pPixels, pCount, aKernel); ++ ImplCalculateContributions(nWidth, nNewWidth, aNumberOfContributions, aWeights, aPixels, aCounts, aKernel); + rTarget = Bitmap(Size(nNewWidth, nHeight), 24); + Bitmap::ScopedWriteAccess pWriteAcc(rTarget); + bool bResult(nullptr != pWriteAcc); +@@ -123,21 +123,21 @@ bool ImplScaleConvolutionHor(Bitmap& rSource, Bitmap& rTarget, const double& rSc + double aValueGreen(0.0); + double aValueBlue(0.0); + +- for(long j(0); j < pCount[x]; j++) ++ for(long j(0); j < aCounts[x]; j++) + { + const long aIndex(aBaseIndex + j); +- const double aWeight(pWeights[aIndex]); ++ const double aWeight(aWeights[aIndex]); + BitmapColor aColor; + + aSum += aWeight; + + if(pReadAcc->HasPalette()) + { +- aColor = pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(y, pPixels[aIndex])); ++ aColor = pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(y, aPixels[aIndex])); + } + else + { +- aColor = pReadAcc->GetPixel(y, pPixels[aIndex]); ++ aColor = pReadAcc->GetPixel(y, aPixels[aIndex]); + } + + aValueRed += aWeight * aColor.GetRed(); +@@ -157,9 +157,9 @@ bool ImplScaleConvolutionHor(Bitmap& rSource, Bitmap& rTarget, const double& rSc + pWriteAcc.reset(); + } + +- delete[] pWeights; +- delete[] pCount; +- delete[] pPixels; ++ aWeights.clear(); ++ aCounts.clear(); ++ aPixels.clear(); + + if(bResult) + { +@@ -186,13 +186,13 @@ bool ImplScaleConvolutionVer(Bitmap& rSource, Bitmap& rTarget, const double& rSc + + if(pReadAcc) + { +- double* pWeights = nullptr; +- long* pPixels = nullptr; +- long* pCount = nullptr; ++ std::vector aWeights; ++ std::vector aPixels; ++ std::vector aCounts; + long aNumberOfContributions(0); + + const long nWidth(rSource.GetSizePixel().Width()); +- ImplCalculateContributions(nHeight, nNewHeight, aNumberOfContributions, pWeights, pPixels, pCount, aKernel); ++ ImplCalculateContributions(nHeight, nNewHeight, aNumberOfContributions, aWeights, aPixels, aCounts, aKernel); + rTarget = Bitmap(Size(nWidth, nNewHeight), 24); + Bitmap::ScopedWriteAccess pWriteAcc(rTarget); + bool bResult(nullptr != pWriteAcc); +@@ -209,21 +209,21 @@ bool ImplScaleConvolutionVer(Bitmap& rSource, Bitmap& rTarget, const double& rSc + double aValueGreen(0.0); + double aValueBlue(0.0); + +- for(long j(0); j < pCount[y]; j++) ++ for(long j(0); j < aCounts[y]; j++) + { + const long aIndex(aBaseIndex + j); +- const double aWeight(pWeights[aIndex]); ++ const double aWeight(aWeights[aIndex]); + BitmapColor aColor; + + aSum += aWeight; + + if(pReadAcc->HasPalette()) + { +- aColor = pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(pPixels[aIndex], x)); ++ aColor = pReadAcc->GetPaletteColor(pReadAcc->GetPixelIndex(aPixels[aIndex], x)); + } + else + { +- aColor = pReadAcc->GetPixel(pPixels[aIndex], x); ++ aColor = pReadAcc->GetPixel(aPixels[aIndex], x); + } + + aValueRed += aWeight * aColor.GetRed(); +@@ -248,9 +248,9 @@ bool ImplScaleConvolutionVer(Bitmap& rSource, Bitmap& rTarget, const double& rSc + } + } + +- delete[] pWeights; +- delete[] pCount; +- delete[] pPixels; ++ aWeights.clear(); ++ aCounts.clear(); ++ aPixels.clear(); + + if(bResult) + { +diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx +index b509f6059737..70225ce146c9 100644 +--- a/vcl/source/gdi/bitmap3.cxx ++++ b/vcl/source/gdi/bitmap3.cxx +@@ -2127,7 +2127,9 @@ bool Bitmap::Adjust( short nLuminancePercent, short nContrastPercent, + return bRet; + } + +-bool Bitmap::ImplConvolutionPass(Bitmap& aNewBitmap, BitmapReadAccess const * pReadAcc, int aNumberOfContributions, const double* pWeights, int const * pPixels, const int* pCount) ++bool Bitmap::ImplConvolutionPass(Bitmap& aNewBitmap, BitmapReadAccess const * pReadAcc, int aNumberOfContributions, ++ const std::vector& rWeights, const std::vector& rPixels, ++ const std::vector& rCounts) + { + if (!pReadAcc) + return false; +@@ -2153,12 +2155,12 @@ bool Bitmap::ImplConvolutionPass(Bitmap& aNewBitmap, BitmapReadAccess const * pR + aBaseIndex = nSourceX * aNumberOfContributions; + aSum = aValueRed = aValueGreen = aValueBlue = 0.0; + +- for (int j = 0; j < pCount[nSourceX]; ++j) ++ for (int j = 0; j < rCounts[nSourceX]; ++j) + { + aIndex = aBaseIndex + j; +- aSum += aWeight = pWeights[ aIndex ]; ++ aSum += aWeight = rWeights[ aIndex ]; + +- aColor = pReadAcc->GetColor(nSourceY, pPixels[aIndex]); ++ aColor = pReadAcc->GetColor(nSourceY, rPixels[aIndex]); + + aValueRed += aWeight * aColor.GetRed(); + aValueGreen += aWeight * aColor.GetGreen(); +diff --git a/vcl/source/gdi/bitmap4.cxx b/vcl/source/gdi/bitmap4.cxx +index d5e995770993..28bd9fab7f3f 100644 +--- a/vcl/source/gdi/bitmap4.cxx ++++ b/vcl/source/gdi/bitmap4.cxx +@@ -1042,10 +1042,10 @@ bool Bitmap::ImplPopArt() + return bRet; + } + +-double* MakeBlurKernel(const double radius, int& rows) { ++std::vector MakeBlurKernel(const double radius, int& rows) { + int intRadius = (int) radius + 1.0; + rows = intRadius * 2 + 1; +- double* matrix = new double[rows]; ++ std::vector matrix(rows); + + double sigma = radius / 3; + double radius2 = radius * radius; +@@ -1064,11 +1064,12 @@ double* MakeBlurKernel(const double radius, int& rows) { + } + + void Bitmap::ImplBlurContributions( const int aSize, const int aNumberOfContributions, +- const double* pBlurVector, double*& pWeights, int*& pPixels, int*& pCount ) ++ const std::vector& rBlurVector, ++ std::vector& rWeights, std::vector& rPixels, std::vector& rCounts) + { +- pWeights = new double[ aSize*aNumberOfContributions ]; +- pPixels = new int[ aSize*aNumberOfContributions ]; +- pCount = new int[ aSize ]; ++ rWeights.resize(aSize*aNumberOfContributions); ++ rPixels.resize(aSize*aNumberOfContributions); ++ rCounts.resize(aSize); + + int aLeft, aRight, aCurrentCount, aPixelIndex; + double aWeight; +@@ -1080,7 +1081,7 @@ void Bitmap::ImplBlurContributions( const int aSize, const int aNumberOfContribu + aCurrentCount = 0; + for ( int j = aLeft; j <= aRight; j++ ) + { +- aWeight = pBlurVector[aCurrentCount]; ++ aWeight = rBlurVector[aCurrentCount]; + + // Mirror edges + if (j < 0) +@@ -1102,12 +1103,12 @@ void Bitmap::ImplBlurContributions( const int aSize, const int aNumberOfContribu + aWeight = 0.0; + } + +- pWeights[ i*aNumberOfContributions + aCurrentCount ] = aWeight; +- pPixels[ i*aNumberOfContributions + aCurrentCount ] = aPixelIndex; ++ rWeights[ i*aNumberOfContributions + aCurrentCount ] = aWeight; ++ rPixels[ i*aNumberOfContributions + aCurrentCount ] = aPixelIndex; + + aCurrentCount++; + } +- pCount[ i ] = aCurrentCount; ++ rCounts[ i ] = aCurrentCount; + } + } + +@@ -1126,31 +1127,31 @@ bool Bitmap::ImplSeparableBlurFilter(const double radius) + + // Prepare Blur Vector + int aNumberOfContributions; +- double* pBlurVector = MakeBlurKernel(radius, aNumberOfContributions); ++ std::vector aBlurVector(MakeBlurKernel(radius, aNumberOfContributions)); + +- double* pWeights; +- int* pPixels; +- int* pCount; ++ std::vector aWeights; ++ std::vector aPixels; ++ std::vector aCounts; + + // Do horizontal filtering +- ImplBlurContributions( nWidth, aNumberOfContributions, pBlurVector, pWeights, pPixels, pCount); ++ ImplBlurContributions( nWidth, aNumberOfContributions, aBlurVector, aWeights, aPixels, aCounts); + + ScopedReadAccess pReadAcc(*this); + + // switch coordinates as convolution pass transposes result + Bitmap aNewBitmap( Size( nHeight, nWidth ), 24 ); + +- bool bResult = ImplConvolutionPass( aNewBitmap, pReadAcc.get(), aNumberOfContributions, pWeights, pPixels, pCount ); ++ bool bResult = ImplConvolutionPass( aNewBitmap, pReadAcc.get(), aNumberOfContributions, aWeights, aPixels, aCounts ); + + // Cleanup + pReadAcc.reset(); +- delete[] pWeights; +- delete[] pPixels; +- delete[] pCount; ++ aWeights.clear(); ++ aPixels.clear(); ++ aCounts.clear(); + + if ( !bResult ) + { +- delete[] pBlurVector; ++ aBlurVector.clear(); + return bResult; + } + +@@ -1158,18 +1159,18 @@ bool Bitmap::ImplSeparableBlurFilter(const double radius) + ImplAssignWithSize( aNewBitmap ); + + // Do vertical filtering +- ImplBlurContributions(nHeight, aNumberOfContributions, pBlurVector, pWeights, pPixels, pCount ); ++ ImplBlurContributions(nHeight, aNumberOfContributions, aBlurVector, aWeights, aPixels, aCounts ); + + pReadAcc = ScopedReadAccess(*this); + aNewBitmap = Bitmap( Size( nWidth, nHeight ), 24 ); +- bResult = ImplConvolutionPass( aNewBitmap, pReadAcc.get(), aNumberOfContributions, pWeights, pPixels, pCount ); ++ bResult = ImplConvolutionPass( aNewBitmap, pReadAcc.get(), aNumberOfContributions, aWeights, aPixels, aCounts ); + + // Cleanup + pReadAcc.reset(); +- delete[] pWeights; +- delete[] pCount; +- delete[] pPixels; +- delete[] pBlurVector; ++ aWeights.clear(); ++ aCounts.clear(); ++ aPixels.clear(); ++ aBlurVector.clear(); + + if ( !bResult ) + return bResult; +diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx +index 58711a9d862b..f6eea9242327 100644 +--- a/vcl/source/gdi/pdfwriter_impl.cxx ++++ b/vcl/source/gdi/pdfwriter_impl.cxx +@@ -6337,6 +6337,7 @@ void PDFWriterImpl::drawRelief( SalLayout& rLayout, const OUString& rText, bool + aTextLineColor = Color( COL_WHITE ); + if( aOverlineColor == COL_BLACK ) + aOverlineColor = Color( COL_WHITE ); ++ // coverity[copy_paste_error] - aReliefColor depending on aTextColor is correct + if( aTextColor == COL_WHITE ) + aReliefColor = Color( COL_BLACK ); + +diff --git a/vcl/unx/generic/plugadapt/salplug.cxx b/vcl/unx/generic/plugadapt/salplug.cxx +index a1195dbde18a..b89e7ea4832c 100644 +--- a/vcl/unx/generic/plugadapt/salplug.cxx ++++ b/vcl/unx/generic/plugadapt/salplug.cxx +@@ -127,6 +127,7 @@ static SalInstance* tryInstance( const OUString& rModuleBase, bool bForce = fals + SAL_INFO("vcl.plugadapt", "could not load shared object " << aModule); + } + ++ // coverity[leaked_storage] - this is on purpose + return pInst; + } + +diff --git a/wizards/com/sun/star/wizards/agenda/TopicsControl.py b/wizards/com/sun/star/wizards/agenda/TopicsControl.py +index cc42aa95552a..6ba529c1428f 100644 +--- a/wizards/com/sun/star/wizards/agenda/TopicsControl.py ++++ b/wizards/com/sun/star/wizards/agenda/TopicsControl.py +@@ -458,8 +458,9 @@ class TopicsControl(ControlScroller): + + def rowDown(self, guiRow=None, control=None): + try: +- if guiRow is None and control is None: ++ if guiRow is None: + guiRow = self.lastFocusRow - self.nscrollvalue ++ if control is None: + control = self.lastFocusControl + # only perform if this is not the last row. + actuallRow = guiRow + self.nscrollvalue +@@ -490,8 +491,9 @@ class TopicsControl(ControlScroller): + + def rowUp(self, guiRow=None, control=None): + try: +- if guiRow is None and control is None: ++ if guiRow is None: + guiRow = self.lastFocusRow - self.nscrollvalue ++ if control is None: + control = self.lastFocusControl + # only perform if this is not the first row + actuallRow = guiRow + self.nscrollvalue +diff --git a/wizards/com/sun/star/wizards/document/OfficeDocument.py b/wizards/com/sun/star/wizards/document/OfficeDocument.py +index 3886f1eb1c70..acef6139f737 100644 +--- a/wizards/com/sun/star/wizards/document/OfficeDocument.py ++++ b/wizards/com/sun/star/wizards/document/OfficeDocument.py +@@ -234,7 +234,6 @@ class OfficeDocument(object): + bState = False + + else: +- xComponent.dispose() + bState = True + + return bState +-- +2.17.1 + diff --git a/SOURCES/0001-disable-libe-book-support.patch b/SOURCES/0001-disable-libe-book-support.patch new file mode 100644 index 0000000..dfb95ea --- /dev/null +++ b/SOURCES/0001-disable-libe-book-support.patch @@ -0,0 +1,144 @@ +From 613af296887aede8f5b0fa6f94f7fb2781403ef2 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Thu, 21 Aug 2014 16:10:51 +0200 +Subject: [PATCH] disable libe-book support + +Change-Id: Ie915a9bd2acf7f3aeb8b0933252da33c17043bc4 +--- + configure.ac | 3 --- + external/Module_external.mk | 1 - + filter/Configuration_filter.mk | 8 -------- + writerperfect/Library_wpftwriter.mk | 2 -- + writerperfect/qa/unit/WpftFilterFixture.hxx | 3 --- + writerperfect/qa/unit/WpftWriterFilterTest.cxx | 5 ----- + writerperfect/source/writer/wpftwriter.component | 5 ----- + 7 files changed, 27 deletions(-) + +diff --git a/configure.ac b/configure.ac +index ac8dbc5..bb08d21 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -7696,9 +7696,6 @@ libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.5]) + + libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1]) + +-libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1]) +-libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2]) +- + libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1]) + + libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0]) +diff --git a/external/Module_external.mk b/external/Module_external.mk +index 590e216..8f19768 100644 +--- a/external/Module_external.mk ++++ b/external/Module_external.mk +@@ -32,7 +32,6 @@ $(eval $(call gb_Module_add_moduledirs,external,\ + $(call gb_Helper_optional,CPPUNIT,cppunit) \ + $(call gb_Helper_optional,CT2N,ct2n) \ + $(call gb_Helper_optional,CURL,curl) \ +- $(call gb_Helper_optional,EBOOK,libebook) \ + $(call gb_Helper_optional,EPM,epm) \ + $(call gb_Helper_optional,EPOXY,epoxy) \ + $(call gb_Helper_optional,EPUBGEN,libepubgen) \ +diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk +index 7b39020..588fa01 100644 +--- a/filter/Configuration_filter.mk ++++ b/filter/Configuration_filter.mk +@@ -346,10 +346,6 @@ $(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu + writer_OOXML \ + writer_OOXML_Template \ + writer_layout_dump_xml \ +- writer_BroadBand_eBook \ +- writer_FictionBook_2 \ +- writer_PalmDoc \ +- writer_Plucker_eBook \ + writer_ApplePages \ + MWAW_Text_Document \ + Palm_Text_Document \ +@@ -394,10 +390,6 @@ $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters + OOXML_Text \ + OOXML_Text_Template \ + writer_layout_dump \ +- BroadBand_eBook \ +- FictionBook_2 \ +- PalmDoc \ +- Plucker_eBook \ + ApplePages \ + MWAW_Text_Document \ + Palm_Text_Document \ +diff --git a/writerperfect/Library_wpftwriter.mk b/writerperfect/Library_wpftwriter.mk +index bf605e7..54a702e 100644 +--- a/writerperfect/Library_wpftwriter.mk ++++ b/writerperfect/Library_wpftwriter.mk +@@ -48,7 +48,6 @@ $(eval $(call gb_Library_use_libraries,wpftwriter,\ + $(eval $(call gb_Library_use_externals,wpftwriter,\ + abw \ + boost_headers \ +- ebook \ + epubgen \ + etonyek \ + icu_headers \ +@@ -67,7 +66,6 @@ $(eval $(call gb_Library_use_externals,wpftwriter,\ + + $(eval $(call gb_Library_add_exception_objects,wpftwriter,\ + writerperfect/source/writer/AbiWordImportFilter \ +- writerperfect/source/writer/EBookImportFilter \ + writerperfect/source/writer/EPUBExportDialog \ + writerperfect/source/writer/EPUBExportFilter \ + writerperfect/source/writer/EPUBExportUIComponent \ +diff --git a/writerperfect/qa/unit/WpftFilterFixture.hxx b/writerperfect/qa/unit/WpftFilterFixture.hxx +index 14ad4ea..63aff41 100644 +--- a/writerperfect/qa/unit/WpftFilterFixture.hxx ++++ b/writerperfect/qa/unit/WpftFilterFixture.hxx +@@ -27,9 +27,6 @@ + ((minor) > (req_minor) \ + || ((minor) == (req_minor) && ((micro) >= (req_micro))))) + +-#define REQUIRE_EBOOK_VERSION(major, minor, micro) \ +- REQUIRE_VERSION(EBOOK_VERSION_MAJOR, EBOOK_VERSION_MINOR, EBOOK_VERSION_MICRO, major, minor, micro) +- + #define REQUIRE_ETONYEK_VERSION(major, minor, micro) \ + REQUIRE_VERSION(ETONYEK_VERSION_MAJOR, ETONYEK_VERSION_MINOR, ETONYEK_VERSION_MICRO, major, minor, micro) + +diff --git a/writerperfect/qa/unit/WpftWriterFilterTest.cxx b/writerperfect/qa/unit/WpftWriterFilterTest.cxx +index 515a2b8..3180a99 100644 +--- a/writerperfect/qa/unit/WpftWriterFilterTest.cxx ++++ b/writerperfect/qa/unit/WpftWriterFilterTest.cxx +@@ -31,10 +31,6 @@ WpftWriterFilterTest::WpftWriterFilterTest() + + void WpftWriterFilterTest::test() + { +- const writerperfect::test::WpftOptionalMap_t aEBookOptional +- { +- {"FictionBook2.fb2.zip", REQUIRE_EBOOK_VERSION(0, 1, 1)}, +- }; + const writerperfect::test::WpftOptionalMap_t aEtonyekOptional + { + {"Pages_4.pages", REQUIRE_ETONYEK_VERSION(0, 1, 2)}, +@@ -58,7 +54,6 @@ void WpftWriterFilterTest::test() + }; + + doTest("com.sun.star.comp.Writer.AbiWordImportFilter", "/writerperfect/qa/unit/data/writer/libabw/"); +- doTest("org.libreoffice.comp.Writer.EBookImportFilter", "/writerperfect/qa/unit/data/writer/libe-book/", aEBookOptional); + doTest("com.sun.star.comp.Writer.MSWorksImportFilter", "/writerperfect/qa/unit/data/writer/libwps/", aWpsOptional); + doTest("com.sun.star.comp.Writer.MWAWImportFilter", "/writerperfect/qa/unit/data/writer/libmwaw/", aMWAWOptional); + doTest("org.libreoffice.comp.Writer.PagesImportFilter", "/writerperfect/qa/unit/data/writer/libetonyek/", aEtonyekOptional); +diff --git a/writerperfect/source/writer/wpftwriter.component b/writerperfect/source/writer/wpftwriter.component +index 8ab4366..2720023 100644 +--- a/writerperfect/source/writer/wpftwriter.component ++++ b/writerperfect/source/writer/wpftwriter.component +@@ -38,11 +38,6 @@ + + + +- +- +- +- + + +-- +2.14.1 + diff --git a/SOURCES/0001-don-t-suppress-crashes.patch b/SOURCES/0001-don-t-suppress-crashes.patch new file mode 100644 index 0000000..fcd1f1d --- /dev/null +++ b/SOURCES/0001-don-t-suppress-crashes.patch @@ -0,0 +1,35 @@ +From a0e6d2abeed9d64fe7862a7664ba80a6178bf3f2 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Tue, 8 Nov 2016 11:50:06 +0100 +Subject: [PATCH] don't suppress crashes + +An automatic restart after a crash makes the crash invisible to abrt. + +Change-Id: I3854e619356049b144b08575879d289a3c12e4c9 +--- + desktop/source/app/app.cxx | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx +index 53365f4..3a3bac8 100644 +--- a/desktop/source/app/app.cxx ++++ b/desktop/source/app/app.cxx +@@ -1312,14 +1312,12 @@ void Desktop::Exception(ExceptionCategory nCategory) + if( bRestart ) + { + RequestHandler::Disable(); +- if( pSignalHandler ) +- osl_removeSignalHandler( pSignalHandler ); + + restartOnMac(false); + if ( m_rSplashScreen.is() ) + m_rSplashScreen->reset(); + +- _exit( EXITHELPER_CRASH_WITH_RESTART ); ++ return; + } + else + { +-- +2.9.3 + diff --git a/SOURCES/0001-forcepoint-fix-out-of-bounds-read-in-ICU.patch b/SOURCES/0001-forcepoint-fix-out-of-bounds-read-in-ICU.patch new file mode 100644 index 0000000..c7aaec8 --- /dev/null +++ b/SOURCES/0001-forcepoint-fix-out-of-bounds-read-in-ICU.patch @@ -0,0 +1,74 @@ +From 2b69156c43261ceae55eb4d3b644c4c2d73231ba Mon Sep 17 00:00:00 2001 +Message-Id: <2b69156c43261ceae55eb4d3b644c4c2d73231ba.1531843216.git.erack@redhat.com> +From: David Tardon +Date: Tue, 6 Mar 2018 15:17:13 +0100 +Subject: [PATCH] forcepoint: fix out-of-bounds read in ICU +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +Change-Id: I5061d38d0e7df0de9a5c7574d522ce69934e4a24 +--- + external/icu/UnpackedTarball_icu.mk | 1 + + external/icu/ofz4860.patch.2 | 25 +++++++++++++++++++++++++ + 2 files changed, 26 insertions(+) + create mode 100644 external/icu/ofz4860.patch.2 + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-forcepoint-fix-out-of-bounds-read-in-ICU.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-forcepoint-fix-out-of-bounds-read-in-ICU.patch" + +diff --git a/external/icu/UnpackedTarball_icu.mk b/external/icu/UnpackedTarball_icu.mk +index 499650976a55..a4d0b16ecb36 100644 +--- a/external/icu/UnpackedTarball_icu.mk ++++ b/external/icu/UnpackedTarball_icu.mk +@@ -35,6 +35,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,icu,\ + $(if $(filter-out ANDROID,$(OS)),external/icu/icu4c-icudata-stdlibs.patch.1) \ + external/icu/icu4c-khmerbreakengine.patch.1 \ + external/icu/icu4c-59-werror-shadow.patch.1 \ ++ external/icu/ofz4860.patch.2 \ + )) + + $(eval $(call gb_UnpackedTarball_add_file,icu,source/data/brkitr/khmerdict.dict,external/icu/khmerdict.dict)) +diff --git a/external/icu/ofz4860.patch.2 b/external/icu/ofz4860.patch.2 +new file mode 100644 +index 000000000000..14114d52878b +--- /dev/null ++++ b/external/icu/ofz4860.patch.2 +@@ -0,0 +1,25 @@ ++From 529ba01ee606940ca273b187be8ce9ba31cf2d90 Mon Sep 17 00:00:00 2001 ++From: David Tardon ++Date: Fri, 19 Jan 2018 10:41:02 +0100 ++Subject: [PATCH] ofz#4860 fix past-the-end read from array ++ ++--- ++ icu4c/source/common/locmap.cpp | 2 +- ++ 1 file changed, 1 insertion(+), 1 deletion(-) ++ ++diff --git a/icu4c/source/common/locmap.cpp b/icu4c/source/common/locmap.cpp ++index cbb2b810a..6d62d8310 100644 ++--- a/icu4c/source/common/locmap.cpp +++++ b/icu4c/source/common/locmap.cpp ++@@ -1015,7 +1015,7 @@ static const char* ++ getPosixID(const ILcidPosixMap *this_0, uint32_t hostID) ++ { ++ uint32_t i; ++- for (i = 0; i <= this_0->numRegions; i++) +++ for (i = 0; i < this_0->numRegions; i++) ++ { ++ if (this_0->regionMaps[i].hostID == hostID) ++ { ++-- ++2.14.3 ++ + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-gtk3-only-for-3.20.patch b/SOURCES/0001-gtk3-only-for-3.20.patch new file mode 100644 index 0000000..f7ef00c --- /dev/null +++ b/SOURCES/0001-gtk3-only-for-3.20.patch @@ -0,0 +1,26 @@ +From cd928ec49d4bcf8f9736c3a07ccd1b3fd5df6ad8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 25 Sep 2017 11:20:34 +0100 +Subject: [PATCH] gtk3 only for >= 3.20 + +Change-Id: I98008c0028ed5d85fe8770197078360de70010a8 +--- + vcl/unx/gtk/gtkinst.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/vcl/unx/gtk/gtkinst.cxx b/vcl/unx/gtk/gtkinst.cxx +index e01a267b..7237b6c 100644 +--- a/vcl/unx/gtk/gtkinst.cxx ++++ b/vcl/unx/gtk/gtkinst.cxx +@@ -82,7 +82,7 @@ extern "C" + XInitThreads(); + + #if GTK_CHECK_VERSION(3,0,0) +- if (gtk_minor_version < 14) ++ if (gtk_minor_version < 20) + { + g_warning("require a newer gtk than 3.%d for theme expectations", gtk_minor_version); + return nullptr; +-- +2.9.5 + diff --git a/SOURCES/0001-implement-pdf-export-of-underline-for-outlined-font.patch b/SOURCES/0001-implement-pdf-export-of-underline-for-outlined-font.patch new file mode 100644 index 0000000..c91806c --- /dev/null +++ b/SOURCES/0001-implement-pdf-export-of-underline-for-outlined-font.patch @@ -0,0 +1,48 @@ +From d01b115cb9db9200900f78d614d220b6bec1eb7d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 20 Jul 2018 14:49:17 +0100 +Subject: [PATCH] implement pdf export of underline for outlined font + +just the simplest case of a straight solid line which is outlined, +i.e. border in font color and filled with white + +Change-Id: I7d670a543475b6457cb2827e74a05bba6c4a91ea +--- + vcl/source/gdi/pdfwriter_impl.cxx | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx +index 58711a9d862b..bf932ad17ef8 100644 +--- a/vcl/source/gdi/pdfwriter_impl.cxx ++++ b/vcl/source/gdi/pdfwriter_impl.cxx +@@ -7384,6 +7384,27 @@ void PDFWriterImpl::drawStraightTextLine( OStringBuffer& aLine, long nWidth, Fon + if ( !nLineHeight ) + return; + ++ // outline attribute ? ++ if (m_aCurrentPDFState.m_aFont.IsOutline() && eTextLine == LINESTYLE_SINGLE) ++ { ++ appendStrokingColor(aColor, aLine); // stroke with text color ++ aLine.append( " " ); ++ Color aNonStrokeColor(COL_WHITE); // fill with white ++ appendNonStrokingColor(aNonStrokeColor, aLine); ++ aLine.append( "\n" ); ++ aLine.append( "0.25 w \n" ); // same line thickness as in drawLayout ++ ++ // draw rectangle instead ++ aLine.append( "0 " ); ++ m_aPages.back().appendMappedLength( static_cast(-nLinePos * 1.5), aLine ); ++ aLine.append( " " ); ++ m_aPages.back().appendMappedLength( static_cast(nWidth), aLine, false ); ++ aLine.append( ' ' ); ++ m_aPages.back().appendMappedLength( static_cast(nLineHeight), aLine ); ++ aLine.append( " re h B\n" ); ++ return; ++ } ++ + m_aPages.back().appendMappedLength( (sal_Int32)nLineHeight, aLine ); + aLine.append( " w " ); + appendStrokingColor( aColor, aLine ); +-- +2.17.0 + diff --git a/SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch b/SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch new file mode 100644 index 0000000..3cfce72 --- /dev/null +++ b/SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch @@ -0,0 +1,70 @@ +From 14c85889616de301e3a214c49fff2e6da3327d1f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 18 Oct 2018 20:39:23 +0100 +Subject: [PATCH] keep pyuno script processing below base uri +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: Icc13fb7193fb1e7c50e0df286161a10b4ed636c7 +Reviewed-on: https://gerrit.libreoffice.org/61970 +Reviewed-by: Stephan Bergmann +Reviewed-by: Thorsten Behrens +Reviewed-by: Michael Stahl +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + scripting/source/pyprov/pythonscript.py | 30 +++++++++++++++++++++++-- + 1 file changed, 28 insertions(+), 2 deletions(-) + +diff --git a/scripting/source/pyprov/pythonscript.py b/scripting/source/pyprov/pythonscript.py +index 4803d0bebc23..f5aa2173333a 100644 +--- a/scripting/source/pyprov/pythonscript.py ++++ b/scripting/source/pyprov/pythonscript.py +@@ -25,6 +25,7 @@ import imp + import time + import ast + import platform ++from com.sun.star.uri.RelativeUriExcessParentSegments import RETAIN + + try: + unicode +@@ -212,8 +213,33 @@ class MyUriHelper: + + def scriptURI2StorageUri( self, scriptURI ): + try: +- myUri = self.m_uriRefFac.parse(scriptURI) +- ret = self.m_baseUri + "/" + myUri.getName().replace( "|", "/" ) ++ # base path to the python script location ++ sBaseUri = self.m_baseUri + "/" ++ xBaseUri = self.m_uriRefFac.parse(sBaseUri) ++ ++ # path to the .py file + "$functionname, arguments, etc ++ xStorageUri = self.m_uriRefFac.parse(scriptURI) ++ sStorageUri = xStorageUri.getName().replace( "|", "/" ); ++ ++ # path to the .py file, relative to the base ++ sFileUri = sStorageUri[0:sStorageUri.find("$")] ++ xFileUri = self.m_uriRefFac.parse(sFileUri) ++ if not xFileUri: ++ message = "pythonscript: invalid relative uri '" + sFileUri+ "'" ++ log.debug( message ) ++ raise RuntimeException( message ) ++ ++ # absolute path to the .py file ++ xAbsScriptUri = self.m_uriRefFac.makeAbsolute(xBaseUri, xFileUri, True, RETAIN) ++ sAbsScriptUri = xAbsScriptUri.getUriReference() ++ ++ # ensure py file is under the base path ++ if not sAbsScriptUri.startswith(sBaseUri): ++ message = "pythonscript: storage uri '" + sAbsScriptUri + "' not in base uri '" + self.m_baseUri + "'" ++ log.debug( message ) ++ raise RuntimeException( message ) ++ ++ ret = sBaseUri + sStorageUri + log.debug( "converting scriptURI="+scriptURI + " to storageURI=" + ret ) + return ret + except UnoException as e: +-- +2.20.1 + diff --git a/SOURCES/0001-request-installation-of-langpack-via-packagekit.patch b/SOURCES/0001-request-installation-of-langpack-via-packagekit.patch new file mode 100644 index 0000000..f74c057 --- /dev/null +++ b/SOURCES/0001-request-installation-of-langpack-via-packagekit.patch @@ -0,0 +1,946 @@ +From 44686bc81055c7bee7f41f9e219c35115ce8119f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 20 Dec 2017 15:29:39 +0000 +Subject: [PATCH] request installation of langpack via packagekit +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +if ui is set to track the locale automatically and the current locale +has no match in installed resources but has a match in the list of +languages that libreoffice was compiled to contain + +so e.g. de_AT locale shouldn't trigger the installation of anything if +langpack-de is already installed and yue_HK shouldn't trigger install +of anything cause that not supported (at time of writing) for libreoffice + +put Fedora/RHEL/Ubuntu naming schemes in here. + +I moved the lang code from svl to svtools so I could use the restart dialog +to prompt to restart after the langpack is installed, but packagekit's blocking +mode seems to be no longer blocking and control returns immediately which is a +change since the last time I played with this stuff, so drop the restart thing +for now. The lack of a blocking modal also makes the "run this on idle when there's +a toplevel window up and running" a bit futile, but lets keep that for now anyway. + +also... + +set dbus id for existing DbusSessionHelper users + +Change-Id: I64329e21ae79b6607856de9781bee0274b9cb136 +Reviewed-on: https://gerrit.libreoffice.org/46854 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 7cf4eeed81fd333c87dedffa792f5d547b7981f0) + +Change-Id: Ice731be539850338ccdd8af87839e0b4d83f01e7 +--- + config_host/config_langs.h.in | 10 ++ + config_host/config_vendor.h.in | 10 ++ + configure.ac | 4 + + cui/source/options/optgdlg.cxx | 3 +- + desktop/source/app/langselect.cxx | 3 +- + include/svl/languageoptions.hxx | 3 - + include/svtools/langhelp.hxx | 3 + + offapi/org/freedesktop/PackageKit/XModify.idl | 22 ++-- + .../registry/data/org/openoffice/Office/Common.xcu | 3 + + .../schema/org/openoffice/Office/Common.xcs | 6 + + sfx2/source/appl/appserv.cxx | 3 +- + .../sessioninstall/SyncDbusSessionHelper.cxx | 57 +++++---- + .../sessioninstall/SyncDbusSessionHelper.hxx | 20 ++-- + svl/source/config/languageoptions.cxx | 33 ------ + svtools/source/misc/langhelp.cxx | 130 ++++++++++++++++++++- + sw/source/uibase/app/apphdl.cxx | 3 +- + vcl/inc/unx/fontmanager.hxx | 6 +- + vcl/unx/generic/fontmanager/fontconfig.cxx | 93 ++------------- + vcl/unx/generic/fontmanager/fontmanager.cxx | 2 - + 19 files changed, 235 insertions(+), 179 deletions(-) + create mode 100644 config_host/config_langs.h.in + create mode 100644 config_host/config_vendor.h.in + +diff --git a/config_host/config_langs.h.in b/config_host/config_langs.h.in +new file mode 100644 +index 0000000..d60a5c1 +--- /dev/null ++++ b/config_host/config_langs.h.in +@@ -0,0 +1,10 @@ ++/* Configuration of restriction on supported ui languages, by the ++ * --with-lang option. ++ */ ++ ++#ifndef CONFIG_LANGS_H ++#define CONFIG_LANGS_H ++ ++#define WITH_LANG "" ++ ++#endif +diff --git a/config_host/config_vendor.h.in b/config_host/config_vendor.h.in +new file mode 100644 +index 0000000..3260221 +--- /dev/null ++++ b/config_host/config_vendor.h.in +@@ -0,0 +1,10 @@ ++/* Configuration of restriction on supported ui languages, by the ++ * --with-lang option. ++ */ ++ ++#ifndef CONFIG_VENDOR_H ++#define CONFIG_VENDOR_H ++ ++#define OOO_VENDOR "" ++ ++#endif +diff --git a/configure.ac b/configure.ac +index bbb47e6..55e2aa0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -11777,6 +11777,7 @@ if test "$enable_release_build" = "" -o "$enable_release_build" = "no"; then + ALL_LANGS=`echo $ALL_LANGS qtz` + fi + AC_SUBST(ALL_LANGS) ++AC_DEFINE_UNQUOTED(WITH_LANG,"$WITH_LANG") + AC_SUBST(WITH_LANG) + AC_SUBST(WITH_LANG_LIST) + AC_SUBST(GIT_NEEDED_SUBMODULES) +@@ -11925,6 +11926,7 @@ else + OOO_VENDOR="$with_vendor" + AC_MSG_RESULT([$OOO_VENDOR]) + fi ++AC_DEFINE_UNQUOTED(OOO_VENDOR,"$OOO_VENDOR") + AC_SUBST(OOO_VENDOR) + + if test "$_os" = "Android" ; then +@@ -12538,6 +12540,7 @@ AC_CONFIG_HEADERS([config_host/config_gio.h]) + AC_CONFIG_HEADERS([config_host/config_global.h]) + AC_CONFIG_HEADERS([config_host/config_gpgme.h]) + AC_CONFIG_HEADERS([config_host/config_java.h]) ++AC_CONFIG_HEADERS([config_host/config_langs.h]) + AC_CONFIG_HEADERS([config_host/config_lgpl.h]) + AC_CONFIG_HEADERS([config_host/config_liblangtag.h]) + AC_CONFIG_HEADERS([config_host/config_locales.h]) +@@ -12549,6 +12552,7 @@ AC_CONFIG_HEADERS([config_host/config_options.h]) + AC_CONFIG_HEADERS([config_host/config_options_calc.h]) + AC_CONFIG_HEADERS([config_host/config_test.h]) + AC_CONFIG_HEADERS([config_host/config_typesizes.h]) ++AC_CONFIG_HEADERS([config_host/config_vendor.h]) + AC_CONFIG_HEADERS([config_host/config_vcl.h]) + AC_CONFIG_HEADERS([config_host/config_vclplug.h]) + AC_CONFIG_HEADERS([config_host/config_version.h]) +diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx +index 1c90931..7965179 100644 +--- a/cui/source/options/optgdlg.cxx ++++ b/cui/source/options/optgdlg.cxx +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1122,7 +1123,7 @@ namespace + LanguageTag GetInstalledLocaleForSystemUILanguage() + { + css::uno::Sequence inst(officecfg::Setup::Office::InstalledLocales::get()->getElementNames()); +- return LanguageTag(getInstalledLocaleForSystemUILanguage(inst)).makeFallback(); ++ return LanguageTag(getInstalledLocaleForSystemUILanguage(inst, false)).makeFallback(); + } + } + +diff --git a/desktop/source/app/langselect.cxx b/desktop/source/app/langselect.cxx +index 4ce877a..86ce743 100644 +--- a/desktop/source/app/langselect.cxx ++++ b/desktop/source/app/langselect.cxx +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + + #include + +@@ -103,7 +104,7 @@ bool prepareLocale() { + } + } + if (locale.isEmpty()) { +- locale = getInstalledLocaleForSystemUILanguage(inst); ++ locale = getInstalledLocaleForSystemUILanguage(inst, true); + } + if (locale.isEmpty()) { + return false; +diff --git a/include/svl/languageoptions.hxx b/include/svl/languageoptions.hxx +index f386cb6..6de8eb5 100644 +--- a/include/svl/languageoptions.hxx ++++ b/include/svl/languageoptions.hxx +@@ -131,9 +131,6 @@ public: + bool isCJKKeyboardLayoutInstalled() const; + }; + +-OUString SVL_DLLPUBLIC getInstalledLocaleForLanguage(css::uno::Sequence const & installed, OUString const & locale); +-OUString SVL_DLLPUBLIC getInstalledLocaleForSystemUILanguage(css::uno::Sequence const & installed); +- + #endif // INCLUDED_SVL_LANGUAGEOPTIONS_HXX + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/include/svtools/langhelp.hxx b/include/svtools/langhelp.hxx +index a3a84df..db22bb3 100644 +--- a/include/svtools/langhelp.hxx ++++ b/include/svtools/langhelp.hxx +@@ -22,6 +22,9 @@ + */ + SVT_DLLPUBLIC void localizeWebserviceURI( OUString& io_rURI ); + ++OUString SVT_DLLPUBLIC getInstalledLocaleForLanguage(css::uno::Sequence const & installed, OUString const & locale); ++OUString SVT_DLLPUBLIC getInstalledLocaleForSystemUILanguage(css::uno::Sequence const & installed, bool bRequestInstallIfMissing); ++ + #endif + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/offapi/org/freedesktop/PackageKit/XModify.idl b/offapi/org/freedesktop/PackageKit/XModify.idl +index a712bb5..69544e9 100644 +--- a/offapi/org/freedesktop/PackageKit/XModify.idl ++++ b/offapi/org/freedesktop/PackageKit/XModify.idl +@@ -22,7 +22,7 @@ module PackageKit + * The interface used for modifying the package database. + * + * @sa +- * https://git.gnome.org/browse/gnome-software/tree/src/org.freedesktop.PackageKit.xml ++ * https://git.gnome.org/browse/gnome-software/tree/src/org.freedesktop.PackageKit.Modify2.xml + * for documentation of the corresponding D-Bus interface + */ + interface XModify : com::sun::star::uno::XInterface +@@ -32,70 +32,70 @@ interface XModify : com::sun::star::uno::XInterface + * @since LibreOffice 4.0 + */ + +- void InstallPackageFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction); ++ void InstallPackageFiles([in] sequence< string > files, [in] string interaction); + + /** + * Installs sequence< string > packages to provide sequence< string > files. + * @since LibreOffice 4.0 + */ + +- void InstallProvideFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction); ++ void InstallProvideFiles([in] sequence< string > files, [in] string interaction); + + /** + * Installs sequence< string > packages to provide sequence< string > files. + * @since LibreOffice 4.0 + */ + +- void InstallCatalogs( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction); ++ void InstallCatalogs([in] sequence< string > files, [in] string interaction); + + /** + * Installs sequence< string > packages from a configured software source. + * @since LibreOffice 4.0 + */ + +- void InstallPackageNames( [in] unsigned long xid, [in] sequence< string > packages, [in] string interaction); ++ void InstallPackageNames([in] sequence< string > packages, [in] string interaction); + + /** + * Installs mimetype handlers from a configured software source. + * @since LibreOffice 4.0 + */ + +- void InstallMimeTypes( [in] unsigned long xid, [in] sequence< string > mimeTypes, [in] string interaction); ++ void InstallMimeTypes([in] sequence< string > mimeTypes, [in] string interaction); + + /** + * Installs fontconfig resources ( [in] usually fonts) from a configured software source. + * @since LibreOffice 4.0 + */ + +- void InstallFontconfigResources( [in] unsigned long xid, [in] sequence< string > resources, [in] string interaction); ++ void InstallFontconfigResources([in] sequence< string > resources, [in] string interaction); + + /** + * Installs GStreamer resources ( [in] usually codecs) from a configured software source. + * @since LibreOffice 4.0 + */ + +- void InstallGStreamerResources( [in] unsigned long xid, [in] sequence< string > resources, [in] string interaction); ++ void InstallGStreamerResources([in] sequence< string > resources, [in] string interaction); + + /** + * Installs resources of a given type from a configured software source. + * @since LibreOffice 4.0 + */ + +- void InstallResources( [in] unsigned long xid, [in] sequence< string > types, [in] sequence< string > resources, [in] string interaction); ++ void InstallResources([in] sequence< string > types, [in] sequence< string > resources, [in] string interaction); + + /** + * Removes sequence< string > packages that provide the given local sequence< string > files. + * @since LibreOffice 4.0 + */ + +- void RemovePackageByFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction); ++ void RemovePackageByFiles([in] sequence< string > files, [in] string interaction); + + /** + * Installs printer drivers from a configured software source. + * @since LibreOffice 4.0 + */ + +- void InstallPrinterDrivers( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction); ++ void InstallPrinterDrivers([in] sequence< string > files, [in] string interaction); + }; + + } ; // PackageKit +diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu +index 6b94ff9..26d1ba0 100644 +--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu ++++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu +@@ -535,6 +535,9 @@ + + true + ++ ++ true ++ + + + +diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +index f9816fc..2884179 100644 +--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs ++++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +@@ -6382,6 +6382,12 @@ + + true + ++ ++ ++ Specifies if missing langpack installation should be triggered. ++ ++ true ++ + + + +diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx +index 1e2a2ec..e48e5aa 100644 +--- a/sfx2/source/appl/appserv.cxx ++++ b/sfx2/source/appl/appserv.cxx +@@ -59,6 +59,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -196,7 +197,7 @@ namespace + using namespace svtools; + Reference< XSyncDbusSessionHelper > xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext())); + Sequence< OUString > vPackages { "libreoffice-base" }; +- xSyncDbusSessionHelper->InstallPackageNames(0, vPackages, OUString()); ++ xSyncDbusSessionHelper->InstallPackageNames(vPackages, OUString()); + // Ill be back (hopefully)! + SolarMutexGuard aGuard; + executeRestartDialog(comphelper::getProcessComponentContext(), nullptr, RESTART_REASON_BIBLIOGRAPHY_INSTALL); +diff --git a/shell/source/sessioninstall/SyncDbusSessionHelper.cxx b/shell/source/sessioninstall/SyncDbusSessionHelper.cxx +index a1211f7..1938077 100644 +--- a/shell/source/sessioninstall/SyncDbusSessionHelper.cxx ++++ b/shell/source/sessioninstall/SyncDbusSessionHelper.cxx +@@ -18,7 +18,7 @@ using namespace ::com::sun::star::uno; + + namespace + { +- struct GVariantDeleter { void operator()(GVariant* pV) { g_variant_unref(pV); } }; ++ struct GVariantDeleter { void operator()(GVariant* pV) { if (pV) g_variant_unref(pV); } }; + struct GVariantBuilderDeleter { void operator()(GVariantBuilder* pVB) { g_variant_builder_unref(pVB); } }; + template struct GObjectDeleter { void operator()(T* pO) { g_object_unref(pO); } }; + class GErrorWrapper +@@ -55,8 +55,15 @@ namespace + return proxy; + } + ++ static GVariant* pk_make_platform_data() ++ { ++ GVariantBuilder builder; ++ g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}")); ++ return g_variant_builder_end(&builder); ++ } ++ + void request( +- char const * method, sal_uInt32 xid, ++ char const * method, + css::uno::Sequence const & resources, + OUString const & interaction) + { +@@ -70,14 +77,14 @@ void request( + } + auto iactUtf8(OUStringToOString(interaction, RTL_TEXTENCODING_UTF8)); + std::shared_ptr proxy( +- lcl_GetPackageKitProxy("Modify"), GObjectDeleter()); ++ lcl_GetPackageKitProxy("Modify2"), GObjectDeleter()); + GErrorWrapper error; +- g_dbus_proxy_call_sync( ++ std::shared_ptr result(g_dbus_proxy_call_sync( + proxy.get(), method, + g_variant_new( +- "(uass)", static_cast(xid), builder.get(), +- iactUtf8.getStr()), +- G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error.getRef()); ++ "(asss@a{sv})", builder.get(), iactUtf8.getStr(), ++ "libreoffice-startcenter.desktop", pk_make_platform_data()), ++ G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error.getRef()), GVariantDeleter()); + } + + } +@@ -92,66 +99,66 @@ namespace shell { namespace sessioninstall + } + + void SyncDbusSessionHelper::InstallPackageFiles( +- sal_uInt32 xid, css::uno::Sequence const & files, ++ css::uno::Sequence const & files, + OUString const & interaction) + { +- request("InstallPackageFiles", xid, files, interaction); ++ request("InstallPackageFiles", files, interaction); + } + + void SyncDbusSessionHelper::InstallProvideFiles( +- sal_uInt32 xid, css::uno::Sequence const & files, ++ css::uno::Sequence const & files, + OUString const & interaction) + { +- request("InstallProvideFiles", xid, files, interaction); ++ request("InstallProvideFiles", files, interaction); + } + + void SyncDbusSessionHelper::InstallCatalogs( +- sal_uInt32 xid, css::uno::Sequence const & files, ++ css::uno::Sequence const & files, + OUString const & interaction) + { +- request("InstallCatalogs", xid, files, interaction); ++ request("InstallCatalogs", files, interaction); + } + + void SyncDbusSessionHelper::InstallPackageNames( +- sal_uInt32 xid, css::uno::Sequence const & packages, ++ css::uno::Sequence const & packages, + OUString const & interaction) + { +- request("InstallPackageNames", xid, packages, interaction); ++ request("InstallPackageNames", packages, interaction); + } + + void SyncDbusSessionHelper::InstallMimeTypes( +- sal_uInt32 xid, css::uno::Sequence const & mimeTypes, ++ css::uno::Sequence const & mimeTypes, + OUString const & interaction) + { +- request("InstallMimeTypes", xid, mimeTypes, interaction); ++ request("InstallMimeTypes", mimeTypes, interaction); + } + + void SyncDbusSessionHelper::InstallFontconfigResources( +- sal_uInt32 xid, css::uno::Sequence const & resources, ++ css::uno::Sequence const & resources, + OUString const & interaction) + { +- request("InstallFontconfigResources", xid, resources, interaction); ++ request("InstallFontconfigResources", resources, interaction); + } + + void SyncDbusSessionHelper::InstallGStreamerResources( +- sal_uInt32 xid, css::uno::Sequence const & resources, ++ css::uno::Sequence const & resources, + OUString const & interaction) + { +- request("InstallGStreamerResources", xid, resources, interaction); ++ request("InstallGStreamerResources", resources, interaction); + } + + void SyncDbusSessionHelper::RemovePackageByFiles( +- sal_uInt32 xid, css::uno::Sequence const & files, ++ css::uno::Sequence const & files, + OUString const & interaction) + { +- request("RemovePackageByFiles", xid, files, interaction); ++ request("RemovePackageByFiles", files, interaction); + } + + void SyncDbusSessionHelper::InstallPrinterDrivers( +- sal_uInt32 xid, css::uno::Sequence const & files, ++ css::uno::Sequence const & files, + OUString const & interaction) + { +- request("InstallPrinteDrivers", xid, files, interaction); ++ request("InstallPrinteDrivers", files, interaction); + } + + void SAL_CALL SyncDbusSessionHelper::IsInstalled( const OUString& sPackagename, const OUString& sInteraction, sal_Bool& o_isInstalled ) +diff --git a/shell/source/sessioninstall/SyncDbusSessionHelper.hxx b/shell/source/sessioninstall/SyncDbusSessionHelper.hxx +index 731b649..72b17ba 100644 +--- a/shell/source/sessioninstall/SyncDbusSessionHelper.hxx ++++ b/shell/source/sessioninstall/SyncDbusSessionHelper.hxx +@@ -23,26 +23,26 @@ namespace shell { namespace sessioninstall + SyncDbusSessionHelper(css::uno::Reference< css::uno::XComponentContext> const&); + + // XModify Methods +- virtual void SAL_CALL InstallPackageFiles( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallPackageFiles( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallProvideFiles( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallProvideFiles( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallCatalogs( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallCatalogs( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallPackageNames( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& packages, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallPackageNames( const css::uno::Sequence< OUString >& packages, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallMimeTypes( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& mimeTypes, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallMimeTypes( const css::uno::Sequence< OUString >& mimeTypes, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallFontconfigResources( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallFontconfigResources( const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallGStreamerResources( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallGStreamerResources( const css::uno::Sequence< OUString >& resources, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallResources( ::sal_uInt32 /* xid */, const css::uno::Sequence< OUString >& /* types */, const css::uno::Sequence< OUString >& /* resources */, const OUString& /* interaction */ ) override ++ virtual void SAL_CALL InstallResources( const css::uno::Sequence< OUString >& /* types */, const css::uno::Sequence< OUString >& /* resources */, const OUString& /* interaction */ ) override + { throw css::uno::RuntimeException(); } // not implemented + +- virtual void SAL_CALL RemovePackageByFiles( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; ++ virtual void SAL_CALL RemovePackageByFiles( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; + +- virtual void SAL_CALL InstallPrinterDrivers( ::sal_uInt32 xid, const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; ++ virtual void SAL_CALL InstallPrinterDrivers( const css::uno::Sequence< OUString >& files, const OUString& interaction ) override; + + // XQuery Methods + virtual void SAL_CALL IsInstalled( const OUString& /* package_name */, const OUString& /* interaction */, sal_Bool& /* installed */ ) override; +diff --git a/svl/source/config/languageoptions.cxx b/svl/source/config/languageoptions.cxx +index 9f9fe45..74af031 100644 +--- a/svl/source/config/languageoptions.cxx ++++ b/svl/source/config/languageoptions.cxx +@@ -27,7 +27,6 @@ + #include + #include + #include +-#include + + #ifdef _WIN32 + #if !defined WIN32_LEAN_AND_MEAN +@@ -256,41 +255,9 @@ bool SvtSystemLanguageOptions::isKeyboardLayoutTypeInstalled(sal_Int16 scriptTyp + return isInstalled; + } + +- + bool SvtSystemLanguageOptions::isCJKKeyboardLayoutInstalled() const + { + return isKeyboardLayoutTypeInstalled(css::i18n::ScriptType::ASIAN); + } + +-OUString getInstalledLocaleForLanguage(css::uno::Sequence const & installed, OUString const & locale) +-{ +- if (locale.isEmpty()) +- return OUString(); // do not attempt to resolve anything +- +- for (sal_Int32 i = 0; i != installed.getLength(); ++i) { +- if (installed[i] == locale) { +- return installed[i]; +- } +- } +- std::vector fallbacks(LanguageTag(locale).getFallbackStrings(false)); +- for (OUString & rf : fallbacks) { +- for (sal_Int32 i = 0; i != installed.getLength(); ++i) { +- if (installed[i] == rf) { +- return installed[i]; +- } +- } +- } +- return OUString(); +-} +- +-OUString getInstalledLocaleForSystemUILanguage(const css::uno::Sequence& rLocaleElementNames) +-{ +- OUString locale = getInstalledLocaleForLanguage(rLocaleElementNames, officecfg::System::L10N::UILocale::get()); +- if (locale.isEmpty()) +- locale = getInstalledLocaleForLanguage(rLocaleElementNames, "en-US"); +- if (locale.isEmpty() && rLocaleElementNames.hasElements()) +- locale = rLocaleElementNames[0]; +- return locale; +-} +- + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/svtools/source/misc/langhelp.cxx b/svtools/source/misc/langhelp.cxx +index 16a3a1d..1e4c5c5 100644 +--- a/svtools/source/misc/langhelp.cxx ++++ b/svtools/source/misc/langhelp.cxx +@@ -7,12 +7,20 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +- ++#include ++#include ++#include ++#include ++#include ++#include + #include +- ++#include + #include ++#include + #include +-#include ++#include ++#include ++#include + + void localizeWebserviceURI( OUString& rURI ) + { +@@ -33,4 +41,120 @@ void localizeWebserviceURI( OUString& rURI ) + rURI += aLang; + } + ++OUString getInstalledLocaleForLanguage(css::uno::Sequence const & installed, OUString const & locale) ++{ ++ if (locale.isEmpty()) ++ return OUString(); // do not attempt to resolve anything ++ ++ for (sal_Int32 i = 0; i != installed.getLength(); ++i) { ++ if (installed[i] == locale) { ++ return installed[i]; ++ } ++ } ++ std::vector fallbacks(LanguageTag(locale).getFallbackStrings(false)); ++ for (OUString & rf : fallbacks) { ++ for (sal_Int32 i = 0; i != installed.getLength(); ++i) { ++ if (installed[i] == rf) { ++ return installed[i]; ++ } ++ } ++ } ++ return OUString(); ++} ++ ++static std::unique_ptr xLangpackInstaller; ++ ++class InstallLangpack : public Idle ++{ ++ std::vector m_aPackages; ++public: ++ explicit InstallLangpack(const std::vector& rPackages) ++ : Idle("install langpack") ++ , m_aPackages(rPackages) ++ { ++ SetPriority(TaskPriority::LOWEST); ++ } ++ ++ virtual void Invoke() override ++ { ++ vcl::Window* pTopWindow = Application::GetActiveTopWindow(); ++ if (!pTopWindow) ++ pTopWindow = Application::GetFirstTopLevelWindow(); ++ if (!pTopWindow) ++ { ++ Start(); ++ return; ++ } ++ try ++ { ++ using namespace org::freedesktop::PackageKit; ++ css::uno::Reference xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext())); ++ xSyncDbusSessionHelper->InstallPackageNames(comphelper::containerToSequence(m_aPackages), OUString()); ++ } ++ catch (const css::uno::Exception& e) ++ { ++ SAL_INFO("svl", "trying to install a LibreOffice langpack, caught " << e); ++ } ++ xLangpackInstaller.reset(); ++ } ++}; ++ ++OUString getInstalledLocaleForSystemUILanguage(const css::uno::Sequence& rLocaleElementNames, bool bRequestInstallIfMissing) ++{ ++ OUString wantedLocale = officecfg::System::L10N::UILocale::get(); ++ OUString locale = getInstalledLocaleForLanguage(rLocaleElementNames, wantedLocale); ++ if (bRequestInstallIfMissing && locale.isEmpty() && !wantedLocale.isEmpty() && !Application::IsHeadlessModeEnabled() && ++ officecfg::Office::Common::PackageKit::EnableLangpackInstallation::get()) ++ { ++ LanguageTag aWantedTag(wantedLocale); ++ if (aWantedTag.getLanguage() != "en") ++ { ++ // We try these bases + the exact locale + fallback locale. ++ // ++ // The theory is that we can request a bunch of packages ++ // and it's a success if one of them is available ++ std::vector aPackages; ++ OUString sAvailableLocales(WITH_LANG); ++ std::vector aAvailable; ++ sal_Int32 nIndex = 0; ++ do ++ { ++ aAvailable.emplace_back(sAvailableLocales.getToken(0, ' ', nIndex)); ++ } ++ while (nIndex >= 0); ++ OUString install = getInstalledLocaleForLanguage(comphelper::containerToSequence(aAvailable), wantedLocale); ++ if (!install.isEmpty() && install != "en-US") ++ { ++ if (strcmp(OOO_VENDOR, "Red Hat, Inc.") == 0 || strcmp(OOO_VENDOR, "The Fedora Project") == 0) ++ { ++ // langpack is the typical Fedora/RHEL naming convention ++ LanguageType eType = aWantedTag.getLanguageType(); ++ if (MsLangId::isSimplifiedChinese(eType)) ++ aPackages.emplace_back("libreoffice-langpack-zh-Hans"); ++ else if (MsLangId::isTraditionalChinese(eType)) ++ aPackages.emplace_back("libreoffice-langpack-zh-Hant"); ++ else ++ aPackages.emplace_back("libreoffice-langpack-" + install); ++ } ++ //Debian would be: "The Document Foundation/Debian" ++ else if (strcmp(OOO_VENDOR, "The Document Foundation, Debian and Ubuntu") == 0) ++ { ++ // l10n is the typical Debian/Ubuntu naming convention ++ aPackages.emplace_back("libreoffice-l10n-" + install); ++ } ++ } ++ if (!aPackages.empty()) ++ { ++ xLangpackInstaller.reset(new InstallLangpack(aPackages)); ++ xLangpackInstaller->Start(); ++ } ++ } ++ } ++ if (locale.isEmpty()) ++ locale = getInstalledLocaleForLanguage(rLocaleElementNames, "en-US"); ++ if (locale.isEmpty() && rLocaleElementNames.hasElements()) ++ locale = rLocaleElementNames[0]; ++ return locale; ++} ++ + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx +index 467112e..6986807 100644 +--- a/sw/source/uibase/app/apphdl.cxx ++++ b/sw/source/uibase/app/apphdl.cxx +@@ -44,6 +44,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -420,7 +421,7 @@ void SwMailMergeWizardExecutor::ExecuteMailMergeWizard( const SfxItemSet * pArgs + using namespace svtools; + css::uno::Reference< XSyncDbusSessionHelper > xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext())); + const css::uno::Sequence< OUString > vPackages{ "libreoffice-base" }; +- xSyncDbusSessionHelper->InstallPackageNames(0, vPackages, OUString()); ++ xSyncDbusSessionHelper->InstallPackageNames(vPackages, OUString()); + SolarMutexGuard aGuard; + executeRestartDialog(comphelper::getProcessComponentContext(), nullptr, RESTART_REASON_MAILMERGE_INSTALL); + } +diff --git a/vcl/inc/unx/fontmanager.hxx b/vcl/inc/unx/fontmanager.hxx +index 03d033e..14aebde 100644 +--- a/vcl/inc/unx/fontmanager.hxx ++++ b/vcl/inc/unx/fontmanager.hxx +@@ -192,14 +192,10 @@ class VCL_PLUGIN_PUBLIC PrintFontManager + static void addFontconfigDir(const OString& rDirectory); + + std::set m_aPreviousLangSupportRequests; +-#if ENABLE_GIO +- std::vector m_aCurrentRequests; +-#endif ++ std::vector m_aCurrentRequests; + Timer m_aFontInstallerTimer; + +-#if ENABLE_GIO + DECL_LINK( autoInstallFontLangSupport, Timer*, void ); +-#endif + PrintFontManager(); + public: + ~PrintFontManager(); +diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx +index 2c16e04..59acfa5 100644 +--- a/vcl/unx/generic/fontmanager/fontconfig.cxx ++++ b/vcl/unx/generic/fontmanager/fontconfig.cxx +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -31,8 +32,8 @@ + #include + #include + #include +-#include + #include ++#include + + using namespace psp; + +@@ -40,10 +41,6 @@ using namespace psp; + #include + #include + +-#if ENABLE_GIO +-#include +-#endif +- + #include + #include + +@@ -862,96 +859,28 @@ namespace + aBuf.append('-').append(pScriptCode); + return OStringToOUString(aBuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8); + } +- +-#if ENABLE_GIO +- guint get_xid_for_dbus() +- { +- // FIXME: Application::GetActiveTopWindow only returns something sensible if LO currently has the focus +- // (which is not the case when you are trying to debug this...). It should instead return the last active window. +- const vcl::Window *pTopWindow = Application::IsHeadlessModeEnabled() ? nullptr : Application::GetActiveTopWindow(); +- const SystemEnvData* pEnvData = pTopWindow ? pTopWindow->GetSystemData() : nullptr; +- return pEnvData ? pEnvData->aWindow : 0; +- } +-#endif + } + +-#if ENABLE_GIO + IMPL_LINK_NOARG(PrintFontManager, autoInstallFontLangSupport, Timer *, void) + { +- if (!officecfg::Office::Common::PackageKit::EnableFontInstallation::get()) +- return; +- +- guint xid = get_xid_for_dbus(); +- +- if (!xid) ++ try + { +- SAL_WARN("vcl", "Could not retrieve X Window ID for DBUS"); +- return; ++ using namespace org::freedesktop::PackageKit; ++ css::uno::Reference xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext())); ++ xSyncDbusSessionHelper->InstallFontconfigResources(comphelper::containerToSequence(m_aCurrentRequests), "hide-finished"); + } +- +- +- GError *error = nullptr; +- /* get the DBUS session connection */ +- GDBusConnection *session_connection = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, &error); +- if (error != nullptr) +- { +- g_debug ("DBUS cannot connect : %s", error->message); +- g_error_free (error); +- return; +- } +- +- /* get the proxy with gnome-session-manager */ +- GDBusProxy *proxy = g_dbus_proxy_new_sync(session_connection, +- G_DBUS_PROXY_FLAGS_NONE, +- nullptr, // GDBusInterfaceInfo +- "org.freedesktop.PackageKit", +- "/org/freedesktop/PackageKit", +- "org.freedesktop.PackageKit.Modify", +- nullptr, // GCancellable +- &error); +- if (proxy == nullptr && error != nullptr) +- { +- g_debug("Could not get DBUS proxy: org.freedesktop.PackageKit: %s", error->message); +- g_error_free(error); +- return; +- } +- +- GVariantBuilder *builder = g_variant_builder_new (G_VARIANT_TYPE("as")); // 'as'=array of strings +- for (std::vector::const_iterator aI = m_aCurrentRequests.begin(); aI != m_aCurrentRequests.end(); ++aI) +- g_variant_builder_add (builder, "s", aI->getStr()); +- +- GVariant *res = g_dbus_proxy_call_sync(proxy, +- "InstallFontconfigResources", +- // Create a new variant with the following types: +- // 'u'=guint32 (xid); 'as'=array of strings (builder); 's'=string ("hide-finished") +- // See also https://people.gnome.org/~ryanl/glib-docs/gvariant-format-strings.html +- g_variant_new("(uass)", xid, builder, "hide-finished"), +- G_DBUS_CALL_FLAGS_NONE, +- -1, // Timeout +- nullptr, // GCancellable +- &error); +- +- if (res == nullptr && error != nullptr) ++ catch (const css::uno::Exception& e) + { ++ SAL_INFO("vcl", "InstallFontconfigResources problem, caught " << e); + // Disable this method from now on. It's simply not available on some systems + // and leads to an error dialog being shown each time this is called tdf#104883 + std::shared_ptr batch( comphelper::ConfigurationChanges::create() ); + officecfg::Office::Common::PackageKit::EnableFontInstallation::set(false, batch); + batch->commit(); +- g_debug("InstallFontconfigResources problem : %s", error->message); +- g_error_free(error); +- } +- else +- { +- g_variant_unref(res); + } + +- g_variant_builder_unref(builder); +- g_object_unref(G_OBJECT (proxy)); +- + m_aCurrentRequests.clear(); + } +-#endif + + void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissingCodes ) + { +@@ -1107,8 +1036,7 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi + } + } + OUString sStillMissing(pRemainingCodes.get(), nRemainingLen); +-#if ENABLE_GIO +- if (get_xid_for_dbus()) ++ if (!Application::IsHeadlessModeEnabled() && officecfg::Office::Common::PackageKit::EnableFontInstallation::get()) + { + if (sStillMissing == rMissingCodes) //replaced nothing + { +@@ -1127,7 +1055,7 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi + if (!sTag.isEmpty() && m_aPreviousLangSupportRequests.find(sTag) == m_aPreviousLangSupportRequests.end()) + { + OString sReq = OString(":lang=") + sTag; +- m_aCurrentRequests.push_back(sReq); ++ m_aCurrentRequests.push_back(OUString::fromUtf8(sReq)); + m_aPreviousLangSupportRequests.insert(sTag); + } + } +@@ -1138,7 +1066,6 @@ void PrintFontManager::Substitute( FontSelectPattern &rPattern, OUString& rMissi + m_aFontInstallerTimer.Start(); + } + } +-#endif + rMissingCodes = sStillMissing; + } + } +diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx +index c956345..d1743dd 100644 +--- a/vcl/unx/generic/fontmanager/fontmanager.cxx ++++ b/vcl/unx/generic/fontmanager/fontmanager.cxx +@@ -146,10 +146,8 @@ PrintFontManager::PrintFontManager() + : m_nNextFontID( 1 ) + , m_nNextDirAtom( 1 ) + { +-#if ENABLE_GIO + m_aFontInstallerTimer.SetInvokeHandler(LINK(this, PrintFontManager, autoInstallFontLangSupport)); + m_aFontInstallerTimer.SetTimeout(5000); +-#endif + } + + PrintFontManager::~PrintFontManager() +-- +2.9.5 + diff --git a/SOURCES/0001-tdf-121203-DOCX-import-fix-loss-of-free-form-text-in.patch b/SOURCES/0001-tdf-121203-DOCX-import-fix-loss-of-free-form-text-in.patch new file mode 100644 index 0000000..7fdfd6b --- /dev/null +++ b/SOURCES/0001-tdf-121203-DOCX-import-fix-loss-of-free-form-text-in.patch @@ -0,0 +1,334 @@ +From 920f64d73cbb1b41f5a9eb26f8069aef45f29ff0 Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Mon, 12 Nov 2018 23:01:12 +0100 +Subject: [PATCH] tdf#121203 DOCX import: fix loss of free-form text in date + control + +Date SDT from DOCX is imported as date control since commit +3ec2d26dc2017ac4a27483febfc63328632f352d (bnc#779630 initial DOCX import +of w:sdt's w:date, 2013-04-30). + +One detail I missed there is our date control is strict: it doesn't +allow free-form text. However, DOCX date SDT has an optional ISO date, +but the actual value can be free-form text. This means that importing +free-form text without an ISO date is lost on import. + +Fix the data loss by restricting the creation of the date control: only +do this if we recognize the date format or in case we have an ISO date. +Otherwise just show the free-form text to avoid data loss. + +Change-Id: I8125bdc749954a6a1c496de74b6682744adb7680 +Reviewed-on: https://gerrit.libreoffice.org/63311 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +--- + sw/qa/extras/ooxmlimport/data/tdf121203.docx | Bin 0 -> 12702 bytes + writerfilter/source/dmapper/DomainMapper.cxx | 2 +- + writerfilter/source/dmapper/SdtHelper.cxx | 44 ++++++++++++++++--- + writerfilter/source/dmapper/SdtHelper.hxx | 4 ++ + 4 files changed, 44 insertions(+), 6 deletions(-) + create mode 100644 sw/qa/extras/ooxmlimport/data/tdf121203.docx + +diff --git a/sw/qa/extras/ooxmlimport/data/tdf121203.docx b/sw/qa/extras/ooxmlimport/data/tdf121203.docx +new file mode 100644 +index 0000000000000000000000000000000000000000..5aa3b2ed74744972aca0224e6f7c4102aedb7462 +GIT binary patch +literal 12702 +zcmeHtWmufqvTozJdmtgWTX1)GclY4#?lclyf;$9)y9R<2+;3<0%$b?&+4tW6 +zXE#sxS9E{%QdC#1dTXtcmx6%A1V95|0RR9Q0FE*=z#j|%h=BqCFaWUNn(u6FoQ!Rp +zbd}xhj2*R^+^nrg^C7`$asl9=`~Um+U+jT~L>ak2A=Hpls%MzG4-m^9ECY$xxmTq! +zmFMkD?-qxAj7%S{PKhL?%JYgeI$}Swo<58rumw&@rc8nJ(^)Fc$$2nci{}JHM*7Uid32ONtpiPcRfbyT3c1` +z-X>+Z0_BlwU<1!pLl1U<-Hj({`R8dqjT#50w%fA;kE>s-51ftRu +zDoJ-f2iSkuZ&o=GQR{ga?NT@jcMaHK$5%Sn>46J>VTlrL#UTIE4zaHFVCraP6r(T{?Pl9f4mw{T5gEX10zUdrYf==#u3xtIdOtgew-{kw>8eS>~sqU0KB|F0ObFc +zxx{h!O&6eWlm#Uw0w{BJ9gM9UnVEjR{x@U)7pLi8{`IK%Wl0EO#E?^{b^Rf4u4Q=g +z>BTkiJXi8Vh@iA1FjwTU!lllR0@7CbWu0%Ad!ur58G#uyd?ozQHTvqaxeFP3V(XS} +z)=iNx^6EpH=>eulViQ1f8{0W%{B?f<VocmMBxR3^yC1+n~VnV)XMRMn1Nti$10tf)R;VN@~;N_HARdG5ffhabs@VUjUP +z@0|Q9(WcQgt8xiW99{4zMiAwgj>VY`}_an&7e)G5bL-yKZd^-!}Jb`MtGHblqp~ADMkjcoy!! +z)rq3`gtbwS_e0cDerE7xCH;puid$6F9ZA9dP=~P76{Zglb#@PezpclIA2u>2gcEyC +zUnZtiPs+0gKUhj`S;>ZfSXh1WNb2~e6NDnDb&dSj7z2P9RJoIxOlUECl`m)wPJ;me +z&_Gf4Ta5iRx>S_m01znrJDNYA&Ta?*FvxvSJVF|Q;;cwz*k+jpwPTMSat%wOx(PNe +zkW(~(FbZ47gUKu+K1`lcc-m#P<}^&B3euk-r*CnsJ&jDP$<u`zUrZi=JC-o!f`-PuNu}4LUY*dYO{1$g@kYH&!&D +zy6?-e7zei88FzTkIFxv>yWlM)xE%w_UGGTL#-l=t(ng2)an!mY=p-H!5z5Y!At?5n +zKdg#3wEo~zK$|#ji-J5yh5P=kpjk%$0?weW+u!3|gzL-_pM+vN4EqKyH)MjhB)+N1hY`ff}Mj +zUu;>IRT|E^Fb;cTQ*_)gLiK~q2hFcCG7Au+8`HR8%LzL2AaOg{Ub+)io*!}eH;%;; +zhS@8tMZxwK(I>jY*9SfgOD-r+v1>F-_5J9%-cr?|AJzHBPN0Smp#;z8``TWemG)R@ +z%ylljL_K_G7B{*lXs-Gl{UZ*^r#9S7xcfkL@R_bLKI(b=d59a9fNSGsd(IcX+1WRL +zXA~@}?`TV*0f0gR000XVoWDh~lbNx#G4pS)uYazUN9uC6%bb{9C=0HnPPT^BF8DCc +z5eu~$j4}j$Hlf7k;mHf~`9jkY-ULhAeqg<=`k`10)}i{E{@4pe5A2J)RzzQFfMSaA +z{c1Y#oC^_Ef|TfY+Yc|qBxM!zCxeJY=w!5VOFB;u$E(EG%vJ8nqHosQBIZ>@3;5tBNHX(Q<4i&dewBk(MssqjJ=P-YLBp^MZJaH +zAFwiSQPtFrcrC-9xPd#ghX1il?u&fFC8xud0CY`wyvJu#gIoy=)8KAs80Y9%rA1?K +zB7?bWKe^8zLv}iUp!O$s?I)!MLmve31CwoB7oC5M(*`145SSe0za +zS1aQ>wR~tJ5(3BDPfHetj*Hy{vHe_oXVDWTO>GAoNJCp6_RgN@t7bzYxpKp%cJz>| +zh?Y)GXAp)`>yIUG@juU7;CY1vn9<}*)#F}>Fh+dBUEj_}0U#NvO+l8KOAaiA(wuC$ +zQPRvIp7C}U;qmQ^wvde@Na%i1{?vh@goyXL;O5}&rY8H%`$3d!qBpnSZ#R3lVcuxG +zohY}?4BAy;?s__!93&}tlkIcyV+v>1O?}|yzL&b|@zI?Fb=s6_B9b}h@%m^uvPSUf +zsZ9*)OvYc#_%?PxBtK&Z_V@x9lTFqB6*Yx@Csr@)*B=q%l!@Hk=~7Tn*%5@7fP8=q9wUjmV#V+X5+_@!sEWQ~i4jdbL +zsr9!-Vhnb5NWeR@p-73H+lUapzQL8nM3#7qIqmr97Yl!UqIj_2oN^x^C8)a3^qxqX +zUWT=hf;!zKve6vTCr$M`;^rDWH;@|XkzEIK`zKMlF&Br~qSAkmJwF%jGJ%fU-?asHe_1!H>5OubA{O;RbEa+Uv6|cS^cAn;7G*yzL-dA%DJzSeUEXICBy=rr5f%0@J9rt-)vqFN +z)8dd{Nwx&_=HpctR-J#jrT3h%I(QdWMTlOZO}wy)C6JlJ0naL0{)N!YQItOYvwB*U +z)^J#WO-*lQbucemQ!Cmy=KE01ygJTWp2WamgjqcxkcyoHR)Y-qgD&%q!;8JO?OpG%(92EZQvEj0^RAuVOmv2Y!dmp=%{v?#giOxUnZ5O +z9^h64DV_s8W!M(lCWk}oS3sw_YZex&0Mq@=&LH|&!dW6P9X;o^uQNFe;fGJ#> +zVG*AM7RZO^d*YcaTp-WIv+LzZr(S!rM0i`mN0Kp?o2VHo^Dbez3$@k^#iXrV+ctU6 +z(^ef#;I(BvzPl=*ep>a*$n-PEd+t3|OZvIYfzfd-?z64-0TwlO5!w|pvL~49H*{Vm +zT`v1b&Oz(J<3c)5tNo_H}`rsqD0tOO?*ks-s+o2q#VmozziP +zulORnCe4rXc^nscTHN9WCK!$umSPy$Ioz&|B6_}XzZt?EOr12^WmflcLLuycT1TXk +zmcWoc%aYXF&x4^tA-!W1t9ROF1{JP}!>xK45X>&Aoax%9ub^KY@ +z8dR5Umbp>AnSn2)`|d;%FlUrkKBE1`lc(~%D>@Qs`6t3+T +zOiLe4!^=*~V_p{&k0ZiWtDdE+ksaYTEdQEVu}b&i(Uh&dljba%Sz4SooZ_5+Oe +z1M&eTe$3Vn#@sS#n&)FLP>mFkP3=(NaVA!PoZzDaIldzQ2Jj4vQtUe{ml>`qW6qfn +z;ZRC_KAlAOO{_#~3FZ|dbAl42bVAsHH#r{PY#~lH4K49;{9QIVh?JE$?#zps3~oGLT@toJlC` +z+*DmRjv6o}GbDrHhBe7mxSxq8H&9H|0 +zJuX09$z~jB8CtED447djhTx_U;dph2HabZdh?47xQGg^QT}TsLfgOqVk=}LGIDWa) +zIzFXG;YD_q{(cug3{0&yEhXwi&6~9iUwTEAn(l4wb@!?FoSPVt+9(Jqk^jnZ|ylzdXGUgsemAK736Dm=9qzVGj9G6oUjKBWd#Jf;n; +z({}cF8sIvd-cWFM#st{wFCEF(!>klWIfSCLY%0gYXjSg=Blegv4k_H6gjb3E82A>> +zUeHHItCD*W?uZ-cySsJcGFWSzQD9Z#{OBpIWp{{gV&}+*q~@TOEF21v^sK4%1j@vJ +z&rzIQY*}zn`&|ioV*Zh%uEqvRe@WA*FWr(5uTh~l+BWzYTACJ<$m^V%NEOe?1MUIl +zE-nOPMm^FNm2$RA<)k_uqm*eM(|lX*g>*Y0A`8Bhndnr&2NZP&mnqdSA1+3hQ>L-t +z%7O8If>Ee={$Y@|jF@36UiO$+P9v<*khN5dsae%;0~S3-`D@SS0an_HB#b!)##>~p>Zr62xo_Of +zv~G>l``^H38KdKWZD%Nu!}t!NvXpV}_O^zu;kXwwY^aAJ0tAJ^7{~M)*m@pZZvAK^1Bk+kaQPZt +z4R2J!4UcUTmF$Q)01dG=JU3nBR<}_C^z6Sb1oh6!UG7O|Km?^^dyk +z@!l+Z*nG^C{;FDZ@4>r9X{(hqieJa84)bs>GeG&C*L(fRp!=ILwj +zH6&TTsI`tFMYbFUt@VT27>q{v&jrVqV+vT`J7LPsid@I%8Bpq!y`^muwhYfDUM|!{ +z)eo$g)ehk7VbH-<--1DR>4=uuZ4yjOAF*Otou&|6&8^wCvsb7+(0FaiV!nPtu@bD+ +z+ng}jO`zZHt}q3QBpxy4=WW$h6;N-!o`OGO(n=;|WKOCLN3MTtLbrLObGt3n4o`!j +zN8z^0vPUJ8f87rkG;(5v9AP5(I5N9a$DaTtLI6;kW$>yT=QhKjnVqKL^ctOCFT5Fg +zGKSV=&>9a2z2RyKkA)lB@9}<6eZ9FEAG%d>=3R|1a(*PZ1e^0xzd7YS^0a!9lkg2O7^`@e^ +zd=*8WKq_DOZ6qnEqmc(8h>~YnYwt|vaKB?ql!Iv6PElzO!@8#6Rp_y80=!#(`;*)H +zVH*8Ml3#PbCM3(!hL+$@(* +zQG9He{x->rHzgaUt404HF*7nN2AyWd2{%H=>Q-$?qHK6A5fzO`m}4&LGk)`O$EIbe2CmoXqssIj+brGOOtEgv8dAcNA#0pmhX&Z)+2z!hh +zh0t~w7x-^NZ+{yJYqlGOnvpdyT?5M&QoQT!oyvMZ`BpR_?o)TE_BmHU-KjbKYS&5( +z=^6-JSms<*erVAg!xmDi>up&O{-`8T0LR}j|1)?P0}8hCzy8QnNXJ&yhbLPcTgc$d +z++sHhnw_H=$XOdjGzNzN3kLc%*kqqzMMNkm9IjWT_I(6sQ`{hvqAAv3zx))Ca87-O +z+_s|iKt@_vsI;Sz*72*!|90g(!m{na^=be +zp%lpR#oE!({=Z>GeSU>)|J`0^*twr}eeWS;Sc8rA*#*Svyia5Y0f&VRpxHv2HM`xs +z8vr>ivJy#EsRDFo+-~>pUKY-(55CCX-!A)_O#V5WjYf_m*S|iQQs4i*U)OCqwOvK* +zO%5_1ECU54s^$m;!Il^;3DHXT$=76X;etLoR7H~SK2s%5bU0|TdqiAtC(oS@o#_ZH +z(e|x{IyvqB%kO3n-`;z~w{k=Jm@vQAS_~ge*d4*wLRGwJji490m)%Fwf~BjzD(ybV +zMrki)R>Ass^|Fkue2W+6p@*?+?YG+|04YXHQnr#VnE5w|1l~M9A(Az5?CCpOp8qd$6l-E$OoOJ1s +za-B +zYTl39+~eabw~?}vW~`|3+%VbrOr&@d(?eN5Hbf3_`8EA`RIg1B;PjLF7qSo1w2xCk +zS+d(YmX33Q5Dy!DLRRTi=5;nvEN{9=BKPKPX4OjP=%GvLxJNtAIFz9}`Flr?J3IaF +z1O*_$^sr0k8<(VNt3Dl$Otj1$GZGS5w;&`H&?Gw8jlpmCB6+SVkOM6b9?1!vU-`Wu +zWM=evXHAXZIrSVG;ZzmEax|m9@DZLLzIdl2*mOt0(@SGQfkR@Lor+SnL@IuFQ9HXh +z=UBAhey&iEOs@V(_uQw_4SRna&v)zq#6ka^oyt-~2lIhGvE~H;Q2x$Nf9tt3)*Ul` +zQc~M*&oCi3GqqU*^U|xb>5cPa4IK@#-?EKk4Q0UWNx39m?lr4e$n^BMzLcbrEPYgM +zyRSYHuUTIkjJr`XX_+3L>a77D$8SRUST`?rM2m^L*k=w&%pJpcDuJDN$~JS|-@EnRsLzDmQePIiCi +zcDOdki=Q65EYzn_6)tw{c+LDdE&On*FFoMfSHnk4u}&Nq)0C$0i9X(d?zW8VTU))I +zw?yqJ1htXUHq7-EmCX#*XOm)CsVi-K81A_<9Eh~IVOR_IPT4ynq11{y-}palZS+=o +zA8sU&a$#AXDwjTnzxvko`I{UXb?ee`# +z18>s+)&93<+y2$d@C&|M3cw@NMWUZs}1%0LoUEj%~iWgHZjEmI9^5u5mQ(aS-SanE>C)GRet$n-?Y +z)|yP6O5UR@eL{v-$j6&5@4g*o2565I-2Lb8;Ps>-$fQ+eLo?Q+LIDu +zA-kBB5PNRh%#^xabO|^d7`VmOCG||$p**a^y{&N#6lObAm<4MXJvj7g4o}#m(n03( +zALg@S!0z<~YZYWCXX2t$mq00>@|Ws7;2zU;F08bk8p>b8jxPKT65>EY;yy_50||aN +zjb?pKP46i(vlzksdsHU#d19c=4Rq--B$hjs{E8ups%bdZl7{-Msivz;5iC2FwGCR9 +zs*tKGXi6q=Mw5n}9G3aW<+F}wyc?-}!@gDxVO7R^g!pjU?bjTa4?gfI=`$Y`Np*(E +zHM8)j^;DCi4OPXwO>>|BvGzW3>bc@t)h20bxy4`qsnVutK-0Q*=ekE$6S~8jGV^JY +zZt(SfrgRBo^(7v4|5?K;W)L5Y%UkMy$Rn#1mCed#>(P3rhtn3i-xpHK)8^3u1j}vS +z0Br<7HOTFE(KC5Ha1JCsw<%sqKLkCu^;}6mq>`+j8`F<_-cBFH70(9mlUM`HR5VpwU8?6~1&Ia`^Ja%YTe +zN6x~Ca`7z(^pL)4K!-85uJ6hj`(kWkLnwcDs9NO9+GC^uyb5awd2ak#?29B|ImJ)6 +z%j%ya>@c$tO)CF=YWV}pckG5g1r))Rj5~z3}PmprUKdK+|_BLK%Cm48o+Y*liSbHZo*DjRe)MwJ2q +zQ5Bh8?*8fw75Nr)Qa2C}#P~@F!G05dCxjSkR@O8epXk;gQ9FC?%5_0hMFvp&sk==3 +zJY%Z!BroZNxrri-%fAO%Ua1`p)5U42FXMC12kta^!z4v9JrM7K1o1SPpM>o%g5CK^ +zXcYAtB(^4jq)b%=7g%3%C_0D`g2U==n)M2w52(K^_h$&{!<5plLBjL#atJfxltE(i +z32~@`-oWnckq8M09v-*1AUvn~f7-1{ED0inaHNf#gqXIOQC-?U?et6ElF0=YC}GSf +z?!hv+_*qmcw!<-ufe4`tV3U3l%AOxY2;qqT$L!yEri@BPEz~PPfko2s~~}ICLyE?ptjeBk0gdqnDFd|IZzvhz3#~ +z^4eY{S12DFYdzQENsSUU#3Z+qPheJxlz75ebe%FOo1gc39(IsFvoGmO3aq+Al!TTK +z2A{db3vfd|v7^uuE=t_+jaG4RlNwDrV~P2lg{{0Igr$qQS{S&_L}?ETEst2f^<55t +z&+!jK$|%)Cs07H0IOj$no$eA-uAJz=G#y0@#_$slFSyn(5WO^qIGhSB7A!8>8oCC! +zUgEh%xW>eV)-;!L^1+7I1EstLf?}&ET>B6OwW!G4U_&9#yG)o;H#_W#H|~O?@|nR= +z3h}ZUyYPpj?d3`a)xa!^=az7Znwlo<0=chuV!^~iElgL6obv_b; +zRFV0^ui0O%>dYrA=f+$bu3zW;-~vs7{X?A%*~8cx15v_!NB{u+k2-4t8st>gH?aDR +z6DB6C+HA3)2A_Udat-s+-3n@uDhMez5Iz{!sa%3#86caxr~ZLk*X}*&l8bW*gFY-d +z;U+tfBTG#DVwrRt3}G(wE&}dV8q11J;UeeGm9aA$1)iG;r?ff+z5}Wd@!lI>ene-> +z=upH5q?vTC!i&zD3qm()_Q3Gt;BEuUEE8hgRnGabr{ycIm4j^emSoBMcRGq5Vxk1D +z;gQyw!~M3St{S)`502EByc!T$N1OYcT3eiIP2aOXEO)X}<;Pd)^aL4&EIjk!EU4vs +zIASU}jNNYdWd!`32J*CTR~K_?gLCkUNblc&qiD7&Mfys^lp1eIZJ1{|5I_TLG%Y7< +zD5Up@v}~s5MWP=Lgg8xw*!)P4GD_JbE#=Hz&LZxoykE4ps<6&R-78cE=@1!ARB8S$ +z8LFs3t4drkB1D;npHWsa{9VzZ&kCCWZ7Lxl!+jrPzxSmul=lD=erHLqv8)}_ETKw?Xj>S3CVKxx~C#0+X|w)S+LJEaoac|=!2u- +z45RQA-!BOZc!68v;aH<0Y^mP+MM7Xi_e{2U@aSvbHfxi2G +zP&WyvD5e6Hr +znk-(jWxj@x+T1pHlfrvOlzXO(;UdRs>QIEwU)|S3YMh|$kVT`{?rFU%|*1-#}u&@ +zvB{LDQflIZIR?|eY<*u->QHxs^QOFmx|fjds2vUN&eC>pEJ=z87#BS9N}q0(OczxE +zTrC{ha1sg1t2GzdjYe-Vg48Jg@smKKv!}i>FfxzygD|`B?X{V;2r#*4BVKgx6APOE6DrUt3&&-0c(07SqvrO6 +z{^pCRBma+#%&6NkrMBz0@hQ5!vTkZhq@_bo633x_)E-fK_w=+h%elPAcgy?R54b+B +zbhRcBG(y{D2?d63wQspV{{B}d00zzo+Q={3&%6Gi`19Hd +zS`_~>{raoo--iJIs<;LkcKN@J1pY)KhWL3F@lT^(xW7SxQV&q*{}wc&`wxR(Q2!eI +z`eo?rR|9{YyZO^ZM8y9vh4U-KujiY8LhOMG!f%%S^|bR>^3Cf()g?LuVwU4 +w<$l`VmH$>$f7So{Qv9bj0MJeU7u$bdnB}FQK;Z`fAcB6#KoM-p^z*m>14q_gcK`qY + +literal 0 +HcmV?d00001 + +diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx +index abfc8694535c..52c36c55d03d 100644 +--- a/writerfilter/source/dmapper/DomainMapper.cxx ++++ b/writerfilter/source/dmapper/DomainMapper.cxx +@@ -3339,7 +3339,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) + } + } + // Form controls are not allowed in headers / footers; see sw::DocumentContentOperationsManager::InsertDrawObj() +- else if (!m_pImpl->m_pSdtHelper->getDateFormat().isEmpty() && !IsInHeaderFooter()) ++ else if (m_pImpl->m_pSdtHelper->validateDateFormat() && !IsInHeaderFooter()) + { + /* + * Here we assume w:sdt only contains a single text token. We need to +diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx +index 2e93f1b98c83..86d153092ddb 100644 +--- a/writerfilter/source/dmapper/SdtHelper.cxx ++++ b/writerfilter/source/dmapper/SdtHelper.cxx +@@ -17,6 +17,29 @@ + #include + #include + ++#include "DomainMapper_Impl.hxx" ++#include "StyleSheetTable.hxx" ++ ++namespace ++{ ++/// Maps OOXML values to UNO date format values. ++sal_Int16 getUNODateFormat(const OUString& rDateFormat) ++{ ++ // See com/sun/star/awt/UnoControlDateFieldModel.idl, DateFormat; sadly ++ // there are no constants. ++ sal_Int16 nDateFormat = -1; ++ ++ if (rDateFormat == "M/d/yyyy" || rDateFormat == "M.d.yyyy") ++ // MMDDYYYY ++ nDateFormat = 8; ++ else if (rDateFormat == "dd/MM/yyyy") ++ // DDMMYYYY ++ nDateFormat = 7; ++ ++ return nDateFormat; ++} ++} ++ + namespace writerfilter + { + namespace dmapper +@@ -85,6 +108,14 @@ void SdtHelper::createDropDownControl() + m_aDropDownItems.clear(); + } + ++bool SdtHelper::validateDateFormat() ++{ ++ bool bRet = !m_sDate.isEmpty() || getUNODateFormat(m_sDateFormat.toString()) != -1; ++ if (!bRet) ++ m_sDateFormat.setLength(0); ++ return bRet; ++} ++ + void SdtHelper::createDateControl(OUString const& rContentText, const beans::PropertyValue& rCharFormat) + { + uno::Reference xControlModel; +@@ -107,14 +138,17 @@ void SdtHelper::createDateControl(OUString const& rContentText, const beans::Pro + xPropertySet->setPropertyValue("Dropdown", uno::makeAny(true)); + + // See com/sun/star/awt/UnoControlDateFieldModel.idl, DateFormat; sadly there are no constants +- sal_Int16 nDateFormat = 0; + OUString sDateFormat = m_sDateFormat.makeStringAndClear(); +- if (sDateFormat == "M/d/yyyy" || sDateFormat == "M.d.yyyy") +- // Approximate with MM.dd.yyy +- nDateFormat = 8; +- else ++ sal_Int16 nDateFormat = getUNODateFormat(sDateFormat); ++ if (nDateFormat == -1) ++ { + // Set default format, so at least the date picker is created. + SAL_WARN("writerfilter", "unhandled w:dateFormat value"); ++ if (m_sDate.isEmpty()) ++ return; ++ else ++ nDateFormat = 0; ++ } + xPropertySet->setPropertyValue("DateFormat", uno::makeAny(nDateFormat)); + + util::Date aDate; +diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx +index b6691b55770b..8942c059e510 100644 +--- a/writerfilter/source/dmapper/SdtHelper.hxx ++++ b/writerfilter/source/dmapper/SdtHelper.hxx +@@ -88,6 +88,10 @@ public: + { + return m_sDateFormat; + } ++ ++ /// Decides if we have enough information to create a date control. ++ bool validateDateFormat(); ++ + OUStringBuffer& getLocale() + { + return m_sLocale; +-- +2.17.1 + diff --git a/SOURCES/0002-Related-rhbz-1618703-Properly-handle-failure-encodin.patch b/SOURCES/0002-Related-rhbz-1618703-Properly-handle-failure-encodin.patch new file mode 100644 index 0000000..6d9c1b8 --- /dev/null +++ b/SOURCES/0002-Related-rhbz-1618703-Properly-handle-failure-encodin.patch @@ -0,0 +1,124 @@ +From 0df85fe6a19d90d73397f8006c62d61e96976817 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Thu, 23 Aug 2018 16:55:40 +0200 +Subject: [PATCH 2/5] Related rhbz#1618703: Properly handle failure encoding + zip file +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +...when e.g. FIPS mode makes ZipFile::StaticGetCipher fail by throwing an +exception which would be caught by ZipPackageStream::saveChild (in +package/source/zippackage/ZipPackageStream.cxx) alright (and translated into +bSuccess = false), if ZipFile::StaticGetCipher didn't unhelpfully swallow and +ignore all exceptions in an outer try-catch. + +Change-Id: I14376128515df1dd4bdac921edd8ab94cc9b7617 +Reviewed-on: https://gerrit.libreoffice.org/59514 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit 3cc6d3611ac8cbbfb9803f3a084d02edde470ad3) +Reviewed-on: https://gerrit.libreoffice.org/59569 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 2b5ff36afab8888cdbc879ae2f34903ede190c04) +--- + package/source/zipapi/ZipFile.cxx | 75 ++++++++++++++----------------- + 1 file changed, 34 insertions(+), 41 deletions(-) + +diff --git a/package/source/zipapi/ZipFile.cxx b/package/source/zipapi/ZipFile.cxx +index 1ef81bf582a5..8126ebba305b 100644 +--- a/package/source/zipapi/ZipFile.cxx ++++ b/package/source/zipapi/ZipFile.cxx +@@ -162,54 +162,47 @@ uno::Reference< xml::crypto::XCipherContext > ZipFile::StaticGetCipher( const un + { + uno::Reference< xml::crypto::XCipherContext > xResult; + +- try ++ if (xEncryptionData->m_nDerivedKeySize < 0) + { +- if (xEncryptionData->m_nDerivedKeySize < 0) +- { +- throw ZipIOException("Invalid derived key length!" ); +- } ++ throw ZipIOException("Invalid derived key length!" ); ++ } + +- uno::Sequence< sal_Int8 > aDerivedKey( xEncryptionData->m_nDerivedKeySize ); +- if ( !xEncryptionData->m_nIterationCount && +- xEncryptionData->m_nDerivedKeySize == xEncryptionData->m_aKey.getLength() ) +- { +- // gpg4libre: no need to derive key, m_aKey is already +- // usable as symmetric session key +- aDerivedKey = xEncryptionData->m_aKey; +- } +- else if ( rtl_Digest_E_None != rtl_digest_PBKDF2( reinterpret_cast< sal_uInt8* >( aDerivedKey.getArray() ), +- aDerivedKey.getLength(), +- reinterpret_cast< const sal_uInt8 * > (xEncryptionData->m_aKey.getConstArray() ), +- xEncryptionData->m_aKey.getLength(), +- reinterpret_cast< const sal_uInt8 * > ( xEncryptionData->m_aSalt.getConstArray() ), +- xEncryptionData->m_aSalt.getLength(), +- xEncryptionData->m_nIterationCount ) ) +- { +- throw ZipIOException("Can not create derived key!" ); +- } ++ uno::Sequence< sal_Int8 > aDerivedKey( xEncryptionData->m_nDerivedKeySize ); ++ if ( !xEncryptionData->m_nIterationCount && ++ xEncryptionData->m_nDerivedKeySize == xEncryptionData->m_aKey.getLength() ) ++ { ++ // gpg4libre: no need to derive key, m_aKey is already ++ // usable as symmetric session key ++ aDerivedKey = xEncryptionData->m_aKey; ++ } ++ else if ( rtl_Digest_E_None != rtl_digest_PBKDF2( reinterpret_cast< sal_uInt8* >( aDerivedKey.getArray() ), ++ aDerivedKey.getLength(), ++ reinterpret_cast< const sal_uInt8 * > (xEncryptionData->m_aKey.getConstArray() ), ++ xEncryptionData->m_aKey.getLength(), ++ reinterpret_cast< const sal_uInt8 * > ( xEncryptionData->m_aSalt.getConstArray() ), ++ xEncryptionData->m_aSalt.getLength(), ++ xEncryptionData->m_nIterationCount ) ) ++ { ++ throw ZipIOException("Can not create derived key!" ); ++ } + +- if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::AES_CBC_W3C_PADDING ) +- { +- uno::Reference< uno::XComponentContext > xContext = xArgContext; +- if ( !xContext.is() ) +- xContext = comphelper::getProcessComponentContext(); ++ if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::AES_CBC_W3C_PADDING ) ++ { ++ uno::Reference< uno::XComponentContext > xContext = xArgContext; ++ if ( !xContext.is() ) ++ xContext = comphelper::getProcessComponentContext(); + +- uno::Reference< xml::crypto::XNSSInitializer > xCipherContextSupplier = xml::crypto::NSSInitializer::create( xContext ); ++ uno::Reference< xml::crypto::XNSSInitializer > xCipherContextSupplier = xml::crypto::NSSInitializer::create( xContext ); + +- xResult = xCipherContextSupplier->getCipherContext( xEncryptionData->m_nEncAlg, aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt, uno::Sequence< beans::NamedValue >() ); +- } +- else if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::BLOWFISH_CFB_8 ) +- { +- xResult = BlowfishCFB8CipherContext::Create( aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt ); +- } +- else +- { +- throw ZipIOException("Unknown cipher algorithm is requested!" ); +- } ++ xResult = xCipherContextSupplier->getCipherContext( xEncryptionData->m_nEncAlg, aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt, uno::Sequence< beans::NamedValue >() ); + } +- catch( ... ) ++ else if ( xEncryptionData->m_nEncAlg == xml::crypto::CipherID::BLOWFISH_CFB_8 ) ++ { ++ xResult = BlowfishCFB8CipherContext::Create( aDerivedKey, xEncryptionData->m_aInitVector, bEncrypt ); ++ } ++ else + { +- OSL_ENSURE( false, "Can not create cipher context!" ); ++ throw ZipIOException("Unknown cipher algorithm is requested!" ); + } + + return xResult; +-- +2.17.1 + diff --git a/SOURCES/0003-Related-rhbz-1618703-Properly-handle-failure-encodin.patch b/SOURCES/0003-Related-rhbz-1618703-Properly-handle-failure-encodin.patch new file mode 100644 index 0000000..8886ce7 --- /dev/null +++ b/SOURCES/0003-Related-rhbz-1618703-Properly-handle-failure-encodin.patch @@ -0,0 +1,284 @@ +From 7d7089282e764d5c8481602fb2067c619882e45e Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Thu, 23 Aug 2018 18:10:01 +0200 +Subject: [PATCH 3/5] Related rhbz#1618703: Properly handle failure encoding MS + file +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +...when e.g. FIPS mode makes EncryptRC4 (in sw/source/filter/ww8/wrtww8.cxx) +fail, but which hadn't been propagated out to SwWW8Writer::WriteStorage (in +sw/source/filter/ww8/wrtww8.cxx) + +Reviewed-on: https://gerrit.libreoffice.org/59518 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit 229340812f6e6cc8c868915055583f60c82a8cf3) +Conflicts: + sw/source/filter/ww8/docxexport.cxx + +...plus cherry-pick of follow-up 8114f976b897c4717368146a49d5404ef970c77a +"coverity#1438527 Nesting level does not match indentation" + +Reviewed-on: https://gerrit.libreoffice.org/59572 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara + +(cherry picked from commit 5be8cbdb874621111cb157a98013e254de3b269c) +Conflicts: + sw/source/filter/ww8/wrtww8.cxx + +Change-Id: I1123136ce1a25e181a0a27486954621a2dd095ea +--- + sw/source/filter/ww8/docxexport.cxx | 4 ++- + sw/source/filter/ww8/docxexport.hxx | 2 +- + sw/source/filter/ww8/rtfexport.cxx | 4 ++- + sw/source/filter/ww8/rtfexport.hxx | 2 +- + sw/source/filter/ww8/wrtww8.cxx | 42 +++++++++++++++++++++-------- + sw/source/filter/ww8/wrtww8.hxx | 6 ++--- + 6 files changed, 42 insertions(+), 18 deletions(-) + +diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx +index 477422bee989..0b40a58df2bf 100644 +--- a/sw/source/filter/ww8/docxexport.cxx ++++ b/sw/source/filter/ww8/docxexport.cxx +@@ -490,7 +490,7 @@ void DocxExport::OutputDML(uno::Reference const & xShape) + aExport.WriteShape(xShape); + } + +-void DocxExport::ExportDocument_Impl() ++ErrCode DocxExport::ExportDocument_Impl() + { + // Set the 'Track Revisions' flag in the settings structure + m_aSettings.trackRevisions = bool( RedlineFlags::On & m_nOrigRedlineFlags ); +@@ -530,6 +530,8 @@ void DocxExport::ExportDocument_Impl() + m_pStyles = nullptr; + delete m_pSections; + m_pSections = nullptr; ++ ++ return ERRCODE_NONE; + } + + void DocxExport::AppendSection( const SwPageDesc *pPageDesc, const SwSectionFormat* pFormat, sal_uLong nLnNum ) +diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx +index b553ba3f2601..8b42290594ae 100644 +--- a/sw/source/filter/ww8/docxexport.hxx ++++ b/sw/source/filter/ww8/docxexport.hxx +@@ -191,7 +191,7 @@ public: + + protected: + /// Format-dependent part of the actual export. +- virtual void ExportDocument_Impl() override; ++ virtual ErrCode ExportDocument_Impl() override; + + /// Output SwEndNode + virtual void OutputEndNode( const SwEndNode& ) override; +diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx +index 586dd01f23bd..679b96ac9a77 100644 +--- a/sw/source/filter/ww8/rtfexport.cxx ++++ b/sw/source/filter/ww8/rtfexport.cxx +@@ -660,7 +660,7 @@ void RtfExport::WritePageDescTable() + m_pTableInfo = std::make_shared(); + } + +-void RtfExport::ExportDocument_Impl() ++ErrCode RtfExport::ExportDocument_Impl() + { + // Make the header + Strm() +@@ -931,6 +931,8 @@ void RtfExport::ExportDocument_Impl() + WriteMainText(); + + Strm().WriteChar('}'); ++ ++ return ERRCODE_NONE; + } + + void RtfExport::PrepareNewPageDesc(const SfxItemSet* pSet, const SwNode& rNd, +diff --git a/sw/source/filter/ww8/rtfexport.hxx b/sw/source/filter/ww8/rtfexport.hxx +index 869a888e9b25..b470ef593f30 100644 +--- a/sw/source/filter/ww8/rtfexport.hxx ++++ b/sw/source/filter/ww8/rtfexport.hxx +@@ -117,7 +117,7 @@ public: + + protected: + /// Format-dependent part of the actual export. +- void ExportDocument_Impl() override; ++ ErrCode ExportDocument_Impl() override; + + void SectionBreaksAndFrames(const SwTextNode& /*rNode*/) override {} + +diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx +index 12a8ef8b6f89..66e4448191ba 100644 +--- a/sw/source/filter/ww8/wrtww8.cxx ++++ b/sw/source/filter/ww8/wrtww8.cxx +@@ -3110,7 +3110,7 @@ namespace + { + const sal_uLong WW_BLOCKSIZE = 0x200; + +- void EncryptRC4(msfilter::MSCodec_Std97& rCtx, SvStream &rIn, SvStream &rOut) ++ ErrCode EncryptRC4(msfilter::MSCodec_Std97& rCtx, SvStream &rIn, SvStream &rOut) + { + rIn.Seek(STREAM_SEEK_TO_END); + sal_uLong nLen = rIn.Tell(); +@@ -3121,14 +3121,17 @@ namespace + { + std::size_t nBS = (nLen - nI > WW_BLOCKSIZE) ? WW_BLOCKSIZE : nLen - nI; + nBS = rIn.ReadBytes(in, nBS); +- rCtx.InitCipher(nBlock); ++ if (!rCtx.InitCipher(nBlock)) { ++ return ERRCODE_IO_NOTSUPPORTED; ++ } + rCtx.Encode(in, nBS, in, nBS); + rOut.WriteBytes(in, nBS); + } ++ return ERRCODE_NONE; + } + } + +-void MSWordExportBase::ExportDocument( bool bWriteAll ) ++ErrCode MSWordExportBase::ExportDocument( bool bWriteAll ) + { + m_nCharFormatStart = DEFAULT_STYLES_COUNT; + m_nFormatCollStart = m_nCharFormatStart + m_pDoc->GetCharFormats()->size() - 1; +@@ -3195,7 +3198,7 @@ void MSWordExportBase::ExportDocument( bool bWriteAll ) + if ( m_pDoc->getIDocumentDrawModelAccess().GetDrawModel() ) + m_pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage( 0 )->RecalcObjOrdNums(); + +- ExportDocument_Impl(); ++ ErrCode err = ExportDocument_Impl(); + + m_aFrames.clear(); + +@@ -3208,6 +3211,8 @@ void MSWordExportBase::ExportDocument( bool bWriteAll ) + *m_pCurPam = *m_pOrigPam; + + m_pDoc->getIDocumentRedlineAccess().SetRedlineFlags(m_nOrigRedlineFlags); ++ ++ return err; + } + + bool SwWW8Writer::InitStd97CodecUpdateMedium( ::msfilter::MSCodec_Std97& rCodec ) +@@ -3262,7 +3267,7 @@ bool SwWW8Writer::InitStd97CodecUpdateMedium( ::msfilter::MSCodec_Std97& rCodec + return ( aEncryptionData.getLength() != 0 ); + } + +-void WW8Export::ExportDocument_Impl() ++ErrCode WW8Export::ExportDocument_Impl() + { + PrepareStorage(); + +@@ -3360,6 +3365,7 @@ void WW8Export::ExportDocument_Impl() + + StoreDoc1(); + ++ ErrCode err = ERRCODE_NONE; + if ( bEncrypt ) + { + SvStream *pStrmTemp, *pTableStrmTemp, *pDataStrmTemp; +@@ -3367,10 +3373,17 @@ void WW8Export::ExportDocument_Impl() + pTableStrmTemp = xTableStrm.get(); + pDataStrmTemp = xDataStrm.get(); + +- if ( pDataStrmTemp && pDataStrmTemp != pStrmTemp) +- EncryptRC4(aCtx, *pDataStrm, *pDataStrmTemp); ++ if ( pDataStrmTemp && pDataStrmTemp != pStrmTemp) { ++ err = EncryptRC4(aCtx, *pDataStrm, *pDataStrmTemp); ++ if (err != ERRCODE_NONE) { ++ goto done; ++ } ++ } + +- EncryptRC4(aCtx, *pTableStrm, *pTableStrmTemp); ++ err = EncryptRC4(aCtx, *pTableStrm, *pTableStrmTemp); ++ if (err != ERRCODE_NONE) { ++ goto done; ++ } + + // Write Unencrypted Header 52 bytes to the start of the table stream + // EncryptionVersionInfo (4 bytes): A Version structure where Version.vMajor MUST be 0x0001, and Version.vMinor MUST be 0x0001. +@@ -3388,7 +3401,10 @@ void WW8Export::ExportDocument_Impl() + pTableStrmTemp->WriteBytes(pSaltData, 16); + pTableStrmTemp->WriteBytes(pSaltDigest, 16); + +- EncryptRC4(aCtx, GetWriter().Strm(), *pStrmTemp); ++ err = EncryptRC4(aCtx, GetWriter().Strm(), *pStrmTemp); ++ if (err != ERRCODE_NONE) { ++ goto done; ++ } + + // Write Unencrypted Fib 68 bytes to the start of the workdocument stream + pFib->m_fEncrypted = true; // fEncrypted indicates the document is encrypted. +@@ -3398,6 +3414,7 @@ void WW8Export::ExportDocument_Impl() + + pStrmTemp->Seek( 0 ); + pFib->WriteHeader( *pStrmTemp ); ++ done:; + } + + DELETEZ( m_pGrf ); +@@ -3438,6 +3455,8 @@ void WW8Export::ExportDocument_Impl() + pDataStrm = nullptr; + GetWriter().GetStorage().Remove(SL::aData); + } ++ ++ return err; + } + + void WW8Export::PrepareStorage() +@@ -3517,16 +3536,17 @@ ErrCode SwWW8Writer::WriteStorage() + } + + // Do the actual export ++ ErrCode err = ERRCODE_NONE; + { + bool bDot = mpMedium->GetFilter()->GetName().endsWith("Vorlage"); + WW8Export aExport(this, pDoc, pCurPam, pOrigPam, bDot); + m_pExport = &aExport; +- aExport.ExportDocument( bWriteAll ); ++ err = aExport.ExportDocument( bWriteAll ); + m_pExport = nullptr; + } + + ::EndProgress( pDoc->GetDocShell() ); +- return ERRCODE_NONE; ++ return err; + } + + ErrCode SwWW8Writer::WriteMedium( SfxMedium& ) +diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx +index 7195677f4688..56bea59191d6 100644 +--- a/sw/source/filter/ww8/wrtww8.hxx ++++ b/sw/source/filter/ww8/wrtww8.hxx +@@ -574,7 +574,7 @@ public: + + public: + /// The main function to export the document. +- void ExportDocument( bool bWriteAll ); ++ ErrCode ExportDocument( bool bWriteAll ); + + /// Iterate through the nodes and call the appropriate OutputNode() on them. + void WriteText(); +@@ -788,7 +788,7 @@ public: + + protected: + /// Format-dependent part of the actual export. +- virtual void ExportDocument_Impl() = 0; ++ virtual ErrCode ExportDocument_Impl() = 0; + + /// Get the next position in the text node to output + sal_Int32 GetNextPos( SwWW8AttrIter const * pAttrIter, const SwTextNode& rNode, sal_Int32 nAktPos ); +@@ -985,7 +985,7 @@ public: + virtual bool AddSectionBreaksForTOX() const override { return false; } + private: + /// Format-dependent part of the actual export. +- virtual void ExportDocument_Impl() override; ++ virtual ErrCode ExportDocument_Impl() override; + + void PrepareStorage(); + void WriteFkpPlcUsw(); +-- +2.17.1 + diff --git a/SOURCES/0004-iRelated-rhbz-1618703-Properly-handle-failure-en-dec.patch b/SOURCES/0004-iRelated-rhbz-1618703-Properly-handle-failure-en-dec.patch new file mode 100644 index 0000000..72ee47e --- /dev/null +++ b/SOURCES/0004-iRelated-rhbz-1618703-Properly-handle-failure-en-dec.patch @@ -0,0 +1,204 @@ +From 9207290587ea8c8703486d60877731228eed80ce Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Fri, 24 Aug 2018 10:27:01 +0200 +Subject: [PATCH 4/5] iRelated rhbz#1618703: Properly handle failure + en-/decoding PDF file +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +...when e.g. FIPS mode makes the various calls to rtl_cipher_initARCFOUR fail. + +Reviewed-on: https://gerrit.libreoffice.org/59543 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit 185a14525f114e58b48236284ed8e8644bc40e48) +Reviewed-on: https://gerrit.libreoffice.org/59573 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara + +(cherry picked from commit 68ffc5c83ca73c58439b7c9935283541f007db44) +Conflicts: + filter/source/pdf/impdialog.cxx + sdext/source/pdfimport/pdfparse/pdfentries.cxx + vcl/source/gdi/pdfwriter_impl2.cxx + +Change-Id: Id1b2222249c151470e233ab814b21228f3a8b561 +--- + filter/source/pdf/impdialog.cxx | 7 +++ + .../source/pdfimport/pdfparse/pdfentries.cxx | 42 +++++++++++----- + vcl/source/gdi/pdfwriter_impl2.cxx | 48 +++++++++++-------- + 3 files changed, 67 insertions(+), 30 deletions(-) + +diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx +index 82aaf012505a..736ac0c15f26 100644 +--- a/filter/source/pdf/impdialog.cxx ++++ b/filter/source/pdf/impdialog.cxx +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1351,6 +1352,12 @@ IMPL_LINK_NOARG(ImpPDFTabSecurityPage, ClickmaPbSetPwdHdl, Button*, void) + mbHaveOwnerPassword = !aOwnerPW.isEmpty(); + + mxPreparedPasswords = vcl::PDFWriter::InitEncryption( aOwnerPW, aUserPW, true ); ++ if (!mxPreparedPasswords.is()) { ++ OUString msg; ++ ErrorHandler::GetErrorString(ERRCODE_IO_NOTSUPPORTED, msg); //TOOD: handle failure ++ ScopedVclPtrInstance(this, msg, VclMessageType::Error)->Execute(); ++ return; ++ } + + if( mbHaveOwnerPassword ) + { +diff --git a/sdext/source/pdfimport/pdfparse/pdfentries.cxx b/sdext/source/pdfimport/pdfparse/pdfentries.cxx +index 16563868f25c..074fb669c8da 100644 +--- a/sdext/source/pdfimport/pdfparse/pdfentries.cxx ++++ b/sdext/source/pdfimport/pdfparse/pdfentries.cxx +@@ -1159,9 +1159,13 @@ static bool check_user_password( const OString& rPwd, PDFFileImplData* pData ) + { + // see PDF reference 1.4 Algorithm 3.4 + // encrypt pad string +- rtl_cipher_initARCFOUR( pData->m_aCipher, rtl_Cipher_DirectionEncode, +- aKey, nKeyLen, +- nullptr, 0 ); ++ if (rtl_cipher_initARCFOUR( pData->m_aCipher, rtl_Cipher_DirectionEncode, ++ aKey, nKeyLen, ++ nullptr, 0 ) ++ != rtl_Cipher_E_None) ++ { ++ return false; //TODO: differentiate "failed to decrypt" from "wrong password" ++ } + rtl_cipher_encodeARCFOUR( pData->m_aCipher, nPadString, sizeof( nPadString ), + nEncryptedEntry, sizeof( nEncryptedEntry ) ); + bValid = (memcmp( nEncryptedEntry, pData->m_aUEntry, 32 ) == 0); +@@ -1172,8 +1176,12 @@ static bool check_user_password( const OString& rPwd, PDFFileImplData* pData ) + rtl_digest_updateMD5( pData->m_aDigest, nPadString, sizeof( nPadString ) ); + rtl_digest_updateMD5( pData->m_aDigest, pData->m_aDocID.getStr(), pData->m_aDocID.getLength() ); + rtl_digest_getMD5( pData->m_aDigest, nEncryptedEntry, sizeof(nEncryptedEntry) ); +- rtl_cipher_initARCFOUR( pData->m_aCipher, rtl_Cipher_DirectionEncode, +- aKey, sizeof(aKey), nullptr, 0 ); ++ if (rtl_cipher_initARCFOUR( pData->m_aCipher, rtl_Cipher_DirectionEncode, ++ aKey, sizeof(aKey), nullptr, 0 ) ++ != rtl_Cipher_E_None) ++ { ++ return false; //TODO: differentiate "failed to decrypt" from "wrong password" ++ } + rtl_cipher_encodeARCFOUR( pData->m_aCipher, + nEncryptedEntry, 16, + nEncryptedEntry, 16 ); // encrypt in place +@@ -1183,8 +1191,12 @@ static bool check_user_password( const OString& rPwd, PDFFileImplData* pData ) + for( sal_uInt32 j = 0; j < sizeof(aTempKey); j++ ) + aTempKey[j] = static_cast( aKey[j] ^ i ); + +- rtl_cipher_initARCFOUR( pData->m_aCipher, rtl_Cipher_DirectionEncode, +- aTempKey, sizeof(aTempKey), nullptr, 0 ); ++ if (rtl_cipher_initARCFOUR( pData->m_aCipher, rtl_Cipher_DirectionEncode, ++ aTempKey, sizeof(aTempKey), nullptr, 0 ) ++ != rtl_Cipher_E_None) ++ { ++ return false; //TODO: differentiate "failed to decrypt" from "wrong password" ++ } + rtl_cipher_encodeARCFOUR( pData->m_aCipher, + nEncryptedEntry, 16, + nEncryptedEntry, 16 ); // encrypt in place +@@ -1230,8 +1242,12 @@ bool PDFFile::setupDecryptionData( const OString& rPwd ) const + sal_uInt32 nKeyLen = password_to_key( rPwd, aKey, m_pData.get(), true ); + if( m_pData->m_nStandardRevision == 2 ) + { +- rtl_cipher_initARCFOUR( m_pData->m_aCipher, rtl_Cipher_DirectionDecode, +- aKey, nKeyLen, nullptr, 0 ); ++ if (rtl_cipher_initARCFOUR( m_pData->m_aCipher, rtl_Cipher_DirectionDecode, ++ aKey, nKeyLen, nullptr, 0 ) ++ != rtl_Cipher_E_None) ++ { ++ return false; //TODO: differentiate "failed to decrypt" from "wrong password" ++ } + rtl_cipher_decodeARCFOUR( m_pData->m_aCipher, + m_pData->m_aOEntry, 32, + nPwd, 32 ); +@@ -1244,8 +1260,12 @@ bool PDFFile::setupDecryptionData( const OString& rPwd ) const + sal_uInt8 nTempKey[ENCRYPTION_KEY_LEN]; + for( unsigned int j = 0; j < sizeof(nTempKey); j++ ) + nTempKey[j] = sal_uInt8(aKey[j] ^ i); +- rtl_cipher_initARCFOUR( m_pData->m_aCipher, rtl_Cipher_DirectionDecode, +- nTempKey, nKeyLen, nullptr, 0 ); ++ if (rtl_cipher_initARCFOUR( m_pData->m_aCipher, rtl_Cipher_DirectionDecode, ++ nTempKey, nKeyLen, nullptr, 0 ) ++ != rtl_Cipher_E_None) ++ { ++ return false; //TODO: differentiate "failed to decrypt" from "wrong password" ++ } + rtl_cipher_decodeARCFOUR( m_pData->m_aCipher, + nPwd, 32, + nPwd, 32 ); // decrypt inplace +diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx +index e4f567d6bfd9..e85cf15e4395 100644 +--- a/vcl/source/gdi/pdfwriter_impl2.cxx ++++ b/vcl/source/gdi/pdfwriter_impl2.cxx +@@ -1443,29 +1443,39 @@ bool PDFWriterImpl::computeODictionaryValue( const sal_uInt8* i_pPaddedOwnerPass + //Step 4, the key is in nMD5Sum + //step 5 already done, data is in i_pPaddedUserPassword + //step 6 +- rtl_cipher_initARCFOUR( aCipher, rtl_Cipher_DirectionEncode, +- nMD5Sum, i_nKeyLength , nullptr, 0 ); +- // encrypt the user password using the key set above +- rtl_cipher_encodeARCFOUR( aCipher, i_pPaddedUserPassword, ENCRYPTED_PWD_SIZE, // the data to be encrypted +- &io_rOValue[0], sal_Int32(io_rOValue.size()) ); //encrypted data +- //Step 7, only if 128 bit +- if( i_nKeyLength == SECUR_128BIT_KEY ) ++ if (rtl_cipher_initARCFOUR( aCipher, rtl_Cipher_DirectionEncode, ++ nMD5Sum, i_nKeyLength , nullptr, 0 ) ++ == rtl_Cipher_E_None) + { +- sal_uInt32 i, y; +- sal_uInt8 nLocalKey[ SECUR_128BIT_KEY ]; // 16 = 128 bit key +- +- for( i = 1; i <= 19; i++ ) // do it 19 times, start with 1 ++ // encrypt the user password using the key set above ++ rtl_cipher_encodeARCFOUR( aCipher, i_pPaddedUserPassword, ENCRYPTED_PWD_SIZE, // the data to be encrypted ++ &io_rOValue[0], sal_Int32(io_rOValue.size()) ); //encrypted data ++ //Step 7, only if 128 bit ++ if( i_nKeyLength == SECUR_128BIT_KEY ) + { +- for( y = 0; y < sizeof( nLocalKey ); y++ ) +- nLocalKey[y] = (sal_uInt8)( nMD5Sum[y] ^ i ); +- +- rtl_cipher_initARCFOUR( aCipher, rtl_Cipher_DirectionEncode, +- nLocalKey, SECUR_128BIT_KEY, nullptr, 0 ); //destination data area, on init can be NULL +- rtl_cipher_encodeARCFOUR( aCipher, &io_rOValue[0], sal_Int32(io_rOValue.size()), // the data to be encrypted +- &io_rOValue[0], sal_Int32(io_rOValue.size()) ); // encrypted data, can be the same as the input, encrypt "in place" +- //step 8, store in class data member ++ sal_uInt32 i, y; ++ sal_uInt8 nLocalKey[ SECUR_128BIT_KEY ]; // 16 = 128 bit key ++ ++ for( i = 1; i <= 19; i++ ) // do it 19 times, start with 1 ++ { ++ for( y = 0; y < sizeof( nLocalKey ); y++ ) ++ nLocalKey[y] = (sal_uInt8)( nMD5Sum[y] ^ i ); ++ ++ if (rtl_cipher_initARCFOUR( aCipher, rtl_Cipher_DirectionEncode, ++ nLocalKey, SECUR_128BIT_KEY, nullptr, 0 ) //destination data area, on init can be NULL ++ != rtl_Cipher_E_None) ++ { ++ bSuccess = false; ++ break; ++ } ++ rtl_cipher_encodeARCFOUR( aCipher, &io_rOValue[0], sal_Int32(io_rOValue.size()), // the data to be encrypted ++ &io_rOValue[0], sal_Int32(io_rOValue.size()) ); // encrypted data, can be the same as the input, encrypt "in place" ++ //step 8, store in class data member ++ } + } + } ++ else ++ bSuccess = false; + } + else + bSuccess = false; +-- +2.17.1 + diff --git a/SOURCES/0005-rhbz-1618703-Allow-to-use-OpenSSL-as-backend-for-rtl.patch b/SOURCES/0005-rhbz-1618703-Allow-to-use-OpenSSL-as-backend-for-rtl.patch new file mode 100644 index 0000000..3159b19 --- /dev/null +++ b/SOURCES/0005-rhbz-1618703-Allow-to-use-OpenSSL-as-backend-for-rtl.patch @@ -0,0 +1,684 @@ +From cb0fdfa1d2d98880839dda8114b0af7c4254bc86 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 22 Aug 2018 09:49:25 +0200 +Subject: [PATCH 5/5] rhbz#1618703: Allow to use OpenSSL as backend for + rtl/cipher.h +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +...with new configuration option --enable-cipher-openssl-backend + +rtl/cipher.h (which is part of the stable URE interface) offers functionality to +en-/decrypt data with Blowfish in ECB, CBC, and streaming CFB mode, and with RC4 +(aka ARCFOUR; which is a stream cipher). LO itself only uses Blowfish CFB and +RC4, so only those are wired to OpenSSL for now, for simplicity. Using Blowfish +ECB and CBC, or Blowfish CFB in DirectionBoth mode would cause failures for now +(cf. sal/qa/rtl/cipher/rtl_cipher.cxx); the assumption is that no external code +actually makes use of this functionality. + +Using NSS instead of OpenSSL could be an alternative, but there appears to be no +support in NSS for Blowfish in streaming CFB mode, only CKM_BLOWFISH_CBC for +CBC mode. + +Reviewed-on: https://gerrit.libreoffice.org/59428 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit 4bc16aeb73c1201f187742e0fefe35521fae77ac) +Reviewed-on: https://gerrit.libreoffice.org/59575 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara + +(cherry picked from commit 062ac27d7052bcdf0bdd5db978e041d4c614fd6b) +Conflicts: + sal/rtl/cipher.cxx + +Change-Id: I0bc042961539ed46844c96cb1c808209578528a0 +--- + config_host.mk.in | 1 + + configure.ac | 23 +++++ + sal/CppunitTest_sal_rtl.mk | 4 + + sal/Library_sal.mk | 8 ++ + sal/qa/rtl/cipher/rtl_cipher.cxx | 61 +++++++++++ + sal/rtl/cipher.cxx | 167 ++++++++++++++++++++++++++++++- + 6 files changed, 260 insertions(+), 4 deletions(-) + +diff --git a/config_host.mk.in b/config_host.mk.in +index 8cbbc5fee1d5..e683a5ac883c 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -109,6 +109,7 @@ export ENABLE_AVAHI=@ENABLE_AVAHI@ + export ENABLE_BREAKPAD=@ENABLE_BREAKPAD@ + export ENABLE_CAIRO_CANVAS=@ENABLE_CAIRO_CANVAS@ + export ENABLE_CHART_TESTS=@ENABLE_CHART_TESTS@ ++export ENABLE_CIPHER_OPENSSL_BACKEND=@ENABLE_CIPHER_OPENSSL_BACKEND@ + export ENABLE_LIBCMIS=@ENABLE_LIBCMIS@ + export ENABLE_COINMP=@ENABLE_COINMP@ + export SYSTEM_COINMP=@SYSTEM_COINMP@ +diff --git a/configure.ac b/configure.ac +index 938d20571242..70890733a2a8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1392,6 +1392,11 @@ AC_ARG_ENABLE(openssl, + use only if you are hacking on it.]), + ,enable_openssl=yes) + ++libo_FUZZ_ARG_ENABLE(cipher-openssl-backend, ++ AS_HELP_STRING([--enable-cipher-openssl-backend], ++ [Enable using OpenSSL as the actual implementation of the rtl/cipher.h functionality. ++ Requires --enable-openssl.])) ++ + AC_ARG_ENABLE(library-bin-tar, + AS_HELP_STRING([--enable-library-bin-tar], + [Enable the building and reused of tarball of binary build for some 'external' libraries. +@@ -9240,6 +9245,24 @@ fi + + AC_SUBST([DISABLE_OPENSSL]) + ++if test "$enable_cipher_openssl_backend" = yes && test "$DISABLE_OPENSSL" = TRUE; then ++ if test "$libo_fuzzed_enable_cipher_openssl_backend" = yes; then ++ AC_MSG_NOTICE([Resetting --enable-cipher-openssl-backend=no]) ++ enable_cipher_openssl_backend=no ++ else ++ AC_MSG_ERROR([--enable-cipher-openssl-backend needs OpenSSL, but --disable-openssl was given.]) ++ fi ++fi ++AC_MSG_CHECKING([whether to enable the OpenSSL backend for rtl/cipher.h]) ++ENABLE_CIPHER_OPENSSL_BACKEND= ++if test "$enable_cipher_openssl_backend" = yes; then ++ AC_MSG_RESULT([yes]) ++ ENABLE_CIPHER_OPENSSL_BACKEND=TRUE ++else ++ AC_MSG_RESULT([no]) ++fi ++AC_SUBST([ENABLE_CIPHER_OPENSSL_BACKEND]) ++ + dnl =================================================================== + dnl Check for building gnutls + dnl =================================================================== +diff --git a/sal/CppunitTest_sal_rtl.mk b/sal/CppunitTest_sal_rtl.mk +index 43533fc5ab1c..c2eaa72daa26 100644 +--- a/sal/CppunitTest_sal_rtl.mk ++++ b/sal/CppunitTest_sal_rtl.mk +@@ -63,4 +63,8 @@ $(call gb_CppunitTest_get_target,sal_rtl) : \ + + $(eval $(call gb_CppunitTest_use_external,sal_rtl,boost_headers)) + ++ifeq ($(ENABLE_CIPHER_OPENSSL_BACKEND),TRUE) ++$(eval $(call gb_CppunitTest_add_defs,sal_rtl,-DLIBO_CIPHER_OPENSSL_BACKEND)) ++endif ++ + # vim: set noet sw=4 ts=4: +diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk +index 17d89ae79e4a..bce0437a19bf 100644 +--- a/sal/Library_sal.mk ++++ b/sal/Library_sal.mk +@@ -255,4 +255,12 @@ $(eval $(call gb_Library_add_exception_objects,sal,\ + + endif # ifneq ($(OS),WNT) + ++ifeq ($(ENABLE_CIPHER_OPENSSL_BACKEND),TRUE) ++$(eval $(call gb_Library_add_defs,sal,-DLIBO_CIPHER_OPENSSL_BACKEND)) ++$(eval $(call gb_Library_use_externals,sal, \ ++ openssl \ ++ openssl_headers \ ++)) ++endif ++ + # vim: set noet sw=4 ts=4: +diff --git a/sal/qa/rtl/cipher/rtl_cipher.cxx b/sal/qa/rtl/cipher/rtl_cipher.cxx +index e8877a92c5d5..57c22eb573ac 100644 +--- a/sal/qa/rtl/cipher/rtl_cipher.cxx ++++ b/sal/qa/rtl/cipher/rtl_cipher.cxx +@@ -37,8 +37,12 @@ public: + void create_001() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); ++#endif + } + void create_002() + { +@@ -48,8 +52,12 @@ public: + void create_003() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); ++#endif + } + void create_004() + { +@@ -101,14 +109,22 @@ public: + void createBF_001() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); ++#endif + } + void createBF_002() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeCBC); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); ++#endif + } + void createBF_003() + { +@@ -141,6 +157,12 @@ public: + void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, rtl::OString const& _sPlainTextStr) + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++ (void) _nKeyValue; ++ (void) _nArgValue; ++ (void) _sPlainTextStr; ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; +@@ -184,11 +206,18 @@ public: + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); ++#endif + } + + void test_encode_and_decode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, rtl::OString const& _sPlainTextStr) + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++ (void) _nKeyValue; ++ (void) _nArgValue; ++ (void) _sPlainTextStr; ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; +@@ -236,6 +265,7 @@ public: + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); ++#endif + } + + void decode_001() +@@ -286,8 +316,12 @@ public: + void destroy_001() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeCBC); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroy(aCipher); ++#endif + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, +@@ -305,10 +339,14 @@ public: + void destroyBF_001() + { + rtlCipher aCipher = rtl_cipher_createBF(rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + rtl_cipher_destroyBF(aCipher); + // more proforma + // should not GPF ++#endif + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, +@@ -326,6 +364,12 @@ public: + void test_encode(sal_uInt8 _nKeyValue, sal_uInt8 _nArgValue, sal_uInt8 _nDataValue) + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++ (void) _nKeyValue; ++ (void) _nArgValue; ++ (void) _nDataValue; ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; +@@ -360,6 +404,7 @@ public: + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); ++#endif + } + + void encode_001() +@@ -407,6 +452,9 @@ public: + void init_001() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; +@@ -424,11 +472,15 @@ public: + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); ++#endif + } + + void init_002() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; +@@ -447,10 +499,14 @@ public: + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); ++#endif + } + void init_003() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; +@@ -469,10 +525,14 @@ public: + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); ++#endif + } + void init_004() + { + rtlCipher aCipher = rtl_cipher_create(rtl_Cipher_AlgorithmBF, rtl_Cipher_ModeECB); ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ CPPUNIT_ASSERT_EQUAL(rtlCipher(nullptr), aCipher); ++#else + CPPUNIT_ASSERT_MESSAGE("create failed.", aCipher != nullptr); + + sal_uInt32 nKeyLen = 16; +@@ -492,6 +552,7 @@ public: + delete [] pKeyBuffer; + + rtl_cipher_destroy(aCipher); ++#endif + } + // Change the following lines only, if you add, remove or rename + // member functions of the current class, +diff --git a/sal/rtl/cipher.cxx b/sal/rtl/cipher.cxx +index 80e096f5a3a1..9dd649848eff 100644 +--- a/sal/rtl/cipher.cxx ++++ b/sal/rtl/cipher.cxx +@@ -22,7 +22,16 @@ + #include + #include + #include ++#include ++#include ++#include ++#include + ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++#include ++#endif ++ ++#if !defined LIBO_CIPHER_OPENSSL_BACKEND + #define RTL_CIPHER_NTOHL(c, l) \ + ((l) = ((sal_uInt32)(*((c)++))) << 24, \ + (l) |= ((sal_uInt32)(*((c)++))) << 16, \ +@@ -81,6 +90,7 @@ + case 1: *(--(c)) = (sal_uInt8)(((xl) >> 24) & 0xff); \ + } \ + } ++#endif + + typedef rtlCipherError(SAL_CALL cipher_init_t) ( + rtlCipher Cipher, +@@ -182,6 +192,7 @@ void SAL_CALL rtl_cipher_destroy(rtlCipher Cipher) SAL_THROW_EXTERN_C() + pImpl->m_delete(Cipher); + } + ++#if !defined LIBO_CIPHER_OPENSSL_BACKEND + #define CIPHER_ROUNDS_BF 16 + + struct CipherKeyBF +@@ -189,9 +200,13 @@ struct CipherKeyBF + sal_uInt32 m_S[4][256]; + sal_uInt32 m_P[CIPHER_ROUNDS_BF + 2]; + }; ++#endif + + struct CipherContextBF + { ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ EVP_CIPHER_CTX * m_context; ++#else + CipherKeyBF m_key; + union + { +@@ -199,6 +214,7 @@ struct CipherContextBF + sal_uInt8 m_byte[8]; + } m_iv; + sal_uInt32 m_offset; ++#endif + }; + + struct CipherBF_Impl +@@ -207,11 +223,13 @@ struct CipherBF_Impl + CipherContextBF m_context; + }; + ++#if !defined LIBO_CIPHER_OPENSSL_BACKEND + static rtlCipherError BF_init( + CipherContextBF *ctx, + rtlCipherMode eMode, + const sal_uInt8 *pKeyData, sal_Size nKeyLen, + const sal_uInt8 *pArgData, sal_Size nArgLen); ++#endif + + static rtlCipherError BF_update( + CipherContextBF *ctx, +@@ -220,6 +238,7 @@ static rtlCipherError BF_update( + const sal_uInt8 *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen); + ++#if !defined LIBO_CIPHER_OPENSSL_BACKEND + static void BF_updateECB( + CipherContextBF *ctx, + rtlCipherDirection direction, +@@ -608,7 +627,9 @@ static const CipherKeyBF BF_key = + 0x9216D5D9L, 0x8979FB1BL + } + }; ++#endif + ++#if !defined LIBO_CIPHER_OPENSSL_BACKEND + static rtlCipherError BF_init( + CipherContextBF *ctx, + rtlCipherMode eMode, +@@ -675,6 +696,7 @@ static rtlCipherError BF_init( + + return rtl_Cipher_E_None; + } ++#endif + + static rtlCipherError BF_update( + CipherContextBF *ctx, +@@ -691,6 +713,31 @@ static rtlCipherError BF_update( + return rtl_Cipher_E_BufferSize; + + /* Update. */ ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ assert(eMode == rtl_Cipher_ModeStream); ++ (void) eDirection; ++ while (nDatLen > std::numeric_limits::max()) { ++ int outl; ++ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, std::numeric_limits::max()) ++ == 0) ++ { ++ return rtl_Cipher_E_Unknown; ++ } ++ assert(outl == std::numeric_limits::max()); ++ pData += std::numeric_limits::max(); ++ nDatLen -= std::numeric_limits::max(); ++ pBuffer += std::numeric_limits::max(); ++ } ++ int outl; ++ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, static_cast(nDatLen)) == 0) ++ { ++ return rtl_Cipher_E_Unknown; ++ } ++ assert(outl == static_cast(nDatLen)); ++ // A final call to EVP_CipherFinal_ex is intentionally missing; it wouldn't fit the rtl/cipher.h ++ // interface, and is hopefully not needed, as each individual Blowfish CFB update step doesn't ++ // hold back any data that would need to be finally flushed. ++#else + if (eMode == rtl_Cipher_ModeECB) + { + /* Block mode. */ +@@ -726,9 +773,11 @@ static rtlCipherError BF_update( + pBuffer += 1; + } + } ++#endif + return rtl_Cipher_E_None; + } + ++#if !defined LIBO_CIPHER_OPENSSL_BACKEND + static void BF_updateECB( + CipherContextBF *ctx, + rtlCipherDirection direction, +@@ -931,6 +980,7 @@ static sal_uInt32 BF(CipherKeyBF *key, sal_uInt32 x) + + return y; + } ++#endif + + /** + rtl_cipherBF (Blowfish) implementation. +@@ -943,6 +993,12 @@ rtlCipher SAL_CALL rtl_cipher_createBF(rtlCipherMode Mode) SAL_THROW_EXTERN_C() + + if (Mode == rtl_Cipher_ModeInvalid) + return nullptr; ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ if (Mode != rtl_Cipher_ModeStream) { ++ // Cannot easily support ModeECB and ModeCBC, and they aren't used in the LO code at least: ++ return nullptr; ++ } ++#endif + + pImpl = static_cast(rtl_allocateZeroMemory(sizeof (CipherBF_Impl))); + if (pImpl) +@@ -978,9 +1034,45 @@ rtlCipherError SAL_CALL rtl_cipher_initBF( + else + return rtl_Cipher_E_Direction; + ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ if (pImpl->m_cipher.m_direction == rtl_Cipher_DirectionBoth) { ++ // Cannot easily support DirectionBoth, and it isn't used in the LO code at least: ++ return rtl_Cipher_E_Direction; ++ } ++ if (nKeyLen > std::numeric_limits::max()) { ++ return rtl_Cipher_E_BufferSize; ++ } ++ if (pImpl->m_context.m_context != nullptr) { ++ EVP_CIPHER_CTX_free(pImpl->m_context.m_context); ++ } ++ pImpl->m_context.m_context = EVP_CIPHER_CTX_new(); ++ if (pImpl->m_context.m_context == nullptr) { ++ return rtl_Cipher_E_Memory; ++ } ++ unsigned char iv[8]; ++ auto const n = std::min(nArgLen, sal_Size(8)); ++ std::memcpy(iv, pArgData, n); ++ std::memset(iv + n, 0, 8 - n); ++ if (EVP_CipherInit_ex( ++ pImpl->m_context.m_context, EVP_bf_cfb(), nullptr, nullptr, iv, ++ pImpl->m_cipher.m_direction == rtl_Cipher_DirectionDecode ? 0 : 1) ++ == 0) ++ { ++ return rtl_Cipher_E_Unknown; ++ } ++ if (EVP_CIPHER_CTX_set_key_length(pImpl->m_context.m_context, static_cast(nKeyLen)) == 0) { ++ return rtl_Cipher_E_Unknown; ++ } ++ if (EVP_CipherInit_ex(pImpl->m_context.m_context, nullptr, nullptr, pKeyData, nullptr, -1) == 0) ++ { ++ return rtl_Cipher_E_Unknown; ++ } ++ return rtl_Cipher_E_None; ++#else + return BF_init( + &(pImpl->m_context), pImpl->m_cipher.m_mode, + pKeyData, nKeyLen, pArgData, nArgLen); ++#endif + } + + rtlCipherError SAL_CALL rtl_cipher_encodeBF( +@@ -1037,18 +1129,31 @@ void SAL_CALL rtl_cipher_destroyBF(rtlCipher Cipher) SAL_THROW_EXTERN_C() + if (pImpl) + { + if (pImpl->m_cipher.m_algorithm == rtl_Cipher_AlgorithmBF) ++ { ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ if (pImpl->m_context.m_context != nullptr) { ++ EVP_CIPHER_CTX_free(pImpl->m_context.m_context); ++ } ++#endif + rtl_freeZeroMemory(pImpl, sizeof(CipherBF_Impl)); ++ } + else + rtl_freeMemory(pImpl); + } + } + ++#if !defined LIBO_CIPHER_OPENSSL_BACKEND + #define CIPHER_CBLOCK_ARCFOUR 256 ++#endif + + struct ContextARCFOUR_Impl + { ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ EVP_CIPHER_CTX * m_context; ++#else + unsigned int m_S[CIPHER_CBLOCK_ARCFOUR]; + unsigned int m_X, m_Y; ++#endif + }; + + struct CipherARCFOUR_Impl +@@ -1066,6 +1171,29 @@ static rtlCipherError rtl_cipherARCFOUR_init_Impl( + ContextARCFOUR_Impl *ctx, + const sal_uInt8 *pKeyData, sal_Size nKeyLen) + { ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ if (nKeyLen > std::numeric_limits::max()) { ++ return rtl_Cipher_E_BufferSize; ++ } ++ if (ctx->m_context != nullptr) { ++ EVP_CIPHER_CTX_free(ctx->m_context); ++ } ++ ctx->m_context = EVP_CIPHER_CTX_new(); ++ if (ctx->m_context == nullptr) { ++ return rtl_Cipher_E_Memory; ++ } ++ if (EVP_CipherInit_ex(ctx->m_context, EVP_rc4(), nullptr, nullptr, nullptr, 0) == 0) { ++ // RC4 en- and decryption is identical, so we can use 0=decrypt regardless of direction, ++ // and thus also support rtl_Cipher_DirectionBoth ++ return rtl_Cipher_E_Unknown; ++ } ++ if (EVP_CIPHER_CTX_set_key_length(ctx->m_context, static_cast(nKeyLen)) == 0) { ++ return rtl_Cipher_E_Unknown; ++ } ++ if (EVP_CipherInit_ex(ctx->m_context, nullptr, nullptr, pKeyData, nullptr, -1) == 0) { ++ return rtl_Cipher_E_Unknown; ++ } ++#else + unsigned int K[CIPHER_CBLOCK_ARCFOUR]; + unsigned int *L, *S; + unsigned int x, y, t; +@@ -1106,6 +1234,7 @@ static rtlCipherError rtl_cipherARCFOUR_init_Impl( + /* Initialize counters X and Y. */ + ctx->m_X = 0; + ctx->m_Y = 0; ++#endif + + return rtl_Cipher_E_None; + } +@@ -1115,10 +1244,6 @@ static rtlCipherError rtl_cipherARCFOUR_update_Impl( + const sal_uInt8 *pData, sal_Size nDatLen, + sal_uInt8 *pBuffer, sal_Size nBufLen) + { +- unsigned int *S; +- unsigned int t; +- sal_Size k; +- + /* Check arguments. */ + if (!pData || !pBuffer) + return rtl_Cipher_E_Argument; +@@ -1126,6 +1251,32 @@ static rtlCipherError rtl_cipherARCFOUR_update_Impl( + if (!((0 < nDatLen) && (nDatLen <= nBufLen))) + return rtl_Cipher_E_BufferSize; + ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ while (nDatLen > std::numeric_limits::max()) { ++ int outl; ++ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, std::numeric_limits::max()) ++ == 0) ++ { ++ return rtl_Cipher_E_Unknown; ++ } ++ assert(outl == std::numeric_limits::max()); ++ pData += std::numeric_limits::max(); ++ nDatLen -= std::numeric_limits::max(); ++ pBuffer += std::numeric_limits::max(); ++ } ++ int outl; ++ if (EVP_CipherUpdate(ctx->m_context, pBuffer, &outl, pData, static_cast(nDatLen)) == 0) { ++ return rtl_Cipher_E_Unknown; ++ } ++ assert(outl == static_cast(nDatLen)); ++ // A final call to EVP_CipherFinal_ex is intentionally missing; it wouldn't fit the rtl/cipher.h ++ // interface, and is hopefully not needed, as each individual RC4 update step doesn't hold back ++ // any data that would need to be finally flushed. ++#else ++ unsigned int *S; ++ unsigned int t; ++ sal_Size k; ++ + /* Update. */ + S = &(ctx->m_S[0]); + for (k = 0; k < nDatLen; k++) +@@ -1147,6 +1298,7 @@ static rtlCipherError rtl_cipherARCFOUR_update_Impl( + t = (S[x] + S[y]) % CIPHER_CBLOCK_ARCFOUR; + pBuffer[k] = pData[k] ^ ((sal_uInt8)(S[t] & 0xff)); + } ++#endif + + return rtl_Cipher_E_None; + } +@@ -1249,7 +1401,14 @@ void SAL_CALL rtl_cipher_destroyARCFOUR(rtlCipher Cipher) SAL_THROW_EXTERN_C() + if (pImpl) + { + if (pImpl->m_cipher.m_algorithm == rtl_Cipher_AlgorithmARCFOUR) ++ { ++#if defined LIBO_CIPHER_OPENSSL_BACKEND ++ if (pImpl->m_context.m_context != nullptr) { ++ EVP_CIPHER_CTX_free(pImpl->m_context.m_context); ++ } ++#endif + rtl_freeZeroMemory(pImpl, sizeof(CipherARCFOUR_Impl)); ++ } + else + rtl_freeMemory(pImpl); + } +-- +2.17.1 + diff --git a/SOURCES/libreoffice-6.0.6.1.tar.xz.asc b/SOURCES/libreoffice-6.0.6.1.tar.xz.asc new file mode 100644 index 0000000..5caf103 --- /dev/null +++ b/SOURCES/libreoffice-6.0.6.1.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIcBAABAgAGBQJbRQRlAAoJEPQ0oe+v7q6j9CYP/jVao6G/9bad2JfIxhr6X9kb +7iVBNh4jVTzrOC+sPGykshAZ/WqehJ0XJNm5xB0PfPIZ1rc7tYmpaHnaakw7jH0q +kLGsbBMgfnNrcboiO7qiVUdgeU5idBLUH8Md/REVLJ34GueMdfvklEcMjoquv3n7 +4h5y0+St8FBLjefp4FyB7LLAnLfcSELZ73idn3w2t+sRp5QvCfYgWKdmarqrbZtk +bwAFFgsCjSMFz7eqV+xNU1JtuphOGThFHdhe016VmEURQegHHYord3FUf7PGFklp +xWVfkectZkgOfQCewvNQuYKOUxptkhDRYr8OR0FGRV1yKXJlMZksqvumcEF6scEp +7+kBtnY8BL50jCMG29hhJ8fkFKsSfTlstkHLpHq1lzKdjpuD1/90gdJCbgowjDbe +XfmIhH4brEpwxow9RjZ9glb/Akpql7JrUscgta2pLzmQrLEuiAyE61qDAkrKj8nZ +H5Jpt3zRO5CKpm2kEKkx6auOjvJFIWruMmkPeH5M0eBYjTuZb09f7rEkSPFctOMn +DXuDa40+Mr+lt9gOp8HtktN+bpIGiwZHLjDcAR1+TEhlriEXo7ydxRl2gjThN8u5 +EqzQ7390B/xrFQ8P13Vqc2ICqM1S3m64tDTmTOZk2kzDAcmjUbg8/a/7kRr3UF7f +BO4UJvoNZxPlopo/jxM7 +=Z/eu +-----END PGP SIGNATURE----- diff --git a/SOURCES/libreoffice-help-6.0.6.1.tar.xz.asc b/SOURCES/libreoffice-help-6.0.6.1.tar.xz.asc new file mode 100644 index 0000000..953e1ab --- /dev/null +++ b/SOURCES/libreoffice-help-6.0.6.1.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIcBAABAgAGBQJbRQRsAAoJEPQ0oe+v7q6jxGoQAIxhQNVCN8BB4QqbJDILOg81 +IJvogAAlSSC/n105SumrWnrDMmdYx5Sq8kKSKLJaVBUbNwG6f6GYe4eu03QTSG10 +WJ36tvUisx8E7b+ur8kLzGaE7v6S6q0OKkf711ieUnZn/YC1mDNoOr7yYAuNpcCn +iTdt5war6i1DswCG4wiVrO2fMiZ8oHlvfpHU3TDNPHL+0qcYaGtce6/N5v4jnVLh +JIqNmQWAbquD+Tljk4AYsL/5vnj8qzTH4VWrL3bjJPBCBDbNoUXlaI6vo5o9AGRN +OVASSyMahFyNsDRWv7zD9MKkNQ5E5gASgUE8YqyMS1xW++uUARW1cmk7zhGFDd1D +BTCi9S9hBmEZoNtsIzClInEExugwV5PcY5ShNiXEvN5QyjQMvKmvWLJtYaBVdJUD +Bcxs52fNyBGsxqzQvfX3+QHXReOIoNCDB8jpatNxaEUYvO+rcaaoRBqfhCiM44fv +fMbTRCAtCY/9PXK//YWihk303OT2/ZF3+AEHsRPOm9Ykh3EdH1naU9ewM3ZTkDIO +fSiTLVQTEX5qIo09UgKMpPm0bZnFMHObic5wAYZ56kmEOHVmiGhsHwmHFQe8PlF8 +phb4TLIaaKHQaugonBkX0Gg/9WPz3MT1wCh2kiZSt5Ix/qJgewIav9EMWc/P/LsZ +wBpki/58B7YsIyEazAK1 +=NeOu +-----END PGP SIGNATURE----- diff --git a/SOURCES/libreoffice-multiliblauncher.sh b/SOURCES/libreoffice-multiliblauncher.sh new file mode 100644 index 0000000..05c9d3f --- /dev/null +++ b/SOURCES/libreoffice-multiliblauncher.sh @@ -0,0 +1,16 @@ +#!/bin/sh +OOO_ARCH=$(uname -m) +case $OOO_ARCH in + x86_64 | s390x | sparc64 | aarch64) + OOO_LIB_DIR="/usr/lib64" + SECONDARY_LIB_DIR="/usr/lib" + ;; + * ) + OOO_LIB_DIR="/usr/lib" + SECONDARY_LIB_DIR="/usr/lib64" + ;; +esac +if [ ! -x $OOO_LIB_DIR/BRAND/program/LAUNCHER ]; then + OOO_LIB_DIR="$SECONDARY_LIB_DIR" +fi +exec $OOO_LIB_DIR/BRAND/program/LAUNCHER "$@" diff --git a/SOURCES/libreoffice-translations-6.0.6.1.tar.xz.asc b/SOURCES/libreoffice-translations-6.0.6.1.tar.xz.asc new file mode 100644 index 0000000..c6e7351 --- /dev/null +++ b/SOURCES/libreoffice-translations-6.0.6.1.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIcBAABAgAGBQJbRQRvAAoJEPQ0oe+v7q6jLwgQALn0L72pJHBauDOR0RTBI3ha +2umJnT6QM2N30H5Fe4IiqqH2X0C7kToCRzxZWIbLibMYqjuNbxClOzUsSsQLduJS +QzfjQSBDwXJy4US650n934vDsyxObKj1e8oVKAyCEen3HGsAPojkKD/C5BaUjDAv +gzRp2eHKRc75hKDpM5d57o34VSO6cvnhS0t1fOFNzA1xyK+WIuOw401rRNvrcCyu +Mu273oFREqdDMUjE67s2Pl9H92Xf7aqSKqix+U5eOygSTdBFt91v2ST1/i9Fp0Ra +PTE7JjR1Cr1pWSzSwZBvXXHXColCr05DWYebOEmbMUzrlxh7VpHkQD85QdN9sHPP +FYCYfy+oF47lW3mU+2NnTKWoQQKOrIofv8ONJow68VHjoTtW1ktK0S/gz9agwJD3 +L8IGmWDLO+G4QfgKF1/3aMVz/ctoXgpkWEENTm0rUdTB6Fz9QkSQh/ku/krhhF57 +E8/ZCbD48GY97lnRaZdNBCm9+ZV+21bo3ImbpozfWLcF7hxE4w43sn2ms1aeAWdd +dnGKIOAMHk5YrBbskbLZ1IlgfQnomK5jQ+wspwweGyquucIkTlVhDtINEDjvt9rk +gliphVVy6WhgFbwblPNq+LEAhN/pSaKwOjE3PMHx2pP+ocS1Uy6kyTOx8JCkDtUH +GQ8RJwQQPabbGNWiQwjP +=R9e8 +-----END PGP SIGNATURE----- diff --git a/SPECS/libreoffice.spec b/SPECS/libreoffice.spec new file mode 100644 index 0000000..e941602 --- /dev/null +++ b/SPECS/libreoffice.spec @@ -0,0 +1,4426 @@ +# download path contains version without the last (fourth) digit +%global libo_version 6.0.6 +# Should contain .alphaX / .betaX, if this is pre-release (actually +# pre-RC) version. The pre-release string is part of tarball file names, +# so we need a way to define it easily at one place. +%global libo_prerelease %{nil} +# Should contain any suffix of release tarball name, e.g., -buildfix1. +%global libo_buildfix %{nil} +# rhbz#715152 state vendor +%if 0%{?rhel} +%global vendoroption --with-vendor="Red Hat, Inc." +%endif +%if 0%{?fedora} +%global vendoroption --with-vendor="The Fedora Project" +%endif +%if 0%{?rhel} && 0%{?rhel} < 8 +%global libo_use_python3 %{nil} +%global libo_python python +%global libo_python_executable %{__python2} +%global libo_python_sitearch %{python_sitearch} +%else +%global libo_use_python3 1 +%global libo_python python3 +%global libo_python_executable %{__python3} +%global libo_python_sitearch %{python3_sitearch} +%endif +# rhbz#465664 jar-repacking breaks help by reordering META-INF/MANIFEST.MF +%global __jar_repack %{nil} +# make it easier to download sources from pre-release site +%if 0%{?prerelease} +%global source_url http://dev-builds.libreoffice.org/pre-releases/src +%else +%global source_url http://download.documentfoundation.org/libreoffice/src/%{libo_version} +%endif +# URL for external projects' tarballs +%global external_url http://dev-www.libreoffice.org/src +%if 0%{?rhel} && 0%{?rhel} < 8 +%nil +%else +%global weak_deps 1 +%global file_triggers 1 +%endif +%global girapiversion 0.1 + +# get english only and no-langpacks for a faster smoketest build +# fedpkg compile/install/local/mockbuild does not handle --without ATM, +# so it is necessary to change this to bcond_with to achieve the same +# effect +%bcond_without langpacks + +# remove workdir at the end of %%build, to allow build on space-constrained machines +%ifarch s390 s390x +%bcond_without smallbuild +%else +%bcond_with smallbuild +%endif + +# generated by %%langpack definitions +%global langpack_langs %{nil} + +%global bundling_options %{nil} + +Summary: Free Software Productivity Suite +Name: libreoffice +Epoch: 1 +Version: %{libo_version}.1 +Release: 13%{?libo_prerelease}%{?dist} +License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and MPLv2.0 and CC0 +URL: http://www.libreoffice.org/ + +Source0: %{source_url}/libreoffice-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz +Source1: %{source_url}/libreoffice-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz.asc +Source2: %{source_url}/libreoffice-help-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz +Source3: %{source_url}/libreoffice-help-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz.asc +Source4: %{source_url}/libreoffice-translations-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz +Source5: %{source_url}/libreoffice-translations-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz.asc +Source6: gpgkey-C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3.gpg.asc +Source7: http://dev-www.libreoffice.org/extern/185d60944ea767075d27247c3162b3bc-unowinreg.dll +Source8: libreoffice-multiliblauncher.sh + +Source9: %{external_url}/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +Source10: %{external_url}/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +Source11: %{external_url}/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +#Unfortunately later versions of hsqldb changed the file format, so if we use a later version we loose +#backwards compatability. +Source12: %{external_url}/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +%global bundling_options %{?bundling_options} --without-system-hsqldb + +Provides: bundled(hsqldb) = 1.8.0 +Provides: bundled(rhino) = 1.5 +Provides: bundled(xsltml) = 2.1.2 + +# symbolic icons +Source42: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-base-symbolic.svg +Source43: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-calc-symbolic.svg +Source44: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-draw-symbolic.svg +Source45: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-impress-symbolic.svg +Source46: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-main-symbolic.svg +Source47: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-math-symbolic.svg +Source48: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-writer-symbolic.svg + +%if 0%{?rhel} + +%if 0%{?rhel} < 8 +Source200: %{external_url}/mdds-1.3.1.tar.bz2 +Source201: %{external_url}/harfbuzz-1.7.0.tar.bz2 +Source202: %{external_url}/graphite2-minimal-1.3.10.tgz +Source203: %{external_url}/gpgme-1.9.0.tar.bz2 +Source204: %{external_url}/libgpg-error-1.27.tar.bz2 +Source205: %{external_url}/libassuan-2.4.3.tar.bz2 +Source206: %{external_url}/cppunit-1.14.0.tar.gz +Source207: %{external_url}/libqxp-0.0.1.tar.xz +Source208: %{external_url}/libepubgen-0.1.0.tar.bz2 +Source209: %{external_url}/liborcus-0.13.3.tar.gz +%global bundling_options %{?bundling_options} --without-system-mdds --without-system-harfbuzz --without-system-graphite --without-system-gpgmepp --without-system-cppunit --without-system-libqxp --without-system-libepubgen --without-system-orcus + +Provides: bundled(gpgme) = 1.9.0 +Provides: bundled(graphite2) = 1.3.10 +Provides: bundled(harfbuzz) = 1.7.0 +Provides: bundled(libassuan) = 2.4.3 +Provides: bundled(libepubgen) = 0.1.0 +Provides: bundled(libgpg-error) = 1.27 +Provides: bundled(liborcus) = 0.13.3 +Provides: bundled(libqxp) = 0.0.1 +Provides: bundled(mdds) = 1.3.1 +%endif +%endif + +# build tools +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: bc +BuildRequires: binutils +BuildRequires: bison +BuildRequires: desktop-file-utils +BuildRequires: doxygen +BuildRequires: findutils +BuildRequires: flex +BuildRequires: gcc-c++ +BuildRequires: gdb +BuildRequires: gettext +BuildRequires: git +BuildRequires: gnupg2 +BuildRequires: gperf +BuildRequires: icu +BuildRequires: libtool-ltdl-devel +BuildRequires: make +BuildRequires: perl(Digest::MD5) +%if 0%{?fedora} +BuildRequires: libappstream-glib +%endif +BuildRequires: ucpp +BuildRequires: zip + +# libs / headers - common +BuildRequires: %{libo_python}-devel +BuildRequires: boost-devel +BuildRequires: cups-devel +BuildRequires: fontpackages-devel +BuildRequires: glm-devel +BuildRequires: hyphen-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: lpsolve-devel +BuildRequires: openldap-devel +BuildRequires: pam-devel +BuildRequires: pkgconfig(bluez) +BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: pkgconfig(dconf) +BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(evolution-data-server-1.2) +BuildRequires: pkgconfig(expat) +BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(glew) >= 1.10.0 +BuildRequires: pkgconfig(glu) +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(gstreamer-1.0) +BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) +BuildRequires: pkgconfig(gtk+-2.0) +BuildRequires: pkgconfig(gtk+-3.0) +BuildRequires: pkgconfig(hunspell) +BuildRequires: pkgconfig(ice) +BuildRequires: pkgconfig(icu-i18n) +BuildRequires: pkgconfig(lcms2) +BuildRequires: pkgconfig(libabw-0.1) +BuildRequires: pkgconfig(libcdr-0.1) +BuildRequires: pkgconfig(libclucene-core) +BuildRequires: pkgconfig(libcmis-0.5) +BuildRequires: pkgconfig(libcurl) +BuildRequires: pkgconfig(libetonyek-0.1) +BuildRequires: pkgconfig(libexttextcat) +BuildRequires: pkgconfig(libfreehand-0.1) +BuildRequires: pkgconfig(libidn) +BuildRequires: pkgconfig(liblangtag) +BuildRequires: pkgconfig(libmspub-0.1) +BuildRequires: pkgconfig(libmwaw-0.3) +BuildRequires: pkgconfig(libodfgen-0.1) +BuildRequires: pkgconfig(libpagemaker-0.0) +BuildRequires: pkgconfig(libpq) +BuildRequires: pkgconfig(librevenge-0.0) +BuildRequires: pkgconfig(libstaroffice-0.0) +BuildRequires: pkgconfig(libvisio-0.1) +BuildRequires: pkgconfig(libwpd-0.10) +BuildRequires: pkgconfig(libwpg-0.3) +BuildRequires: pkgconfig(libwps-0.4) +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(libxslt) +BuildRequires: pkgconfig(libzmf-0.0) +BuildRequires: pkgconfig(mythes) +BuildRequires: pkgconfig(neon) +BuildRequires: pkgconfig(nss) +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(poppler) +BuildRequires: pkgconfig(poppler-cpp) +BuildRequires: pkgconfig(redland) +BuildRequires: pkgconfig(sane-backends) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(xinerama) +BuildRequires: pkgconfig(xmlsec1-nss) +BuildRequires: pkgconfig(xt) +BuildRequires: pkgconfig(zlib) +BuildRequires: unixODBC-devel +BuildRequires: %{libo_python_executable} + +# libs / headers - conditional +%if 0%{?fedora} +BuildRequires: kdelibs4-devel +BuildRequires: pkgconfig(libe-book-0.1) +%endif + +%if 0%{?rhel} && 0%{?rhel} < 8 +%nil +%else +BuildRequires: gpgmepp-devel +BuildRequires: pkgconfig(cppunit) >= 1.14.0 +BuildRequires: pkgconfig(graphite2) +BuildRequires: pkgconfig(harfbuzz) +BuildRequires: pkgconfig(libeot) +BuildRequires: pkgconfig(libepubgen-0.1) +BuildRequires: pkgconfig(liborcus-0.13) +BuildRequires: pkgconfig(libqxp-0.0) +BuildRequires: pkgconfig(mdds-1.2) +%endif + +# java stuff +BuildRequires: ant +BuildRequires: bsh +BuildRequires: java-devel +BuildRequires: junit +BuildRequires: pentaho-reporting-flow-engine + +# fonts needed for tests +BuildRequires: dejavu-sans-fonts +BuildRequires: google-crosextra-carlito-fonts +BuildRequires: liberation-mono-fonts +BuildRequires: liberation-sans-fonts +BuildRequires: liberation-serif-fonts + +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-impress%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-draw%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-math%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-base%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-emailmerge%{?_isa} = %{epoch}:%{version}-%{release} + +# not upstreamed: upstream wants an automatic restart after a crash; we +# want a nice abrt report +Patch0: 0001-don-t-suppress-crashes.patch +# not upstreamed +Patch1: 0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch +# not upstreamed +Patch2: 0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch +# not upstreamed +Patch3: 0001-gtk3-only-for-3.20.patch +Patch4: 0001-Related-tdf-105998-except-cut-and-paste-as-bitmap-in.patch +Patch5: 0001-request-installation-of-langpack-via-packagekit.patch +Patch6: 0001-forcepoint-fix-out-of-bounds-read-in-ICU.patch +Patch7: 0001-Upgrade-to-ICU-61.1.patch +Patch8: 0001-Keep-the-still-relevant-part-of-external-icu-icu4c-u.patch +Patch9: 0001-We-use-ICU-61-now.patch +Patch10: 0001-Upgrade-to-ICU-62.1.patch +Patch11: 0001-Use-ICU_MAJOR-instead-of-hard-coded-Upgrade-to-ICU-6.patch +Patch12: 0001-implement-pdf-export-of-underline-for-outlined-font.patch +Patch13: 0001-cov-scan-help-warnings.patch +Patch14: 0001-cov-scan-warnings.patch +Patch15: 0001-Adapt-to-Python-3.patch +Patch16: 0001-Related-rhbz-1618703-Properly-handle-failure-decodin.patch +Patch17: 0002-Related-rhbz-1618703-Properly-handle-failure-encodin.patch +Patch18: 0003-Related-rhbz-1618703-Properly-handle-failure-encodin.patch +Patch19: 0004-iRelated-rhbz-1618703-Properly-handle-failure-en-dec.patch +Patch20: 0005-rhbz-1618703-Allow-to-use-OpenSSL-as-backend-for-rtl.patch +Patch21: 0001-Resolves-rhbz-1647507-try-inputted-password-as-both-.patch +Patch22: 0001-tdf-121203-DOCX-import-fix-loss-of-free-form-text-in.patch +Patch23: 0001-keep-pyuno-script-processing-below-base-uri.patch + +%if 0%{?rhel} +# not upstreamed +Patch500: 0001-disable-libe-book-support.patch +%endif + +%global instdir %{_libdir} +%global baseinstdir %{instdir}/libreoffice +%global sdkinstdir %{baseinstdir}/sdk +%global datadir %{_datadir}/%{name} +%global fontname opensymbol +# HACK: Get the data dir for -data subpackage. I haven't found any better +# way to do this... +%global oldname %{name} +%global name %{name}-data +%global lodatadocdir %{_pkgdocdir} +%global name %{oldname} + +# rhbz#1085420 make sure we do not provide bundled libraries +%if 0%{?rhel} && 0%{?rhel} < 8 +%global libo_bundled_libs_filter ^liborcus(-parser)?-0\\.13\\.so.*$ +%global __provides_exclude %{libo_bundled_libs_filter} +%global __requires_exclude %{libo_bundled_libs_filter} +%endif + +%if 0%{?__isa_bits} == 64 +%global mark64 ()(64bit) +%endif + +%description +LibreOffice is an Open Source, community-developed, office productivity suite. +It includes the key desktop applications, such as a word processor, +spreadsheet, presentation manager, formula editor and drawing program, with a +user interface and feature set similar to other office suites. Sophisticated +and flexible, LibreOffice also works transparently with a variety of file +formats, including Microsoft Office File Formats. + +%package filters +Summary: All import / export filters +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-draw%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-graphicfilter%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-impress%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-math%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-xsltfilter%{?_isa} = %{epoch}:%{version}-%{release} + +%description filters +Metapackage to pull in all subpackages that contain import or export +filters. + +%package core +Summary: Core modules for LibreOffice +Requires: %{name}-%{fontname}-fonts = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-gtk3%{?_isa} = %{epoch}:%{version}-%{release} +Requires: liberation-sans-fonts, liberation-serif-fonts, liberation-mono-fonts +Requires: dejavu-sans-fonts, dejavu-serif-fonts, dejavu-sans-mono-fonts +Requires: google-crosextra-caladea-fonts, google-crosextra-carlito-fonts +Requires: %{name}-langpack-en = %{epoch}:%{version}-%{release} +# rhbz#949106 libreoffice-core drags in both openjdk 1.7.0 and 1.8.0 +Requires: java-headless >= 1:1.6 +Obsoletes: libreoffice-headless < 1:4.4.0.0 +Provides: libreoffice-headless = %{epoch}:%{version}-%{release} +Provides: libreoffice-headless%{?_isa} = %{epoch}:%{version}-%{release} + +%description core +The shared core libraries and support files for LibreOffice. + +%package pyuno +Summary: Python support for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{libo_python_executable} + +%description pyuno +Python bindings for the LibreOffice UNO component model. Allows scripts both +external to LibreOffice and within the internal LibreOffice scripting framework +to be written in python. + +%package base +Summary: Database front-end for LibreOffice +Requires: pentaho-reporting-flow-engine +Requires: postgresql-jdbc +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description base +GUI database front-end for LibreOffice. Allows creation and management of +databases through a GUI. + +%package bsh +Summary: BeanShell support for LibreOffice +Requires: bsh +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} + +%description bsh +Support BeanShell scripts in LibreOffice. + +%package officebean +Summary: JavaBean for LibreOffice Components +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-officebean-common = %{epoch}:%{version}-%{release} + +%description officebean +Allows embedding of LibreOffice documents within the Java environment. It +provides a Java AWT window into which the backend LibreOffice process draws +its visual representation + +%package officebean-common +Summary: Common JavaBean for LibreOffice Components +Requires: %{name}-data = %{epoch}:%{version}-%{release} +BuildArch: noarch + +%description officebean-common +Arch-independent part of %{name}-officebean. + +%package rhino +Summary: JavaScript support for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} + +%description rhino +Support JavaScript scripts in LibreOffice. + +%package wiki-publisher +Summary: Create Wiki articles on MediaWiki servers with LibreOffice +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description wiki-publisher +The Wiki Publisher enables you to create Wiki articles on MediaWiki servers +without having to know the syntax of the MediaWiki markup language. Publish +your new and existing documents transparently with writer to a wiki page. + +%package nlpsolver +Summary: Non-linear solver engine for LibreOffice Calc +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description nlpsolver +A non-linear solver engine for Calc as an alternative to the default linear +programming model when more complex, nonlinear programming is required. + +%package ogltrans +Summary: 3D OpenGL slide transitions for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-impress%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description ogltrans +OpenGL Transitions enable 3D slide transitions to be used in LibreOffice. +Requires good quality 3D support for your graphics card for best experience. + +%package pdfimport +Summary: PDF Importer for LibreOffice Draw +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-draw%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description pdfimport +The PDF Importer imports PDF into drawing documents to preserve layout +and enable basic editing of PDF documents. + +%package %{fontname}-fonts +Summary: LibreOffice dingbats font +Requires: fontpackages-filesystem +BuildArch: noarch + +%description %{fontname}-fonts +A dingbats font, OpenSymbol, suitable for use by LibreOffice for bullets and +mathematical symbols. + +%package writer +Summary: LibreOffice Word Processor Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description writer +The LibreOffice Word Processor application. + +%package emailmerge +Summary: Email mail-merge component for LibreOffice +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} + +%description emailmerge +Enables the LibreOffice writer module to mail-merge to email. + +%package calc +Summary: LibreOffice Spreadsheet Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description calc +The LibreOffice Spreadsheet application. + +%package draw +Summary: LibreOffice Drawing Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pdfimport%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-graphicfilter%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description draw +The LibreOffice Drawing Application. + +%package impress +Summary: LibreOffice Presentation Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-graphicfilter%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description impress +The LibreOffice Presentation Application. + +%package math +Summary: LibreOffice Equation Editor Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description math +The LibreOffice Equation Editor Application. + +%package graphicfilter +Summary: LibreOffice Extra Graphic filters +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description graphicfilter +The graphicfilter module for LibreOffice provides graphic filters, e.g. svg and +flash filters. + +%package xsltfilter +Summary: Optional xsltfilter module for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} + +%description xsltfilter +The xsltfilter module for LibreOffice, provides additional docbook and +xhtml export transforms. Install this to enable docbook export. + +%package postgresql +Summary: PostgreSQL connector for LibreOffice +Requires: %{name}-base%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description postgresql +A PostgreSQL connector for the database front-end for LibreOffice. Allows +creation and management of PostgreSQL databases through a GUI. + +%package ure +Summary: UNO Runtime Environment +#rhbz#1164551 we want to ensure that a libjvm.so of this arch is available +Requires: %{name}-ure-common = %{epoch}:%{version}-%{release} +Requires: unzip%{?_isa}, libjvm.so%{?mark64} + +%description ure +UNO is the component model of LibreOffice. UNO offers interoperability between +programming languages, other components models and hardware architectures, +either in process or over process boundaries, in the Intranet as well as in the +Internet. UNO components may be implemented in and accessed from any +programming language for which a UNO implementation (AKA language binding) and +an appropriate bridge or adapter exists + +%package ure-common +Summary: Common UNO Runtime Environment +BuildArch: noarch + +%description ure-common +Arch-independent part of %{name}-ure. + +%package sdk +Summary: Software Development Kit for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: unzip%{?_isa}, java-devel + +%description sdk +The LibreOffice SDK is an add-on for the LibreOffice office suite. It provides +the necessary tools for programming using the LibreOffice APIs and for creating +extensions (UNO components) for LibreOffice. To set the build environment for +building against the sdk use %{sdkinstdir}/setsdkenv_unix.sh. + +%package sdk-doc +Summary: Software Development Kit documentation for LibreOffice + +%description sdk-doc +This provides documentation for programming using the LibreOffice APIs +and examples of creating extensions (UNO components) for LibreOffice. + +%package glade +Summary: Support for creating LibreOffice dialogs in glade +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description glade +%{name}-glade contains a catalog of LibreOffice-specific widgets for +glade and ui-previewer tool to check the visual appearance of dialogs. + +%package librelogo +Summary: LibreLogo scripting language +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} + +%description librelogo +Enables LibreLogo scripting in Writer. LibreLogo is a Logo-like +programming language with interactive vectorgraphics for education and +DTP. + +%package data +Summary: LibreOffice data files +BuildArch: noarch + +%description data +%{name}-data contains platform-independent data files. + +%package x11 +Summary: LibreOffice generic X11 support plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin%{?_isa} = %{epoch}:%{version}-%{release} +%if 0%{?weak_deps} +Supplements: (%{name}-core%{?_isa} and Xserver) +%endif + +%description x11 +A plug-in for LibreOffice that enables generic X11 support. + +%package gtk2 +Summary: LibreOffice GTK+ 2 integration plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-x11%{?_isa} = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin%{?_isa} = %{epoch}:%{version}-%{release} +%if 0%{?weak_deps} +Supplements: (%{name}-core%{?_isa} and gtk2%{?_isa}) +%endif + +%description gtk2 +A plug-in for LibreOffice that enables integration into GTK+ 2 environment. + +%package gtk3 +Summary: LibreOffice GTK+ 3 integration plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: gstreamer1(element-gtksink)%{?mark64} +%if 0%{?weak_deps} +Supplements: (%{name}-core%{?_isa} and gtk3%{?_isa}) +%endif + +%description gtk3 +A plug-in for LibreOffice that enables integration into GTK+ 3 environment. + +%if 0%{?fedora} + +%package kde4 +Summary: LibreOffice KDE integration plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin%{?_isa} = %{epoch}:%{version}-%{release} + +%description kde4 +A plug-in for LibreOffice that enables integration into the KDE desktop environment. + +%endif + +%package -n libreofficekit +Summary: A library providing access to LibreOffice functionality +License: MPLv2.0 + +%description -n libreofficekit +LibreOfficeKit can be used to access LibreOffice functionality +through C/C++, without any need to use UNO. + +For now it only offers document conversion (in addition to an +experimental tiled rendering API). + +%package -n libreofficekit-devel +Summary: Development files for libreofficekit +Requires: libreofficekit%{?_isa} = %{epoch}:%{version}-%{release} +License: MPLv2.0 + +%description -n libreofficekit-devel +The libreofficekit-devel package contains libraries and header files for +developing applications that use libreofficekit. + +%if 0%{?_enable_debug_packages} + +%package gdb-debug-support +Summary: Additional support for debugging with gdb +Requires: gdb%{?_isa} +Requires: %{libo_python}-six +Requires: libreoffice-core%{?_isa} = %{epoch}:%{version}-%{release} +%if 0%{?weak_deps} +Supplements: libreoffice-debuginfo%{?_isa} +%endif + +%description gdb-debug-support +This package provides gdb pretty printers for package %{name}. + +%files gdb-debug-support +%{_datadir}/gdb/auto-load%{baseinstdir} +%{_datadir}/libreoffice/gdb + +%endif + +%define _langpack_common(Eg:j:l:) \ +%{!-E: \ +%{baseinstdir}/program/resource/%{-g:%{-g*}}%{!-g:%{-l*}}/LC_MESSAGES/*.mo \ +%{baseinstdir}/share/registry/res/registry_%{-l*}.xcd \ +} \ +%{baseinstdir}/share/template/%{-l*} \ +%{baseinstdir}/share/registry/Langpack-%{-l*}.xcd \ +%{baseinstdir}/share/registry/res/fcfg_langpack_%{-l*}.xcd \ +%{baseinstdir}/share/wizards/resources_%{-j:%{-j*}}%{!-j:%{-l*}}.properties \ +%{nil} + +# Defines a language pack subpackage. +# +# It's necessary to define language code (-l) and language name (-n). +# Additionally, it's possible +# * to require autocorr, hunspell, hyphen or mythes package or font for +# given language, +# * to provide libreoffice-langpack-loc package, where loc is glibc +# locale--this is necessary for yum to pick it automatically, +# * to require other, unrelated, packages, +# * to specify file serving as file list. +# For these, lower case character argument takes an argument specifying +# language, upper case character argument uses language from -l. +# +# All remaining arguments are considered to be files and added to the file +# list. +# +# Aa: autocorr dependency +# c: additional config file (just the name stem) +# E: base (US English) langpack +# Ff: font language dependency +# g: glibc/java locale +# Hh: hunspell dependency +# i: additional language added to this package +# j: java locale for the additional language +# k: glibc locale for the additional language +# L: internal (LibreOffice) language code, used in file names +# l: language code, e.g., cs +# Mm: mythes dependency +# n: language name, e.g., Czech +# p: Provides: of libreoffice-langpack +# r: comma-separated list of additional requires +# S:s: script classification (cjk, ctl). -S is only a marker, as it does +# not add any .xcd into the package (the file does not exist for at +# least one CTL-using locale, si) +# T has help files +# Xx: has autotext definitions +# Yy: hyphen dependency +# +# Example: +# libreoffice-langpack-cs: langpack for Czech lang. requiring hyphen-cs, +# autocorr-cs, mythes-cs-CZ and suitable font: +# %%langpack -l cs -n Czech -H -A -m cs-CZ +# b de q tu z BCD G IJK N PQR U Z0123456789 +%define langpack(Aa:c:EFf:g:Hh:i:j:k:L:l:Mm:n:p:r:S:s:TXx:Yy:) \ +%define lang %{-l:%{-l*}}%{!-l:%{error:Language code not defined}} \ +%define _langpack_lang %{-L:%{-L*}}%{!-L:%{lang}} \ +%define pkgname langpack-%{lang} \ +%define langname %{-n:%{-n*}}%{!-n:%{error:Language name not defined}} \ +\ +%global langpack_langs %{langpack_langs} %{_langpack_lang} %{-i:%{-i*}} \ +\ +%package %{pkgname} \ +Summary: %{langname} language pack for LibreOffice \ +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} \ +%{-a:Requires: autocorr-%{-a*}}%{!-a:%{-A:Requires: autocorr-%{lang}}} \ +%{-f:Requires: font(:lang=%{-f*})}%{!-f:%{-F:Requires: font(:lang=%{lang})}} \ +%{-h:Requires: hunspell-%{-h*}}%{!-h:%{-H:Requires: hunspell-%{lang}}} \ +%{-m:Requires: mythes-%{-m*}}%{!-m:%{-M:Requires: mythes-%{lang}}} \ +%{-y:Requires: hyphen-%{-y*}}%{!-y:%{-Y:Requires: hyphen-%{lang}}} \ +%{-r:Requires: %{-r*}} \ +%{-p:Provides: %{name}-langpack-%{-p*} = %{epoch}:%{version}-%{release}} \ +%{-p:Provides: %{name}-langpack-%{-p*}%{?_isa} = %{epoch}:%{version}-%{release}} \ +%if 0%{?weak_deps} \ +%{-p:Supplements: (%{name}-core%{?_isa} and langpacks-%{-p*})} \ +%{!-p:Supplements: (%{name}-core%{?_isa} and langpacks-%{lang})} \ +%{-T:Requires: %{name}-help-%{lang}} \ +%endif \ +\ +%description %{pkgname} \ +Provides additional %{langname} translations and resources for LibreOffice. \ +\ +%{-T: \ +%package help-%{lang} \ +Summary: %{langname} help for LibreOffice \ +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} \ +\ +%description help-%{lang} \ +Provides %{langname} help for LibreOffice. \ +\ +%files help-%{lang} \ +%docdir %{baseinstdir}/help/%{_langpack_lang} \ +%{baseinstdir}/help/%{_langpack_lang} \ +} \ +\ +%files %{pkgname} \ +%{expand:%%_langpack_common %{-E} -l %{_langpack_lang} %{-g:-g %{-g*} -j %{-g*}}} \ +%{-x:%{baseinstdir}/share/autotext/%{-x*}}%{!-x:%{-X:%{baseinstdir}/share/autotext/%{_langpack_lang}}} \ +%{-c:%{baseinstdir}/share/registry/%{-c*}.xcd} \ +%{-s:%{baseinstdir}/share/registry/%{-s*}_%{_langpack_lang}.xcd} \ +%{-i:%{expand:%%_langpack_common %{-E} -l %{-i*} %{-k:-g %{-k*}} %{-j:-j %{-j*}}}} \ +%{nil} + +# Defines an auto-correction subpackage. +# +# i: add autocorrections from additional language +# l: language code +# n: language name +# L the filename does not contain country code +# +# All remaining arguments are considered to be files and added to the file +# list. +%define autocorr(i:Ll:n:) \ +%define lang %{-l:%{-l*}}%{!-l:%{error:Language code not defined}} \ +%define pkgname autocorr-%{lang} \ +%define langname %{-n:%{-n*}}%{!-n:%{error:Language name not defined}} \ +\ +%package -n %{pkgname} \ +Summary: %{langname} auto-correction rules \ +BuildArch: noarch \ +\ +%description -n %{pkgname} \ +Rules for auto-correcting common %{langname} typing errors. \ +\ +%files -n %{pkgname} \ +%doc instdir/LICENSE \ +%dir %{_datadir}/autocorr \ +%{-L:%{_datadir}/autocorr/acor_%{lang}.dat} \ +%{!-L:%{_datadir}/autocorr/acor_%{lang}-*.dat} \ +%{nil} + +%langpack -l en -n English -F -h en-US -Y -M -A -E -L en-US -T -X -g en_US + +%if %{with langpacks} + +%langpack -l af -n Afrikaans -F -H -Y -A +%langpack -l ar -n Arabic -F -H -s ctl -T +%langpack -l as -n Assamese -F -H -Y +%langpack -l bg -n Bulgarian -F -H -Y -M -A -T -X +%langpack -l bn -n Bengali -F -H -Y -T +%langpack -l br -n Breton -F -H +%langpack -l ca -n Catalan -F -H -Y -M -A -T -X +%langpack -l cs -n Czech -F -H -Y -M -A -T -X +%langpack -l cy -n Welsh -F -H -Y +%langpack -l da -n Danish -F -H -Y -M -A -T -X +%langpack -l de -n German -F -H -Y -M -A -T -X +%langpack -l dz -n Dzongkha -F -s ctl -T +%langpack -l el -n Greek -F -H -Y -M -T +%langpack -l es -n Spanish -F -H -Y -M -A -T -X +%langpack -l et -n Estonian -F -H -Y -T +%langpack -l eu -n Basque -F -H -Y -T +%langpack -l fa -n Farsi -A -H -Y -s ctl -X +%langpack -l fi -n Finnish -F -r libreoffice-voikko -A -T -X +%langpack -l fr -n French -F -H -Y -M -A -T -X +%langpack -l ga -n Irish -F -H -Y -M -A +%langpack -l gl -n Galician -F -H -Y -T +%langpack -l gu -n Gujarati -F -H -Y -s ctl -T +%langpack -l he -n Hebrew -F -H -s ctl -T +%langpack -l hi -n Hindi -F -H -Y -s ctl -T -X +%langpack -l hr -n Croatian -F -H -Y -A -T -X +%langpack -l hu -n Hungarian -F -H -Y -M -A -T -X +%{baseinstdir}/share/wordbook/hu_AkH11.dic +%langpack -l id -n Indonesian -F -H -Y -T +%langpack -l it -n Italian -F -H -Y -M -A -T -X +%langpack -l ja -n Japanese -F -A -s cjk -T -X +%langpack -l kk -n Kazakh -F -H +%langpack -l kn -n Kannada -F -H -Y +%langpack -l ko -n Korean -F -H -A -s cjk -T -X +%langpack -l lt -n Lithuanian -F -H -Y -A -T -X +%langpack -l lv -n Latvian -F -H -Y -M -T +%langpack -l mai -n Maithili -F +%langpack -l ml -n Malayalam -F -H -Y +%langpack -l mr -n Marathi -F -H -Y +%langpack -l nb -n Bokmal -F -H -Y -M -T +%langpack -l nl -n Dutch -F -H -Y -M -A -T -X +%langpack -l nn -n Nynorsk -F -H -Y -M -T +%define langpack_lang Southern Ndebele +%langpack -l nr -n %{langpack_lang} -F -H +%define langpack_lang Northern Sotho +%langpack -l nso -n %{langpack_lang} -F -H +%langpack -l or -n Odia -F -H -Y -s ctl +%langpack -l pa -n Punjabi -F -H -Y -s ctl -L pa-IN -g pa_IN +%langpack -l pl -n Polish -F -H -Y -M -A -T -X +%define langpack_lang Brazilian Portuguese +%langpack -l pt-BR -n %{langpack_lang} -f pt -h pt -y pt -m pt -a pt -p pt_BR -T -X -g pt_BR +%langpack -l pt-PT -n Portuguese -f pt -h pt -y pt -m pt -a pt -p pt_PT -T -L pt -x pt +%langpack -l ro -n Romanian -A -F -H -Y -M -T -X +%langpack -l ru -n Russian -F -H -Y -M -A -T -X +%langpack -l si -n Sinhalese -F -H -S ctl -T +%langpack -l sk -n Slovak -F -H -Y -M -A -T -X +%langpack -l sl -n Slovenian -F -H -Y -M -A -T -X +%{baseinstdir}/share/wordbook/sl.dic + +#rhbz#452379 clump serbian translations together +%langpack -l sr -n Serbian -F -H -Y -A -i sr-Latn -k sr@latin -j sr_Latn +%langpack -l ss -n Swati -F -H +%define langpack_lang Southern Sotho +%langpack -l st -n %{langpack_lang} -F -H +%langpack -l sv -n Swedish -F -H -Y -M -A -T -X +%langpack -l ta -n Tamil -F -H -Y -s ctl -T +%langpack -l te -n Telugu -F -H -Y +%langpack -l th -n Thai -F -H -s ctl -c ctlseqcheck_th +%langpack -l tn -n Tswana -F -H +%langpack -l tr -n Turkish -F -A -T -X +%langpack -l ts -n Tsonga -F -H +%langpack -l uk -n Ukrainian -F -H -Y -M -T +%langpack -l ve -n Venda -F -H +%langpack -l xh -n Xhosa -F -H +%define langpack_lang Simplified Chinese +%langpack -l zh-Hans -n %{langpack_lang} -f zh-cn -a zh -p zh_CN -s cjk -T -L zh-CN -x zh-CN -g zh_CN +%define langpack_lang Traditional Chinese +%langpack -l zh-Hant -n %{langpack_lang} -f zh-tw -a zh -p zh_TW -s cjk -T -L zh-TW -x zh-TW -g zh_TW +%langpack -l zu -n Zulu -F -H -Y +%undefine langpack_lang + +%endif + +%autocorr -l en -n English + +%if %{with langpacks} + +%autocorr -l af -n Afrikaans +%autocorr -l bg -n Bulgarian +%autocorr -l ca -n Catalan +%autocorr -l cs -n Czech +%autocorr -l da -n Danish +%autocorr -l de -n German -L +%autocorr -l es -n Spanish -L +%autocorr -l fa -n Farsi +%autocorr -l fi -n Finnish +%autocorr -l fr -n French -L +%autocorr -l ga -n Irish +%autocorr -l hr -n Croatian +%autocorr -l hu -n Hungarian +%autocorr -l is -n Icelandic +%autocorr -l it -n Italian -L +%autocorr -l ja -n Japanese +%autocorr -l ko -n Korean +%autocorr -l lb -n Luxembourgish +%autocorr -l lt -n Lithuanian +%autocorr -l mn -n Mongolian +%autocorr -l nl -n Dutch +%autocorr -l pl -n Polish +%autocorr -l pt -n Portuguese +%autocorr -l ro -n Romanian +%autocorr -l ru -n Russian +%autocorr -l sk -n Slovak +%autocorr -l sl -n Slovenian +%autocorr -l sr -n Serbian +%autocorr -l sv -n Swedish +%autocorr -l tr -n Turkish +%autocorr -l vi -n Vietnamese +%autocorr -l zh -n Chinese + +%endif + +%define make_autocorr_aliases(l:) \ +%{?-l: \ +for lang in %{*}; do \ + ln -sf acor_%{-l*}.dat acor_$lang.dat \ +done \ +} \ +%{!?-l:%{error:-l must be present}} + +%prep +# verify tarballs +gpg2 --dearmor < %{SOURCE6} > keyring.gpg +gpgv2 --keyring ./keyring.gpg %{SOURCE1} %{SOURCE0} +gpgv2 --keyring ./keyring.gpg %{SOURCE3} %{SOURCE2} +gpgv2 --keyring ./keyring.gpg %{SOURCE5} %{SOURCE4} + +%setup -q -n %{name}-%{version}%{?libo_prerelease} -b 2 -b 4 +rm -rf git-hooks */git-hooks + +# set up git repo +git init +git config user.name rpmbuild +git config user.email rpmbuild@fedoraproject.org +git config gc.auto 0 # disable auto packing +git add -A +git commit -q -a -m %{name}-%{version} + +#Customize Palette to add Red Hat colours +(head -n -1 extras/source/palettes/standard.soc && \ + echo -e ' + + + + ' && \ + tail -n 1 extras/source/palettes/standard.soc) > redhat.soc +mv -f redhat.soc extras/source/palettes/standard.soc +git commit -q -a -m 'add Red Hat colors to palette' + +# apply patches +git am %{patches} + +sed -i -e /CppunitTest_sw_ooxmlexport7/d sw/Module_sw.mk # i686 +sed -i -e /CppunitTest_sc_array_functions_test/d sc/Module_sc.mk # ppc64le +sed -i -e /CppunitTest_sw_ww8export/d sw/Module_sw.mk +sed -i -e /CppunitTest_sc_addin_functions_test/d sc/Module_sc.mk # aarch64/ppc64*/s390x +sed -i -e /CppunitTest_sc_financial_functions_test/d sc/Module_sc.mk # ppc64* +sed -i -e /CppunitTest_sc_statistical_functions_test/d sc/Module_sc.mk # aarch64/ppc64* +sed -i -e /CppunitTest_dbaccess_hsqldb_test/d dbaccess/Module_dbaccess.mk # i686 +sed -i -e s/CppunitTest_dbaccess_RowSetClones// dbaccess/Module_dbaccess.mk # i686 +sed -i -e /CppunitTest_services/d postprocess/Module_postprocess.mk # i686 +sed -i -e /CppunitTest_sd_export_ooxml2/d sd/Module_sd.mk # i686 +sed -i -e /CppunitTest_sw_ooxmlexport4/d sw/Module_sw.mk +sed -i -e /CppunitTest_xmlsecurity_signing/d xmlsecurity/Module_xmlsecurity.mk +sed -i -e /CppunitTest_xmlsecurity_signing/d xmlsecurity/Module_xmlsecurity.mk +%if 0%{?rhel} +sed -i -e /CppunitTest_desktop_lib/d desktop/Module_desktop.mk +sed -i -e s/CppunitTest_editeng_core// editeng/Module_editeng.mk +sed -i -e /CppunitTest_writerperfect_draw/d writerperfect/Module_writerperfect.mk +sed -i -e /CppunitTest_sw_ooxmlimport/d sw/Module_sw.mk +sed -i -e /CppunitTest_sw_ooxmlexport10/d sw/Module_sw.mk +sed -i -e /CppunitTest_sw_uiwriter/d sw/Module_sw.mk +sed -i -e /CppunitTest_sc_subsequent_filters_test/d sc/Module_sc.mk +%endif +git commit -q -a -m 'temporarily disable failing tests' + +# Seeing .git dir makes some of the build tools change their behavior. +# We do not want that. Note: it is still possible to use +# git --git-dir=.git-rpm +mv .git .git-rpm + +%build +# path to external tarballs +EXTSRCDIR=`dirname %{SOURCE0}` + +%if 0%{?fedora} +# KDE bits +export QT4DIR=%{_qt4_prefix} +export KDE4DIR=%{_kde4_prefix} +export PATH=$QT4DIR/bin:$PATH +%endif + +#use the RPM_OPT_FLAGS but remove the OOo overridden ones +for i in $RPM_OPT_FLAGS; do + case "$i" in + -pipe|-Wall|-Werror*|-fexceptions) continue;; + esac + ARCH_FLAGS="$ARCH_FLAGS $i" +done +%ifarch s390 aarch64 +# these builders typically do not have enough memory to link the big libs with -g2 +ARCH_FLAGS="$ARCH_FLAGS -g1" +%endif +export ARCH_FLAGS +export CFLAGS=$ARCH_FLAGS +export CXXFLAGS=$ARCH_FLAGS + +%if 0%{?rhel} +%define distrooptions --disable-eot --enable-python=system --with-system-ucpp +%else # fedora +%define distrooptions --enable-eot --enable-kde4 --with-system-ucpp +%endif + +%if %{with langpacks} +%define with_lang --with-lang='%{langpack_langs}' +%endif + +%if ! 0%{libo_use_python3} +export PYTHON=%{_bindir}/python +export PYTHON_CFLAGS=`pkg-config --cflags python` +export PYTHON_LIBS=`pkg-config --libs python` +%endif + +aclocal -I m4 +autoconf + +SMP_MFLAGS=%{?_smp_mflags} +SMP_MFLAGS=$[${SMP_MFLAGS/-j/}] + +# TODO: enable coinmp? +# avoid running autogen.sh on make +touch autogen.lastrun +%configure \ + %vendoroption \ + %{?with_lang} \ + --with-parallelism=$SMP_MFLAGS \ + --disable-coinmp \ + --disable-fetch-external \ + --disable-firebird-sdbc \ + --disable-pdfium \ + --disable-systray \ + --enable-cipher-openssl-backend \ + --enable-dconf \ + --enable-evolution2 \ + --enable-ext-nlpsolver \ + --enable-ext-wiki-publisher \ + --enable-gtk3 \ + --enable-introspection \ + --enable-release-build \ + --enable-scripting-beanshell \ + --enable-scripting-javascript \ + --enable-symbols \ + --with-build-version="%{version}-%{release}" \ + --with-external-dict-dir=/usr/share/myspell \ + --with-external-tar="$EXTSRCDIR" \ + --with-help \ + --with-system-dicts \ + --with-system-libs \ + --without-export-validation \ + --without-fonts \ + --with-gdrive-client-secret="GYWrDtzyZQZ0_g5YoBCC6F0I" \ + --with-gdrive-client-id="457862564325.apps.googleusercontent.com" \ + %{distrooptions} \ + %{?bundling_options} \ + %{?archoptions} + +ulimit -c unlimited || true + +make verbose=true build-nocheck + +#generate the icons and mime type stuff +export DESTDIR=../output +export KDEMAINDIR=/usr +export GNOMEDIR=/usr +export GNOME_MIME_THEME=hicolor +export PREFIXDIR=/usr +# TODO use empty variables? Should make the renaming hacks in %%install +# unnecessary. +. ./bin/get_config_variables PRODUCTVERSIONSHORT PRODUCTVERSION SRCDIR WORKDIR PKG_CONFIG INSTDIR +pushd $WORKDIR/CustomTarget/sysui/share/libreoffice +./create_tree.sh +popd +mkdir $WORKDIR/os-integration +cp -pr $WORKDIR/CustomTarget/sysui/share/output/usr/share/* $WORKDIR/os-integration +cp -pr $WORKDIR/CustomTarget/sysui/share/output/girepository-1.0/LOKDocView-%{girapiversion}.* $WORKDIR/os-integration + +%if %{with smallbuild} +# remove the biggest offenders +# NOTE: not removing complete LinkTarget, as some libs are needed for smoketest +rm -rf $WORKDIR/CxxObject $WORKDIR/GenCxxObject $WORKDIR/HelpTarget $WORKDIR/LinkTarget/CppunitTest +%endif + + +%install +# TODO investigate use of make distro-pack-install +#figure out the icon version +. ./bin/get_config_variables PRODUCTVERSIONSHORT PRODUCTVERSION SRCDIR WORKDIR +export PRODUCTVERSIONSHORT PRODUCTVERSION + +# installation + +install -m 0755 -d %{buildroot}%{instdir} +if ! make instsetoo_native PKGFORMAT=installed DISABLE_STRIP=1 EPM=not-used-but-must-be-set; then + echo - ---dump log start--- + cat $WORKDIR/installation/LibreOffice/installed/logging/en-US/log_*_en-US.log + echo - ---dump log end--- + echo - ---dump log start -- SDK--- + cat $WORKDIR/installation/LibreOffice_SDK/installed/logging/en-US/log_*_en-US.log + echo - ---dump log end -- SDK--- + echo - ---dump log start -- languagepacks--- + cat $WORKDIR/installation/LibreOffice_languagepack/installed/logging/en-US/log_*_en-US.log + echo - ---dump log end -- languagepacks--- + exit 1 +fi +install -m 0755 -d %{buildroot}%{baseinstdir} +mv $WORKDIR/installation/LibreOffice/installed/install/en-US/* %{buildroot}%{baseinstdir} +%if %{with langpacks} +for langpack in $WORKDIR/installation/LibreOffice_languagepack/installed/install/*; do + [ `basename $langpack` = log ] && continue + cp -rp $langpack/* %{buildroot}%{baseinstdir} + rm -rf $langpack +done +%endif +mv $WORKDIR/installation/LibreOffice_SDK/installed/install/en-US/sdk %{buildroot}%{sdkinstdir} +chmod -R +w %{buildroot}%{baseinstdir} + +# postprocessing and tweaks + +# The installer currently sets UserInstallation to +# $ORIGIN/../libreoffice/4, which is of course total nonsense. Because I +# have no inclination to crawl through mountains of perl code to figure out +# where it comes from, I am just going to replace it by a sensible +# value here. +sed -i -e '/UserInstallation/s@\$ORIGIN/..@$SYSUSERCONFIG@' %{buildroot}%{baseinstdir}/program/bootstraprc + +#configure sdk +pushd %{buildroot}%{sdkinstdir} + sed -e "s,@OO_SDK_NAME@,sdk," \ + -e "s,@OO_SDK_HOME@,%{sdkinstdir}," \ + -e "s,@OFFICE_HOME@,%{baseinstdir}," \ + -e "s,@OO_SDK_MAKE_HOME@,/usr/bin," \ + -e "s,@OO_SDK_ZIP_HOME@,/usr/bin," \ + -e "s,@OO_SDK_CPP_HOME@,/usr/bin," \ + -e "s,@OO_SDK_CAT_HOME@,/usr/bin," \ + -e "s,@OO_SDK_SED_HOME@,/usr/bin," \ + -e "s,@OO_SDK_CC_55_OR_HIGHER@,," \ + -e "s,@OO_SDK_JAVA_HOME@,$JAVA_HOME," \ + -e "s,@OO_SDK_OUTPUT_DIR@,\$HOME," \ + -e "s,@SDK_AUTO_DEPLOYMENT@,NO," \ + setsdkenv_unix.sh.in > setsdkenv_unix.sh + # ensure no unexpanded vars sneaked in + grep '@[A_Z0-9_]\+@' setsdkenv_unix.sh && exit 1 + chmod 755 setsdkenv_unix.sh + # we don't want to install the input file + rm -f setsdkenv_unix.sh.in +# TODO: is this still necessary? +#fix permissions + find examples -type f -exec chmod -x {} \; +popd + +#ensure a template dir for each lang +pushd %{buildroot}%{baseinstdir}/share/template +for I in %{langpack_langs}; do + mkdir -p $I +done +popd + +#Set some aliases to canonical autocorrect language files for locales with matching languages +pushd %{buildroot}%{baseinstdir}/share/autocorr + +%make_autocorr_aliases -l en-GB en-AG en-AU en-BS en-BW en-BZ en-CA en-DK en-GH en-HK en-IE en-IN en-JM en-NG en-NZ en-SG en-TT +%make_autocorr_aliases -l en-US en-PH +#en-ZA exists and has a good autocorrect file with two or three extras that make sense for +#neighbouring english speaking territories +%make_autocorr_aliases -l en-ZA en-NA en-ZW +%if %{with langpacks} +%make_autocorr_aliases -l af-ZA af-NA +%make_autocorr_aliases -l nl-NL nl-AW +%make_autocorr_aliases -l sv-SE sv-FI +%else +rm -f acor_[a-df-z]*.dat acor_e[su]*.dat +%endif +popd +#rhbz#484055 make these shared across multiple applications +install -m 0755 -d %{buildroot}%{_datadir} +mv -f %{buildroot}%{baseinstdir}/share/autocorr %{buildroot}%{_datadir}/autocorr +chmod 755 %{buildroot}%{_datadir}/autocorr +ln -s %{_datadir}/autocorr %{buildroot}%{baseinstdir}/share/autocorr + +#remove it in case we didn't build with gcj +rm -f %{buildroot}%{baseinstdir}/program/classes/sandbox.jar +# we don't need this in the install +rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar + +#remove dummy .dat files +rm -f %{buildroot}%{baseinstdir}/program/root?.dat + +#set standard permissions for rpmlint +find %{buildroot}%{baseinstdir} -exec chmod +w {} \; +find %{buildroot}%{baseinstdir} -type d -exec chmod 0755 {} \; + +# move python bits into site-packages +install -m 0755 -d %{buildroot}%{libo_python_sitearch} +pushd %{buildroot}%{libo_python_sitearch} +echo "import sys, os" > uno.py +echo "sys.path.append('%{baseinstdir}/program')" >> uno.py +echo "os.putenv('URE_BOOTSTRAP', 'vnd.sun.star.pathname:%{baseinstdir}/program/fundamentalrc')" >> uno.py +cat %{buildroot}%{baseinstdir}/program/uno.py >> uno.py +rm -f %{buildroot}%{baseinstdir}/program/uno.py* +mv -f %{buildroot}%{baseinstdir}/program/unohelper.py* . +mv -f %{buildroot}%{baseinstdir}/program/officehelper.py* . +popd + +# rhbz#477435 package opensymbol separately +pushd %{buildroot}%{baseinstdir}/share/fonts/truetype +install -d -m 0755 %{buildroot}%{_fontdir} +install -p -m 0644 *.ttf %{buildroot}%{_fontdir} +popd +rm -rf %{buildroot}%{baseinstdir}/share/fonts/truetype/*.ttf + +# move platform-independent data into shared dir +install -m 0755 -d %{buildroot}%{datadir} +rm -f %{buildroot}%{baseinstdir}/CREDITS.fodt %{buildroot}%{baseinstdir}/LICENSE* %{buildroot}%{baseinstdir}/NOTICE +# rhbz#1473749 ensure display of files in license/about dialogs works +ln -sr %{buildroot}%{lodatadocdir}/LICENSE.fodt %{buildroot}%{baseinstdir}/LICENSE.fodt +ln -sr %{buildroot}%{lodatadocdir}/CREDITS.fodt %{buildroot}%{baseinstdir}/CREDITS.fodt + +#ensure that no sneaky un-prelinkable, un-fpic or non executable shared libs +#have snuck through +pic=0 +executable=0 +for foo in `find %{buildroot}%{instdir} -name "*" -exec file {} \;| grep ": ELF" | cut -d: -f 1` ; do + chmod +wx $foo + ls -asl $foo + result=`readelf -d $foo | grep TEXTREL` || true + if [ "$result" != "" ]; then + echo "TEXTREL Warning: $foo is b0rked (-fpic missing)" + pic=1 + fi + result=`readelf -l $foo | grep GNU_STACK | grep RWE` || true + if [ "$result" != "" ]; then + echo "GNU_STACK Warning: $foo is b0rked (-noexecstack missing)" + executable=1 + fi +done +if [ $pic == 1 ]; then false; fi +if [ $executable == 1 ]; then false; fi + +#make up some /usr/bin scripts +install -m 0755 -d %{buildroot}%{_bindir} + +pushd %{buildroot}%{_bindir} +echo \#\!/bin/sh > ooffice +echo exec libreoffice \"\$@\" >> ooffice +chmod a+x ooffice + +echo \#\!/bin/sh > ooviewdoc +echo exec libreoffice --view \"\$@\" >> ooviewdoc +chmod a+x ooviewdoc + +for app in base calc draw impress math writer; do + echo \#\!/bin/sh > oo$app + echo exec libreoffice --$app \"\$@\" >> oo$app + chmod a+x oo$app +done + +sed -e s/LAUNCHER/unopkg/g -e s/BRAND/libreoffice/g %{SOURCE8} > unopkg +chmod a+x unopkg + +sed -e s/LAUNCHER/soffice/g -e s/BRAND/libreoffice/g %{SOURCE8} > libreoffice +chmod a+x libreoffice + +# rhbz#499474 provide a /usr/bin/soffice for .recently-used.xbel +ln -s %{baseinstdir}/program/soffice soffice +# rhbz#499474 provide a /usr/bin/openoffice.org for backwards compat +ln -s libreoffice openoffice.org +popd + +pushd %{buildroot}%{baseinstdir}/share/xdg/ +chmod u+w *.desktop +ICONVERSION=`echo $PRODUCTVERSION | sed -e 's/\.//'` +for file in *.desktop; do + # rhbz#156677 remove the version from Name= + # rhbz#156067 don't version the icons + sed -i -e "s/ *$PRODUCTVERSION//g" \ + -e "s/$ICONVERSION//g" \ + -e "s/$PRODUCTVERSIONSHORT//g" \ + $file +done +# rhbz#156677 / rhbz#186515 do not show math and startcenter +sed -i -e /NoDisplay/s/false/true/ math.desktop startcenter.desktop +# relocate the .desktop and icon files +install -m 0755 -d %{buildroot}%{_datadir}/applications +for app in base calc draw impress math startcenter writer xsltfilter; do + sed -i -e 's/\${UNIXBASISROOTNAME}/%{name}/' $app.desktop + desktop-file-validate $app.desktop + install -m 0644 -p $app.desktop %{buildroot}%{_datadir}/applications/libreoffice-$app.desktop +done +popd + +pushd $WORKDIR/os-integration +#get rid of the gnome icons and other unneeded files +rm -rf icons/gnome applications application-registry + +#relocate the rest of them +# rhbz#901346 512x512 icons are not used by anything +for icon in `find icons -path '*/512x512' -prune -o -type f -print`; do + install -m 0755 -d %{buildroot}%{_datadir}/`dirname $icon` + install -m 0644 -p $icon %{buildroot}%{_datadir}/`echo $icon | sed -e s@libreoffice$ICONVERSION-@libreoffice-@ | sed -e s@libreoffice$PRODUCTVERSION-@libreoffice-@` +done +install -m 0755 -d %{buildroot}%{_datadir}/mime-info +install -m 0644 -p mime-info/libreoffice$PRODUCTVERSION.keys %{buildroot}%{_datadir}/mime-info/libreoffice.keys +install -m 0644 -p mime-info/libreoffice$PRODUCTVERSION.mime %{buildroot}%{_datadir}/mime-info/libreoffice.mime +#add our mime-types, e.g. for .oxt extensions +install -m 0755 -d %{buildroot}%{_datadir}/mime/packages +install -m 0644 -p mime/packages/libreoffice$PRODUCTVERSION.xml %{buildroot}%{_datadir}/mime/packages/libreoffice.xml + +%if 0%{?fedora} +# restrict abipkgdiff to shared objects that actually have a stable ABI +for pkg in core base officebean ogltrans pdfimport calc writer impress math graphicfilter postgresql ure pyuno x11 gtk2 gtk3 kde4 libreofficekit; do + cat > %{buildroot}%{baseinstdir}/program/${pkg}.abignore << _EOF +[suppress_file] +file_name_not_regexp=.*\.so\.[0-9]+ +_EOF +done +%endif + +# install LibreOfficeKit +install -m 0755 -d %{buildroot}%{_libdir}/girepository-1.0 +install -m 0644 -p LOKDocView-%{girapiversion}.typelib %{buildroot}%{_libdir}/girepository-1.0/LOKDocView-%{girapiversion}.typelib +install -m 0755 -d %{buildroot}%{_libdir}/gir-1.0 +install -m 0644 -p gir-1.0/LOKDocView-%{girapiversion}.gir %{buildroot}%{_libdir}/gir-1.0/LOKDocView-%{girapiversion}.gir +mv %{buildroot}%{baseinstdir}/program/liblibreofficekitgtk.so %{buildroot}%{_libdir} +popd + +# install LibreOfficeKit headers +install -m 0755 -d %{buildroot}%{_includedir}/LibreOfficeKit +install -m 0644 -p include/LibreOfficeKit/* %{buildroot}%{_includedir}/LibreOfficeKit + +rm -rf %{buildroot}%{baseinstdir}/readmes +rm -rf %{buildroot}%{baseinstdir}/licenses + +# to-do, remove this in libreoffice 4.4 when --without-ppds is gone, it'll do the right thing on its own then +install -m 0755 -d %{buildroot}%{baseinstdir}/share/psprint/driver +install -m 0644 -p vcl/unx/generic/printer/configuration/ppds/SGENPRT.PS %{buildroot}%{baseinstdir}/share/psprint/driver/SGENPRT.PS + +# rhbz#452385 to auto have postgres in classpath if subsequently installed +sed -i -e "s#URE_MORE_JAVA_CLASSPATH_URLS.*#& file:///usr/share/java/postgresql-jdbc.jar#" %{buildroot}%{baseinstdir}/program/fundamentalrc + +# move glade catalog to system glade dir +install -m 0755 -d %{buildroot}%{_datadir}/glade/catalogs +mv %{buildroot}%{baseinstdir}/share/glade/libreoffice-catalog.xml %{buildroot}%{_datadir}/glade/catalogs +install -m 0755 -d %{buildroot}%{_datadir}/glade3/catalogs +ln -sr %{buildroot}%{_datadir}/glade/catalogs/libreoffice-catalog.xml %{buildroot}%{_datadir}/glade3/catalogs + +# rhbz#1049543 install appdata +install -m 0755 -d %{buildroot}%{_datadir}/metainfo +install -m 0644 -p sysui/desktop/appstream-appdata/*.appdata.xml %{buildroot}%{_datadir}/metainfo + +# rhbz#1215800 install symbolic icons +install -m 0755 -d %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE42} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE43} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE44} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE45} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE46} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE47} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE48} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps + +# install man pages +install -m 0755 -d %{buildroot}%{_mandir}/man1 +install -m 0644 -p sysui/desktop/man/*.1 %{buildroot}%{_mandir}/man1 +for app in oobase oocalc oodraw ooffice ooimpress oomath ooviewdoc oowriter openoffice.org soffice; do + echo '.so man1/libreoffice.1' > $app.1 + install -m 0644 -p $app.1 %{buildroot}%{_mandir}/man1 +done + +export DESTDIR=%{buildroot} +./solenv/bin/install-gdb-printers -a %{_datadir}/gdb/auto-load%{baseinstdir} -c -i %{baseinstdir} -p %{_datadir}/libreoffice/gdb + +%if 0%{?fedora} +# Update the screenshot shown in the software center +# +# NOTE: It would be *awesome* if this file was pushed upstream. +# +# See http://people.freedesktop.org/~hughsient/appdata/#screenshots for more details. +# +appstream-util replace-screenshots %{buildroot}%{_datadir}/metainfo/libreoffice-writer.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-writer/a.png \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-writer/b.png +appstream-util replace-screenshots %{buildroot}%{_datadir}/metainfo/libreoffice-calc.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-calc/a.png +appstream-util replace-screenshots %{buildroot}%{_datadir}/metainfo/libreoffice-draw.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-draw/a.png +appstream-util replace-screenshots %{buildroot}%{_datadir}/metainfo/libreoffice-impress.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-impress/a.png +%endif + +# rhbz#1247399 - move stable API jars to noarch java location +install -m 0755 -d %{buildroot}%{_javadir}/%{name} +for jar in %{buildroot}%{baseinstdir}/program/classes/*.jar; do + j=`basename $jar` + case ${j%.jar} in + juh|jurt|ridl|unoloader|unoil|officebean) + mv $jar %{buildroot}%{_javadir}/%{name} + ln -sr %{buildroot}%{_javadir}/%{name}/$j $jar + ;; + esac +done + +%check +%ifnarch ppc64 s390x aarch64 +make +# we don't need this anymore +rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar +%endif + +%files + +%files filters + +%files core +%dir %{baseinstdir} +%{baseinstdir}/CREDITS.fodt +%{baseinstdir}/LICENSE.fodt +%dir %{baseinstdir}/help +%{baseinstdir}/help/idxcaption.xsl +%{baseinstdir}/help/idxcontent.xsl +%{baseinstdir}/help/main_transform.xsl +%{baseinstdir}/presets +%dir %{baseinstdir}/program +%if 0%{?fedora} +%{baseinstdir}/program/core.abignore +%endif +%{baseinstdir}/program/libbasprovlo.so +%{baseinstdir}/program/libcairocanvaslo.so +%{baseinstdir}/program/libcanvasfactorylo.so +%dir %{baseinstdir}/program/classes +%{baseinstdir}/program/classes/commonwizards.jar +%{baseinstdir}/program/classes/form.jar +%{baseinstdir}/program/classes/query.jar +%{baseinstdir}/program/classes/report.jar +%{baseinstdir}/program/classes/ScriptFramework.jar +%{baseinstdir}/program/classes/ScriptProviderForJava.jar +%{baseinstdir}/program/classes/table.jar +%{baseinstdir}/program/classes/unoil.jar +%{baseinstdir}/program/classes/XMergeBridge.jar +%{baseinstdir}/program/classes/xmerge.jar +%{baseinstdir}/program/libcmdmaillo.so +%{baseinstdir}/program/libdeployment.so +%{baseinstdir}/program/libdeploymentgui.so +%{baseinstdir}/program/libdlgprovlo.so +%{baseinstdir}/program/libexpwraplo.so +%{baseinstdir}/program/flat_logo.svg +%{baseinstdir}/program/libfps_officelo.so +%{baseinstdir}/program/gdbtrace +%{baseinstdir}/program/gengal +%{baseinstdir}/program/gengal.bin +%{baseinstdir}/program/libi18nsearchlo.so +%{baseinstdir}/program/libldapbe2lo.so +%{baseinstdir}/program/libacclo.so +%{baseinstdir}/program/libanimcorelo.so +%{baseinstdir}/program/libavmedia*.so +%{baseinstdir}/program/libbasctllo.so +%{baseinstdir}/program/libbiblo.so +%{baseinstdir}/program/libcached1.so +%{baseinstdir}/program/libcanvastoolslo.so +%{baseinstdir}/program/libchart*lo.so +%{baseinstdir}/program/libclewlo.so +%{baseinstdir}/program/libcollator_data.so +%{baseinstdir}/program/libcppcanvaslo.so +%{baseinstdir}/program/libctllo.so +%{baseinstdir}/program/libcuilo.so +%{baseinstdir}/program/libdbalo.so +%{baseinstdir}/program/libdbaselo.so +%{baseinstdir}/program/libdbaxmllo.so +%{baseinstdir}/program/libdbmmlo.so +%{baseinstdir}/program/libdbpool2.so +%{baseinstdir}/program/libdbtoolslo.so +%{baseinstdir}/program/libdbulo.so +%{baseinstdir}/program/libdeploymentmisclo.so +%{baseinstdir}/program/libdesktop_detectorlo.so +%{baseinstdir}/program/libdict_ja.so +%{baseinstdir}/program/libdict_zh.so +%{baseinstdir}/program/libdrawinglayerlo.so +%{baseinstdir}/program/libeditenglo.so +%{baseinstdir}/program/libembobj.so +%{baseinstdir}/program/libemboleobj.so +%{baseinstdir}/program/libemfiolo.so +%{baseinstdir}/program/libevoab*.so +%{baseinstdir}/program/libevtattlo.so +%{baseinstdir}/program/libgielo.so +%{baseinstdir}/program/libicglo.so +%{baseinstdir}/program/libindex_data.so +%{baseinstdir}/program/libfilelo.so +%{baseinstdir}/program/libfilterconfiglo.so +%{baseinstdir}/program/libflatlo.so +%{baseinstdir}/program/libfrmlo.so +%{baseinstdir}/program/libguesslanglo.so +%{baseinstdir}/program/libhelplinkerlo.so +%{baseinstdir}/program/libhyphenlo.so +%{baseinstdir}/program/libjdbclo.so +%{baseinstdir}/program/liblnglo.so +%{baseinstdir}/program/libloglo.so +%{baseinstdir}/program/liblocaledata_en.so +%{baseinstdir}/program/liblocaledata_es.so +%{baseinstdir}/program/liblocaledata_euro.so +%{baseinstdir}/program/liblocaledata_others.so +%{baseinstdir}/program/libmcnttype.so +%{baseinstdir}/program/libmorklo.so +%{baseinstdir}/program/libmozbootstraplo.so +%{baseinstdir}/program/libmsfilterlo.so +%{baseinstdir}/program/libmtfrendererlo.so +%{baseinstdir}/program/libmysqllo.so +%{baseinstdir}/program/libodbclo.so +%{baseinstdir}/program/liboglcanvaslo.so +%{baseinstdir}/program/liboffacclo.so +%{baseinstdir}/program/libooxlo.so +%{baseinstdir}/program/libopencllo.so +%{baseinstdir}/program/libpcrlo.so +%{baseinstdir}/program/libpdffilterlo.so +%{baseinstdir}/program/libprotocolhandlerlo.so +%{baseinstdir}/program/librecentfile.so +%{baseinstdir}/program/libsaxlo.so +%{baseinstdir}/program/libscnlo.so +%{baseinstdir}/program/libscriptframe.so +%{baseinstdir}/program/libsdlo.so +%{baseinstdir}/program/libsdfiltlo.so +%{baseinstdir}/program/libsdbc2.so +%{baseinstdir}/program/libsdbtlo.so +%{baseinstdir}/program/libsddlo.so +%{baseinstdir}/program/libsduilo.so +%{baseinstdir}/program/libspelllo.so +%{baseinstdir}/program/libsrtrs1.so +%{baseinstdir}/program/libstoragefdlo.so +%{baseinstdir}/program/libsvgiolo.so +%{baseinstdir}/program/libsvxlo.so +%{baseinstdir}/program/libsvxcorelo.so +%{baseinstdir}/program/libswdlo.so +%{baseinstdir}/program/libswlo.so +%{baseinstdir}/program/libtextconv_dict.so +%{baseinstdir}/program/libtextconversiondlgslo.so +%{baseinstdir}/program/libtextfdlo.so +%{baseinstdir}/program/libodfflatxmllo.so +# TODO: shouldn't it have lo suffix? +%{baseinstdir}/program/libucbhelper.so +%{baseinstdir}/program/libucpchelp1.so +%{baseinstdir}/program/libucpdav1.so +%{baseinstdir}/program/libucpftp1.so +%{baseinstdir}/program/libucphier1.so +%{baseinstdir}/program/libucppkg1.so +%{baseinstdir}/program/libunordflo.so +%{baseinstdir}/program/libunopkgapp.so +%{baseinstdir}/program/libunoxmllo.so +%{baseinstdir}/program/libuuilo.so +%{baseinstdir}/program/libvbahelperlo.so +%{baseinstdir}/program/libxmlfalo.so +%{baseinstdir}/program/libxmlfdlo.so +%{baseinstdir}/program/libxoflo.so +%{baseinstdir}/program/libxsec_fw.so +%if 0%{?rhel} && 0%{?rhel} < 8 +%{baseinstdir}/program/libassuan.so.0 +%{baseinstdir}/program/libgpg-error.so.0 +%{baseinstdir}/program/libgpgme.so.11 +%{baseinstdir}/program/libgpgmepp.so.6 +%endif +%{baseinstdir}/program/libxsec_xmlsec.so +%{baseinstdir}/program/libxsltdlglo.so +%{baseinstdir}/program/libxsltfilterlo.so +%{baseinstdir}/program/libxstor.so +# TODO how useful this is in Fedora? +%{baseinstdir}/program/liblosessioninstalllo.so +%{baseinstdir}/program/libmigrationoo2lo.so +%{baseinstdir}/program/libmigrationoo3lo.so +%{baseinstdir}/program/libmsformslo.so +%{baseinstdir}/program/opencl +%dir %{baseinstdir}/program/opengl +%{baseinstdir}/program/opengl/areaHashCRC64TFragmentShader.glsl +%{baseinstdir}/program/opengl/areaScaleFragmentShader.glsl +%{baseinstdir}/program/opengl/areaScaleFastFragmentShader.glsl +%{baseinstdir}/program/opengl/backgroundFragmentShader.glsl +%{baseinstdir}/program/opengl/backgroundVertexShader.glsl +%{baseinstdir}/program/opengl/blendedTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/blendedTextureVertexShader.glsl +%{baseinstdir}/program/opengl/combinedFragmentShader.glsl +%{baseinstdir}/program/opengl/combinedTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/combinedTextureVertexShader.glsl +%{baseinstdir}/program/opengl/combinedVertexShader.glsl +%{baseinstdir}/program/opengl/commonFragmentShader.glsl +%{baseinstdir}/program/opengl/commonVertexShader.glsl +%{baseinstdir}/program/opengl/convolutionFragmentShader.glsl +%{baseinstdir}/program/opengl/debugFragmentShader.glsl +%{baseinstdir}/program/opengl/debugVertexShader.glsl +%{baseinstdir}/program/opengl/diffTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/dumbVertexShader.glsl +%{baseinstdir}/program/opengl/dummyVertexShader.glsl +%{baseinstdir}/program/opengl/greyscaleFragmentShader.glsl +%{baseinstdir}/program/opengl/invert50FragmentShader.glsl +%{baseinstdir}/program/opengl/lineFragmentShader.glsl +%{baseinstdir}/program/opengl/lineVertexShader.glsl +%{baseinstdir}/program/opengl/linearGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/linearMultiColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/linearTwoColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/maskedTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/maskedTextureVertexShader.glsl +%{baseinstdir}/program/opengl/maskFragmentShader.glsl +%{baseinstdir}/program/opengl/pickingFragmentShader.glsl +%{baseinstdir}/program/opengl/pickingVertexShader.glsl +%{baseinstdir}/program/opengl/radialGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/radialMultiColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/radialTwoColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/rectangularMultiColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/rectangularTwoColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/renderTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/renderTextureVertexShader.glsl +%{baseinstdir}/program/opengl/replaceColorFragmentShader.glsl +%{baseinstdir}/program/opengl/screenTextFragmentShader.glsl +%{baseinstdir}/program/opengl/screenTextVertexShader.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShader.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShaderBatch.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShaderBatchScroll.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShaderV300.glsl +%{baseinstdir}/program/opengl/shape3DVertexShader.glsl +%{baseinstdir}/program/opengl/shape3DVertexShaderBatch.glsl +%{baseinstdir}/program/opengl/shape3DVertexShaderBatchScroll.glsl +%{baseinstdir}/program/opengl/shape3DVertexShaderV300.glsl +%{baseinstdir}/program/opengl/solidFragmentShader.glsl +%{baseinstdir}/program/opengl/symbolFragmentShader.glsl +%{baseinstdir}/program/opengl/symbolVertexShader.glsl +%{baseinstdir}/program/opengl/textFragmentShader.glsl +%{baseinstdir}/program/opengl/textFragmentShaderBatch.glsl +%{baseinstdir}/program/opengl/textVertexShader.glsl +%{baseinstdir}/program/opengl/textVertexShaderBatch.glsl +%{baseinstdir}/program/opengl/textureFragmentShader.glsl +%{baseinstdir}/program/opengl/textureVertexShader.glsl +%{baseinstdir}/program/opengl/transformedTextureVertexShader.glsl +%{baseinstdir}/program/types/offapi.rdb +%{baseinstdir}/program/libpasswordcontainerlo.so +%{baseinstdir}/program/pagein-common +%if %{with langpacks} +%dir %{baseinstdir}/program/resource +%endif +%{baseinstdir}/program/senddoc +%dir %{baseinstdir}/program/services +%{baseinstdir}/program/services/services.rdb +%{baseinstdir}/program/libsimplecanvaslo.so +%{baseinstdir}/program/libslideshowlo.so +%{baseinstdir}/program/libsofficeapp.so +%{baseinstdir}/program/libstringresourcelo.so +%{baseinstdir}/program/libsysshlo.so +%{baseinstdir}/program/libucpcmis1lo.so +%{baseinstdir}/program/libucpexpand1lo.so +%{baseinstdir}/program/libucpextlo.so +%{baseinstdir}/program/libucpimagelo.so +%{baseinstdir}/program/libucptdoc1lo.so +%{baseinstdir}/program/lounorc +%{baseinstdir}/program/libupdatefeedlo.so +%{baseinstdir}/program/uri-encode +%{baseinstdir}/program/libvbaeventslo.so +%{baseinstdir}/program/libvclcanvaslo.so +%{baseinstdir}/program/versionrc +%{baseinstdir}/program/xid-fullscreen-on-all-monitors +%dir %{baseinstdir}/share +%dir %{baseinstdir}/share/classification +%{baseinstdir}/share/classification/example*.xml +%dir %{baseinstdir}/share/fonts +%dir %{baseinstdir}/share/fonts/truetype +%{baseinstdir}/share/fonts/truetype/fc_local.conf +%dir %{baseinstdir}/share/Scripts +%{baseinstdir}/share/Scripts/java +%dir %{baseinstdir}/share/autotext +%dir %{_datadir}/autocorr +%{baseinstdir}/share/autocorr +%{baseinstdir}/share/basic +%dir %{baseinstdir}/share/config +%{baseinstdir}/share/config/images_breeze.zip +%{baseinstdir}/share/config/images_breeze_dark.zip +%{baseinstdir}/share/config/images_elementary.zip +%{baseinstdir}/share/config/images_galaxy.zip +%{baseinstdir}/share/config/images_helpimg.zip +%{baseinstdir}/share/config/images_hicontrast.zip +%{baseinstdir}/share/config/images_sifr.zip +%{baseinstdir}/share/config/images_sifr_dark.zip +%{baseinstdir}/share/config/images_tango.zip +%dir %{baseinstdir}/share/config/soffice.cfg +%{baseinstdir}/share/config/soffice.cfg/modules +%{baseinstdir}/share/config/soffice.cfg/*/ui +%dir %{baseinstdir}/share/emojiconfig +%{baseinstdir}/share/emojiconfig/emoji.json +%{baseinstdir}/share/palette +%{baseinstdir}/share/config/webcast +%{baseinstdir}/share/config/wizard +%dir %{baseinstdir}/share/dtd +%{baseinstdir}/share/dtd/officedocument +%{baseinstdir}/share/gallery +%dir %{baseinstdir}/share/labels +%{baseinstdir}/share/labels/labels.xml +%dir %{baseinstdir}/share/psprint +%config %{baseinstdir}/share/psprint/psprint.conf +%{baseinstdir}/share/psprint/driver +%dir %{baseinstdir}/share/registry +%{baseinstdir}/share/registry/gnome.xcd +%{baseinstdir}/share/registry/lingucomponent.xcd +%{baseinstdir}/share/registry/main.xcd +%{baseinstdir}/share/registry/oo-ad-ldap.xcd.sample +%{baseinstdir}/share/registry/oo-ldap.xcd.sample +%dir %{baseinstdir}/share/registry/res +%dir %{baseinstdir}/share/template +%dir %{baseinstdir}/share/template/common +%{baseinstdir}/share/template/common/internal +%{baseinstdir}/share/template/common/officorr +%{baseinstdir}/share/template/common/offimisc +%{baseinstdir}/share/template/common/personal +%{baseinstdir}/share/template/common/presnt +%{baseinstdir}/share/template/common/styles +%{baseinstdir}/share/template/common/wizard +%{baseinstdir}/share/template/wizard +%dir %{baseinstdir}/share/wordbook +%{baseinstdir}/share/wordbook/en-GB.dic +%{baseinstdir}/share/wordbook/en-US.dic +%{baseinstdir}/share/wordbook/technical.dic +%{baseinstdir}/program/liblnthlo.so +%{_bindir}/unopkg +%{_mandir}/man1/unopkg.1* +%{baseinstdir}/program/libxmlsecurity.so +%{baseinstdir}/program/libconfigmgrlo.so +%{baseinstdir}/program/libdesktopbe1lo.so +%{baseinstdir}/program/libfsstoragelo.so +%{baseinstdir}/program/libi18npoollo.so +%{baseinstdir}/program/libbasegfxlo.so +# TODO: shouldn't it have lo suffix? +%{baseinstdir}/program/libcomphelper.so +%{baseinstdir}/program/libfwelo.so +%{baseinstdir}/program/libfwilo.so +%{baseinstdir}/program/libfwklo.so +%{baseinstdir}/program/libfwllo.so +%{baseinstdir}/program/libfwmlo.so +# TODO: shouldn't it have lo suffix? +%{baseinstdir}/program/libi18nutil.so +%{baseinstdir}/program/libpackage2.so +%{baseinstdir}/program/libsblo.so +%{baseinstdir}/program/libsfxlo.so +%{baseinstdir}/program/libsotlo.so +%{baseinstdir}/program/libspllo.so +%{baseinstdir}/program/libsvllo.so +%{baseinstdir}/program/libsvtlo.so +%{baseinstdir}/program/libtklo.so +%{baseinstdir}/program/libtllo.so +%{baseinstdir}/program/libucb1.so +%{baseinstdir}/program/libucpfile1.so +%{baseinstdir}/program/libutllo.so +%{baseinstdir}/program/libvcllo.so +%{baseinstdir}/program/libwriterperfectlo.so +%{baseinstdir}/program/libxmlscriptlo.so +%{baseinstdir}/program/libxolo.so +%{baseinstdir}/program/liblocalebe1lo.so +%{baseinstdir}/program/libucpgio1lo.so +%{baseinstdir}/program/types/oovbaapi.rdb +#share unopkg +%dir %{baseinstdir}/share/extensions +%{baseinstdir}/share/extensions/package.txt +%{baseinstdir}/program/unopkg +%{baseinstdir}/program/unopkg.bin +%{baseinstdir}/program/bootstraprc +%{baseinstdir}/program/fundamentalrc +%{baseinstdir}/program/setuprc +%{baseinstdir}/program/intro.png +%{baseinstdir}/program/intro-highres.png +%{baseinstdir}/program/soffice +%{baseinstdir}/program/soffice.bin +%{baseinstdir}/program/sofficerc +%{baseinstdir}/program/unoinfo +%{baseinstdir}/program/oosplash +%{baseinstdir}/program/shell/ +%dir %{baseinstdir}/share/filter +%{baseinstdir}/share/filter/oox-drawingml-adj-names +%{baseinstdir}/share/filter/oox-drawingml-cs-presets +%{baseinstdir}/share/filter/vml-shape-types +%{baseinstdir}/share/xdg/ +%{baseinstdir}/program/redirectrc +%{_datadir}/applications/libreoffice-startcenter.desktop +#launchers +%{_bindir}/libreoffice +%{_bindir}/openoffice.org +%{_bindir}/soffice +%{_bindir}/ooffice +%{_bindir}/ooviewdoc +%{_mandir}/man1/libreoffice.1* +%{_mandir}/man1/openoffice.org.1* +%{_mandir}/man1/soffice.1* +%{_mandir}/man1/ooffice.1* +%{_mandir}/man1/ooviewdoc.1* + +%if ! 0%{?file_triggers} +%post core +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun core +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files base +%{baseinstdir}/program/classes/hsqldb.jar +%{baseinstdir}/program/classes/reportbuilder.jar +%{baseinstdir}/program/classes/reportbuilderwizard.jar +%{baseinstdir}/program/classes/sdbc_hsqldb.jar +%if 0%{?fedora} +%{baseinstdir}/program/base.abignore +%endif +%{baseinstdir}/program/libabplo.so +%{baseinstdir}/program/libdbplo.so +%{baseinstdir}/program/libhsqldb.so +%{baseinstdir}/program/librptlo.so +%{baseinstdir}/program/librptuilo.so +%{baseinstdir}/program/librptxmllo.so +%{baseinstdir}/share/registry/base.xcd +%{baseinstdir}/share/registry/reportbuilder.xcd +%{baseinstdir}/program/sbase +%{_datadir}/metainfo/libreoffice-base.appdata.xml +%{_datadir}/applications/libreoffice-base.desktop +%{_bindir}/oobase +%{_mandir}/man1/oobase.1* + +%if ! 0%{?file_triggers} +%post base +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun base +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files bsh +%{baseinstdir}/program/classes/ScriptProviderForBeanShell.jar +%{baseinstdir}/program/services/scriptproviderforbeanshell.rdb +%{baseinstdir}/share/Scripts/beanshell + +%files rhino +%{baseinstdir}/program/classes/js.jar +%{baseinstdir}/program/classes/ScriptProviderForJavaScript.jar +%{baseinstdir}/program/services/scriptproviderforjavascript.rdb +%{baseinstdir}/share/Scripts/javascript + +%files wiki-publisher +%docdir %{baseinstdir}/share/extensions/wiki-publisher/license +%{baseinstdir}/share/extensions/wiki-publisher + +%files nlpsolver +%docdir %{baseinstdir}/share/extensions/nlpsolver/help +%{baseinstdir}/share/extensions/nlpsolver + +%files officebean +%{baseinstdir}/program/classes/officebean.jar +%if 0%{?fedora} +%{baseinstdir}/program/officebean.abignore +%endif +%{baseinstdir}/program/libofficebean.so + +%files officebean-common +%{_javadir}/%{name}/officebean.jar + +%files ogltrans +%if 0%{?fedora} +%{baseinstdir}/program/ogltrans.abignore +%endif +%{baseinstdir}/program/libOGLTranslo.so +%{baseinstdir}/program/opengl/basicFragmentShader.glsl +%{baseinstdir}/program/opengl/basicVertexShader.glsl +%{baseinstdir}/program/opengl/dissolveFragmentShader.glsl +%{baseinstdir}/program/opengl/fadeBlackFragmentShader.glsl +%{baseinstdir}/program/opengl/fadeFragmentShader.glsl +%{baseinstdir}/program/opengl/glitterFragmentShader.glsl +%{baseinstdir}/program/opengl/glitterVertexShader.glsl +%{baseinstdir}/program/opengl/honeycombFragmentShader.glsl +%{baseinstdir}/program/opengl/honeycombGeometryShader.glsl +%{baseinstdir}/program/opengl/honeycombVertexShader.glsl +%{baseinstdir}/program/opengl/rippleFragmentShader.glsl +%{baseinstdir}/program/opengl/reflectionFragmentShader.glsl +%{baseinstdir}/program/opengl/reflectionVertexShader.glsl +%{baseinstdir}/program/opengl/staticFragmentShader.glsl +%{baseinstdir}/program/opengl/vortexFragmentShader.glsl +%{baseinstdir}/program/opengl/vortexGeometryShader.glsl +%{baseinstdir}/program/opengl/vortexVertexShader.glsl +%{baseinstdir}/share/config/soffice.cfg/simpress/transitions-ogl.xml +%{baseinstdir}/share/registry/ogltrans.xcd + +%files pdfimport +%if 0%{?fedora} +%{baseinstdir}/program/pdfimport.abignore +%endif +%{baseinstdir}/program/libpdfimportlo.so +%{baseinstdir}/program/xpdfimport +%{baseinstdir}/share/registry/pdfimport.xcd +%dir %{baseinstdir}/share/xpdfimport +%{baseinstdir}/share/xpdfimport/xpdfimport_err.pdf + +%_font_pkg -n %{fontname} opens___.ttf +%doc instdir/LICENSE + +%files calc +%if 0%{?fedora} +%{baseinstdir}/program/calc.abignore +%endif +%{baseinstdir}/program/libanalysislo.so +%{baseinstdir}/program/libcalclo.so +%{baseinstdir}/program/libdatelo.so +%{baseinstdir}/program/libforlo.so +%{baseinstdir}/program/libforuilo.so +%if 0%{?rhel} && 0%{?rhel} < 8 +%{baseinstdir}/program/liborcus-0.13.so.* +%{baseinstdir}/program/liborcus-parser-0.13.so.* +%endif +%{baseinstdir}/program/libpricinglo.so +%{baseinstdir}/program/libsclo.so +%{baseinstdir}/program/libscdlo.so +%{baseinstdir}/program/libscfiltlo.so +%{baseinstdir}/program/libscuilo.so +%{baseinstdir}/program/libsolverlo.so +%{baseinstdir}/program/libwpftcalclo.so +%{baseinstdir}/program/libvbaobjlo.so +%{baseinstdir}/share/calc/styles.xml +%{baseinstdir}/share/registry/calc.xcd +%{baseinstdir}/program/pagein-calc +%{baseinstdir}/program/scalc +%{_datadir}/metainfo/libreoffice-calc.appdata.xml +%{_datadir}/applications/libreoffice-calc.desktop +%{_bindir}/oocalc +%{_mandir}/man1/oocalc.1* + +%if ! 0%{?file_triggers} +%post calc +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun calc +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files draw +%{baseinstdir}/share/registry/draw.xcd +%{baseinstdir}/program/pagein-draw +%{baseinstdir}/program/sdraw +%{_datadir}/metainfo/libreoffice-draw.appdata.xml +%{_datadir}/applications/libreoffice-draw.desktop +%{_bindir}/oodraw +%{_mandir}/man1/oodraw.1* + +%if ! 0%{?file_triggers} +%post draw +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun draw +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files emailmerge +%{baseinstdir}/program/mailmerge.py* +%{baseinstdir}/program/msgbox.py* + +%files writer +%if 0%{?fedora} +%{baseinstdir}/program/writer.abignore +%endif +%{baseinstdir}/program/libhwplo.so +%{baseinstdir}/program/liblwpftlo.so +%{baseinstdir}/program/libmswordlo.so +%{baseinstdir}/program/libswuilo.so +%{baseinstdir}/program/libt602filterlo.so +%{baseinstdir}/program/libwpftwriterlo.so +%{baseinstdir}/program/libwriterfilterlo.so +%{baseinstdir}/program/libwriterlo.so +%{baseinstdir}/program/libvbaswobjlo.so +%{baseinstdir}/share/registry/writer.xcd +%{baseinstdir}/program/pagein-writer +%{baseinstdir}/program/swriter +%{_datadir}/metainfo/libreoffice-writer.appdata.xml +%{_datadir}/applications/libreoffice-writer.desktop +%{_bindir}/oowriter +%{_mandir}/man1/oowriter.1* + +%if ! 0%{?file_triggers} +%post writer +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun writer +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files impress +%if 0%{?fedora} +%{baseinstdir}/program/impress.abignore +%endif +%{baseinstdir}/program/libPresentationMinimizerlo.so +%{baseinstdir}/program/libPresenterScreenlo.so +%{baseinstdir}/program/libwpftimpresslo.so +%dir %{baseinstdir}/share/config/soffice.cfg/simpress +%{baseinstdir}/share/config/soffice.cfg/simpress/effects.xml +%{baseinstdir}/share/config/soffice.cfg/simpress/layoutlist.xml +%{baseinstdir}/share/config/soffice.cfg/simpress/objectlist.xml +%{baseinstdir}/share/config/soffice.cfg/simpress/transitions.xml +%{baseinstdir}/share/registry/impress.xcd +%{baseinstdir}/program/pagein-impress +%{baseinstdir}/program/simpress +%{_datadir}/metainfo/libreoffice-impress.appdata.xml +%{_datadir}/applications/libreoffice-impress.desktop +%{_bindir}/ooimpress +%{_mandir}/man1/ooimpress.1* + +%if ! 0%{?file_triggers} +%post impress +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun impress +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files math +%if 0%{?fedora} +%{baseinstdir}/program/math.abignore +%endif +%{baseinstdir}/program/libsmlo.so +%{baseinstdir}/program/libsmdlo.so +%{baseinstdir}/share/registry/math.xcd +%{baseinstdir}/program/smath +%{_datadir}/applications/libreoffice-math.desktop +%{_bindir}/oomath +%{_mandir}/man1/oomath.1* + +%if ! 0%{?file_triggers} +%post math +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun math +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files graphicfilter +%if 0%{?fedora} +%{baseinstdir}/program/graphicfilter.abignore +%endif +%{baseinstdir}/program/libflashlo.so +%{baseinstdir}/program/libgraphicfilterlo.so +%{baseinstdir}/program/libsvgfilterlo.so +%{baseinstdir}/program/libwpftdrawlo.so +%{baseinstdir}/share/registry/graphicfilter.xcd + +%files xsltfilter +%{baseinstdir}/share/xslt +%{baseinstdir}/share/registry/xsltfilter.xcd +%{_datadir}/applications/libreoffice-xsltfilter.desktop + +%files postgresql +%if 0%{?fedora} +%{baseinstdir}/program/postgresql.abignore +%endif +%{baseinstdir}/program/libpostgresql-sdbclo.so +%{baseinstdir}/program/libpostgresql-sdbc-impllo.so +%{baseinstdir}/program/postgresql-sdbc.ini +%{baseinstdir}/program/services/postgresql-sdbc.rdb +%{baseinstdir}/share/registry/postgresql.xcd + +%files ure +%{baseinstdir}/program/classes/java_uno.jar +%{baseinstdir}/program/classes/juh.jar +%{baseinstdir}/program/classes/jurt.jar +%{baseinstdir}/program/classes/ridl.jar +%{baseinstdir}/program/classes/unoloader.jar +%{baseinstdir}/program/javaldx +%{baseinstdir}/program/javavendors.xml +%{baseinstdir}/program/jvmfwk3rc +%{baseinstdir}/program/JREProperties.class +%if 0%{?fedora} +%{baseinstdir}/program/ure.abignore +%endif +%{baseinstdir}/program/libaffine_uno_uno.so +%{baseinstdir}/program/libbinaryurplo.so +%{baseinstdir}/program/libbootstraplo.so +%{baseinstdir}/program/libgcc3_uno.so +%{baseinstdir}/program/libi18nlangtag.so +%{baseinstdir}/program/libintrospectionlo.so +%{baseinstdir}/program/libinvocadaptlo.so +%{baseinstdir}/program/libinvocationlo.so +%{baseinstdir}/program/libiolo.so +%{baseinstdir}/program/libjava_uno.so +%{baseinstdir}/program/libjavaloaderlo.so +%{baseinstdir}/program/libjavavmlo.so +%{baseinstdir}/program/libjpipe.so +%{baseinstdir}/program/libjuh.so +%{baseinstdir}/program/libjuhx.so +%{baseinstdir}/program/libjvmaccesslo.so +%{baseinstdir}/program/libjvmfwklo.so +%{baseinstdir}/program/liblog_uno_uno.so +%{baseinstdir}/program/libnamingservicelo.so +%{baseinstdir}/program/libproxyfaclo.so +%{baseinstdir}/program/libreflectionlo.so +%{baseinstdir}/program/libreglo.so +%{baseinstdir}/program/libsal_textenclo.so +%{baseinstdir}/program/libstocserviceslo.so +%{baseinstdir}/program/libstorelo.so +%{baseinstdir}/program/libuno_cppu.so.3 +%{baseinstdir}/program/libuno_cppuhelpergcc3.so.3 +%{baseinstdir}/program/libuno_purpenvhelpergcc3.so.3 +%{baseinstdir}/program/libuno_sal.so.3 +%{baseinstdir}/program/libuno_salhelpergcc3.so.3 +%{baseinstdir}/program/libunoidllo.so +%{baseinstdir}/program/libunsafe_uno_uno.so +%{baseinstdir}/program/libuuresolverlo.so +%{baseinstdir}/program/libxmlreaderlo.so +%{baseinstdir}/program/regmerge +%{baseinstdir}/program/regview +%{baseinstdir}/program/services.rdb +%{baseinstdir}/program/types.rdb +%{baseinstdir}/program/uno +%{baseinstdir}/program/uno.bin +%{baseinstdir}/program/unorc + +%files ure-common +%dir %{_javadir}/%{name} +%{_javadir}/%{name}/juh.jar +%{_javadir}/%{name}/jurt.jar +%{_javadir}/%{name}/ridl.jar +%{_javadir}/%{name}/unoloader.jar +%license instdir/LICENSE + +%files sdk +%{sdkinstdir}/ +%exclude %{sdkinstdir}/docs/ +%exclude %{sdkinstdir}/examples/ + +%files sdk-doc +%docdir %{sdkinstdir}/docs +%license instdir/LICENSE +%{sdkinstdir}/docs/ +%{sdkinstdir}/examples/ + +%files pyuno +%if 0%{?fedora} +%{baseinstdir}/program/pyuno.abignore +%endif +%{baseinstdir}/program/libpyuno.so +%{baseinstdir}/program/pythonloader.py* +%{baseinstdir}/program/libpythonloaderlo.so +%{baseinstdir}/program/pythonloader.unorc +%{baseinstdir}/program/pythonscript.py* +%{baseinstdir}/program/pyuno.so +%{baseinstdir}/program/services/pyuno.rdb +%{baseinstdir}/program/services/scriptproviderforpython.rdb +%{baseinstdir}/program/wizards +%{baseinstdir}/share/Scripts/python +%exclude %{baseinstdir}/share/Scripts/python/LibreLogo +%{libo_python_sitearch}/uno.py* +%{libo_python_sitearch}/unohelper.py* +%{libo_python_sitearch}/officehelper.py* +%if 0%{libo_use_python3} +%{libo_python_sitearch}/__pycache__/uno.cpython-* +%{libo_python_sitearch}/__pycache__/unohelper.cpython-* +%{libo_python_sitearch}/__pycache__/officehelper.cpython-* +%endif +%{baseinstdir}/share/registry/pyuno.xcd + +%files librelogo +%{baseinstdir}/share/registry/librelogo.xcd +%{baseinstdir}/share/Scripts/python/LibreLogo + +%files glade +%{baseinstdir}/program/ui-previewer +%{_datadir}/glade +%{_datadir}/glade3 + +%files data +%{_datadir}/icons/hicolor/*/*/libreoffice* +%{_datadir}/icons/locolor/*/*/libreoffice* +%{_datadir}/mime-info/libreoffice.* +%{_datadir}/mime/packages/libreoffice.xml +# TODO: rename -data to -core-common? +%dir %{_javadir}/%{name} +%{_javadir}/%{name}/unoil.jar +%dir %{datadir} +%doc instdir/CREDITS.fodt +%doc instdir/LICENSE.html +%doc instdir/LICENSE.fodt +%doc instdir/LICENSE +%doc instdir/NOTICE +%license instdir/LICENSE + +%post data +%if ! 0%{?file_triggers} +touch --no-create %{_datadir}/mime/packages &> /dev/null || : +%endif +for theme in hicolor locolor; do + touch --no-create %{_datadir}/icons/$theme &>/dev/null || : +done + +%postun data +if [ $1 -eq 0 ] ; then +%if ! 0%{?file_triggers} + touch --no-create %{_datadir}/mime/packages &> /dev/null || : + update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : +%endif + for theme in hicolor locolor; do + touch --no-create %{_datadir}/icons/$theme &>/dev/null || : + gtk-update-icon-cache -q %{_datadir}/icons/$theme &>/dev/null || : + done +fi + +%posttrans data +%if ! 0%{?file_triggers} +update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : +%endif +for theme in hicolor locolor; do + gtk-update-icon-cache -q %{_datadir}/icons/$theme &>/dev/null || : +done + +%files x11 +%if 0%{?fedora} +%{baseinstdir}/program/x11.abignore +%endif +%{baseinstdir}/program/libvclplug_genlo.so + +%files gtk2 +%if 0%{?fedora} +%{baseinstdir}/program/gtk2.abignore +%endif +%{baseinstdir}/program/libvclplug_gtklo.so + +%files gtk3 +%if 0%{?fedora} +%{baseinstdir}/program/gtk3.abignore +%endif +%{baseinstdir}/program/libvclplug_gtk3lo.so + +%if 0%{?fedora} + +%files kde4 +%if 0%{?fedora} +%{baseinstdir}/program/kde4.abignore +%endif +%{baseinstdir}/program/libkde4be1lo.so +%{baseinstdir}/program/libvclplug_kde4lo.so + +%endif + +%files -n libreofficekit +%{baseinstdir}/share/libreofficekit +%{_libdir}/girepository-1.0/LOKDocView-%{girapiversion}.typelib +%if 0%{?fedora} +%{baseinstdir}/program/libreofficekit.abignore +%endif +%{_libdir}/liblibreofficekitgtk.so + +%files -n libreofficekit-devel +%{_libdir}/gir-1.0/LOKDocView-%{girapiversion}.gir +%{_includedir}/LibreOfficeKit + +%changelog +* Fri Feb 08 2019 Caolán McNamara - 1:6.0.6.1-13 +- Related: rhbz#1672004 fix serbian/swedish autocorr rpm upgrade + +* Sun Feb 03 2019 Caolán McNamara - 1:6.0.6.1-12 +- Resolves: rhbz#1672004 CVE-2018-16858 + +* Thu Nov 15 2018 Caolán McNamara - 1:6.0.6.1-11 +- Resolves: rhbz#1649251 impress webpreview doesn't work without graphicfilter +- Resolves: rhbz#1648949 fix docx missing date forms + +* Thu Nov 08 2018 Caolán McNamara - 1:6.0.6.1-10 +- Resolves: rhbz#1647507 try user password for both pdf modes + +* Wed Oct 10 2018 Caolán McNamara - 1:6.0.6.1-9 +- Resolves: rhbz#1637848 enable weak-deps Supplements for langpacks + +* Tue Sep 18 2018 Tomas Orsava - 1:6.0.6.1-8 +- Resolves: rhbz#1619153 Require the Python interpreter directly instead of + relying on the package name + +* Fri Aug 31 2018 Stephan Bergmann - 1:6.0.6.1-7 +- Resolves: rhbz#1618703 Use OpenSSL instead of internal cipher functionality + +* Fri Aug 10 2018 Caolán McNamara - 1:6.0.6.1-6.3 +- Resolves: rhbz#1614376 FTBFS + +* Thu Jul 26 2018 Caolán McNamara - 1:6.0.6.1-6 +- Related: rhbz#1602589 fix/silence more covscan warnings + +* Fri Jul 20 2018 Caolán McNamara - 1:6.0.6.1-5 +- implement export of underline in outlined font for simple case + +* Wed Jul 18 2018 Caolán McNamara - 1:6.0.6.1-4 +- Resolves: rhbz#1602589 fix covscan issues + +* Tue Jul 17 2018 Eike Rathke - 1:6.0.6.1-3 +- Upgrade to ICU 61.1 +- Upgrade to ICU 62.1 + +* Tue Jul 17 2018 Caolán McNamara - 1:6.0.6.1-2 +- Resolves: rhbz#1601882 fails to build with --nocheck + +* Tue Jul 17 2018 Caolán McNamara - 1:6.0.6.1-1 +- latest 6.0 release + +* Fri Jul 13 2018 Fedora Release Engineering - 1:6.0.5.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jul 10 2018 Pete Walter - 1:6.0.5.2-2 +- Rebuild for ICU 62 + +* Fri Jun 22 2018 Caolán McNamara - 1:6.0.5.2-1 +- latest 6.0 release +- fix for ICU 61 +- fix for Python 3.7 + +* Tue Jun 19 2018 Miro Hrončok - 1:6.0.4.2-5 +- Rebuilt for Python 3.7 + +* Tue Jun 05 2018 Caolán McNamara - 1:6.0.4.2-4 +- Resolves: rhbz#1581028 endless font widget update + +* Tue Jun 05 2018 Caolán McNamara - 1:6.0.4.2-3 +- use weak deps for fedora only + +* Mon May 28 2018 Caolán McNamara - 1:6.0.4.2-2 +- Resolves: rhbz#1582324 crash after merging writer table cells + +* Fri May 25 2018 Caolán McNamara - 1:6.0.4.2-1 +- latest 6.0 release + +* Wed May 9 2018 Stephan Bergmann - 1:6.0.3.2-10 +- Fix a potential crash when using the dconf configuration backend + +* Sat May 5 2018 Caolán McNamara - 1:6.0.3.2-9 +- tdf#117413 char doubling in calc under X + +* Fri May 4 2018 Caolán McNamara - 1:6.0.3.2-8 +- rhbz#1575000 CVE-2018-10583 allow embedded links to smb resources + to be blocked + +* Thu May 3 2018 Caolán McNamara - 1:6.0.3.2-7 +- rhbz#1573845 won't start without at least Langpack-en-US.xcd + +* Mon Apr 30 2018 Pete Walter - 1:6.0.3.2-6 +- Rebuild for ICU 61.1 + +* Tue Apr 24 2018 Caolán McNamara - 1:6.0.3.2-5 +- Resolves: tdf#116951 rhbz#1569331 start is G_MAXINT + +* Thu Apr 19 2018 Stephan Bergmann - 1:6.0.3.2-4 +- Resolves: rhbz#1568579 LibreOffice --headless zombie process +- Related: rhbz#1569331 end should be in terms of unicode chars, not bytes + +* Tue Apr 17 2018 Caolán McNamara - 1:6.0.3.2-3 +- Related: rhbz#1396729 use cairo_surface_create_similar + +* Tue Apr 10 2018 Caolán McNamara - 1:6.0.3.2-2 +- finally drop bundled xmlsec1 + +* Thu Mar 29 2018 Caolán McNamara - 1:6.0.3.2-1 +- latest version + +* Thu Mar 29 2018 Caolán McNamara - 1:6.0.3.1-3 +- Related: rhbz#1066844 drop libreofficekit requires + +* Fri Mar 23 2018 Marek Kasik - 1:6.0.3.1-2 +- Rebuild for poppler-0.63.0 + +* Thu Mar 22 2018 David Tardon - 1:6.0.3.1-1 +- update to 6.0.3 rc1 + +* Fri Mar 16 2018 Caolán McNamara - 1:6.0.2.1-3 +- Resolves: rhbz#1392145 ensure titlebar close button matches 'outside' direction + +* Fri Mar 16 2018 Stephan Bergmann - 1:6.0.2.1-2 +- lib dir missing from libreoffice-sdk + +* Fri Feb 23 2018 David Tardon - 1:6.0.2.1-1 +- update to 6.0.2 rc1 + +* Wed Feb 14 2018 David Tardon - 1:6.0.1.1-2 +- rebuild for poppler 0.62.0 + +* Fri Feb 09 2018 Caolán McNamara - 1:6.0.1.1-1 +- latest stable + +* Wed Feb 07 2018 Fedora Release Engineering - 1:6.0.0.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Feb 06 2018 Stephan Bergmann - 1:6.0.0.3-2-UNBUILT +- Resolves: rhbz#1541486 Base table dialog title shown in wrong language + +* Sun Feb 04 2018 David Tardon - 1:6.0.0.3-1 +- update to 6.0.0 rc3 + +* Wed Jan 31 2018 Michael Stahl - 1:6.0.0.2-3 +- add lots of .abignore files to restrict abipkgdiff to shared objects + that actually have a stable ABI + +* Tue Jan 30 2018 Björn Esser - 1:6.0.0.2-2 +- Rebuilt for Boost 1.66.0 + +* Fri Jan 12 2018 David Tardon - 1:6.0.0.2-1 +- update to 6.0.0 rc2 + +* Tue Jan 09 2018 Caolán McNamara - 1:6.0.0.1-3 +- bump to Modify2 for app_id so install hint says 'LibreOffice wants to install' + +* Thu Dec 21 2017 Caolán McNamara - 1:6.0.0.1-2 +- request langpack for autodetected desired ui locale via packagekit + +* Wed Dec 20 2017 David Tardon - 1:6.0.0.1-1 +- update to 6.0.0 rc1 + +* Thu Dec 14 2017 David Tardon - 1:6.0.0.0-8.beta2 +- update to 6.0.0 beta2 + +* Mon Dec 04 2017 Caolán McNamara - 1:6.0.0.0-7.beta1 +- Rebuild for hunspell 1.6.2 + +* Thu Nov 30 2017 Pete Walter - 1:6.0.0.0-6.beta1 +- Rebuild for ICU 60.1 + +* Sat Nov 25 2017 David Tardon - 1:6.0.0.0-5.beta1 +- update to 6.0.0 beta1 + +* Wed Nov 22 2017 Eike Rathke - 1:6.0.0.0-4.alpha1 +- prepare for build with ICU 60.1 + +* Mon Nov 20 2017 David Tardon - 1:6.0.0.0-3.alpha1 +- rebuild for liborcus 0.13.1 + +* Wed Nov 08 2017 David Tardon - 1:6.0.0.0-2.alpha1 +- rebuild for poppler 0.61.0 + +* Thu Nov 02 2017 David Tardon - 1:6.0.0.0-1.alpha1 +- update to 6.0.0 alpha1 +- update location of appdata files +- use weak dependencies +- mark bundled packages + +* Tue Oct 17 2017 David Tardon - 1:5.4.3.1-1 +- update to 5.4.3 rc1 + +* Fri Oct 06 2017 David Tardon - 1:5.4.2.2-3 +- rebuild for poppler 0.60.1 + +* Sun Oct 01 2017 Thierry Vignaud - 1:5.4.2.2-2 +- fix libreoffice wrapper + +* Wed Sep 27 2017 David Tardon - 1:5.4.2.2-1 +- update to 5.4.2 rc2 + +* Mon Sep 18 2017 David Tardon - 1:5.4.2.1-1 +- update to 5.4.2 rc1 + +* Tue Sep 12 2017 David Tardon - 1:5.4.1.2-3 +- Resolves: rhbz#1490318 do not use versioned Supplements + +* Fri Sep 08 2017 David Tardon - 1:5.4.1.2-2 +- rebuild for poppler 0.59.0 + +* Sun Aug 27 2017 David Tardon - 1:5.4.1.2-1 +- update to 5.4.1 rc2 + +* Fri Aug 11 2017 Caolán McNamara - 1:5.4.0.3-5 +- implement char highlighting ui for graphics styles + +* Thu Aug 03 2017 David Tardon - 1:5.4.0.3-4 +- rebuild for poppler 0.57.0 + +* Mon Jul 31 2017 Kalev Lember - 1:5.4.0.3-3 +- Enable the s390x build again + +* Mon Jul 31 2017 Kalev Lember - 1:5.4.0.3-2 +- Temporarily disable the build on s390x + +* Wed Jul 26 2017 Fedora Release Engineering - 1:5.4.0.3-1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Jul 21 2017 Kalev Lember - 1:5.4.0.2-2 +- Rebuilt for Boost 1.64 + +* Fri Jul 07 2017 David Tardon - 1:5.4.0.2-1 +- update to 5.4.0 rc2 + +* Fri Jun 23 2017 David Tardon - 1:5.4.0.1-1 +- update to 5.4.0 rc1 + +* Wed Jun 07 2017 David Tardon - 1:5.4.0.0-3.beta2 +- update to 5.4.0 beta2 + +* Sun May 21 2017 David Tardon - 1:5.4.0.0-2.beta1 +- update to 5.4.0 beta1 + +* Tue May 02 2017 David Tardon - 1:5.4.0.0-1.alpha1 +- update to 5.4.0 alpha1 + +* Wed Apr 19 2017 David Tardon - 1:5.3.3.1-1 +- update to 5.3.3 rc1 + +* Wed Mar 29 2017 David Tardon - 1:5.3.2.2-1 +- update to 5.3.2 rc2 + +* Tue Mar 28 2017 David Tardon - 1:5.3.2.1-3 +- rebuild for poppler 0.53.0 + +* Mon Mar 27 2017 Caolán McNamara - 1:5.3.2.1-2 +- Resolves: rhbz#1432468 disable opencl by default + +* Sun Mar 19 2017 David Tardon - 1:5.3.2.1-1 +- update to 5.3.2 rc1 + +* Mon Mar 13 2017 Caolán McNamara - 1:5.3.1.2-2 +- Resolves: rhbz#1431189 add Indonesian langpack + +* Thu Mar 09 2017 David Tardon - 1:5.3.1.2-1 +- update to 5.3.1 rc2 + +* Thu Feb 23 2017 David Tardon - 1:5.3.1.1-1 +- update to 5.3.1 rc1 + +* Tue Feb 07 2017 Björn Esser - 1:5.3.0.3-3 +- Rebuilt for Boost 1.63 + +* Thu Feb 02 2017 Caolán McNamara - 1:5.3.0.3-2 +- Resolves: rhbz#1409401 add depend on gtksink gstreamer1 element + +* Fri Jan 27 2017 David Tardon - 1:5.3.0.3-1 +- update to 5.3.0 rc3 + +* Wed Jan 18 2017 David Tardon - 1:5.3.0.2-1 +- update to 5.3.0 rc2 +- temp. disable building of help on ARM to fix build + +* Tue Jan 10 2017 David Tardon - 1:5.3.0.1-1 +- update to 5.3.0 rc1 + +* Tue Dec 27 2016 Caolán McNamara - 1:5.3.0.0-8.beta1 +- try arm build + +* Thu Dec 22 2016 Miro Hrončok - 1:5.3.0.0-7.beta2 +- Rebuild for Python 3.6 + +* Mon Dec 19 2016 Miro Hrončok - 1:5.3.0.0-6.beta2 +- Rebuild for Python 3.6 + +* Thu Dec 15 2016 David Tardon - 1:5.3.0.0-5.beta2 +- update to 5.3.0 beta2 + +* Tue Dec 13 2016 Caolán McNamara - 1:5.3.0.0-4.beta1 +- rebuild for hunspell-1.5.4 + +* Wed Nov 23 2016 David Tardon - 1:5.3.0.0-3.beta1 +- update to 5.3.0 beta1 + +* Tue Nov 08 2016 David Tardon - 1:5.3.0.0-2.alpha1 +- allow abrt to work again + +* Sat Oct 22 2016 David Tardon - 1:5.3.0.0-1.alpha1 +- update to 5.3.0 alpha1 + +* Fri Oct 21 2016 Marek Kasik - 1:5.2.3.1-2 +- Rebuild for poppler-0.48.0 + +* Sat Oct 15 2016 David Tardon - 1:5.2.3.1-1 +- update to 5.2.3 rc1 + +* Fri Oct 07 2016 Stephan Bergmann - 1:5.2.2.2-3 +- Resolves: rhbz#1382401 broken export of emojis to HTML + +* Thu Sep 29 2016 David Tardon - 1:5.2.2.2-2 +- rebuild for liborcus 0.12 + +* Wed Sep 21 2016 David Tardon - 1:5.2.2.2-1 +- update to 5.2.2 rc2 + +* Wed Sep 21 2016 Caolán McNamara - 1:5.2.2.1-5 +- Related: rhbz#1362451 apply patch + +* Tue Sep 20 2016 Caolán McNamara - 1:5.2.2.1-4 +- Related: rhbz#1362451 avoid recursive ownerchanged signal during ownerchange + +* Mon Sep 19 2016 Caolán McNamara - 1:5.2.2.1-3 +- Related: rhbz#1373933 do less on style-updated +- Related: rhbz#1353069 don't clear XATTR_FILL from in use styles + +* Fri Sep 16 2016 Caolán McNamara - 1:5.2.2.1-2 +- Resolves: rhbz#1373933 gtk 3.21 emits way too many "style-set" signals + +* Wed Sep 14 2016 David Tardon - 1:5.2.2.1-1 +- update to 5.2.2 rc1 + +* Tue Sep 13 2016 Stephan Bergmann - 1:5.2.1.2-3 +- enable dconf support for Fleet Commander + +* Mon Sep 05 2016 David Tardon - 1:5.2.1.2-2 +- Resolves: rhbz#1247399 install public jars according to packaging guidelines +- Resolves: rhbz#1363874 install LibreOfficeKit headers + +* Fri Aug 26 2016 David Tardon - 1:5.2.1.2-1 +- update to 5.2.1 rc2 + +* Thu Aug 11 2016 David Tardon - 1:5.2.1.1-1 +- update to 5.2.1 rc1 + +* Fri Jul 29 2016 David Tardon - 1:5.2.0.4-1 +- update to 5.2.0 rc4 + +* Thu Jul 21 2016 David Tardon - 1:5.2.0.3-1 +- update to 5.2.0 rc3 + +* Tue Jul 19 2016 Fedora Release Engineering - 1:5.2.0.2-4 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Mon Jul 18 2016 Marek Kasik - 1:5.2.0.2-3 +- Rebuild for poppler-0.45.0 + +* Thu Jul 07 2016 David Tardon - 1:5.2.0.2-2 +- remove obsolete wiki-publisher requires apache-commons-* + +* Thu Jul 07 2016 David Tardon - 1:5.2.0.2-1 +- update to 5.2.0 rc2 +- Resolves: rhbz#1351292 fix switching of modes in Impress + +* Tue Jun 28 2016 David Tardon - 1:5.2.0.1-2 +- Resolves: rhbz#1341064 fix test on big endian systems + +* Wed Jun 22 2016 David Tardon - 1:5.2.0.1-1 +- update to 5.1.0 rc1 +- Resolves: rhbz#1343752 wrong radiobutton and checkbutton behavior in + "view" menu +- Resolves: rhbz#1349261 do not pull in all variants of english dicts + +* Thu Jun 09 2016 David Tardon - 1:5.2.0.0-8.beta2 +- update to 5.2.0 beta2 + +* Thu May 26 2016 David Tardon - 1:5.2.0.0-7.beta1 +- update to 5.2.0 beta1 + +* Mon May 16 2016 David Tardon - 1:5.2.0.0-6.alpha1 +- Resolves: rhbz#1327847 remove multilib conflicts in .desktop files + +* Fri May 13 2016 David Tardon - 1:5.2.0.0-5.alpha1 +- rebuild for mdds 1.2.0 +- Resolves: rhbz#1325858 fix build on 64-bit secondary arches + +* Tue May 10 2016 David Tardon - 1:5.2.0.0-4.alpha1 +- Resolves: rhbz#1333899 recommended pkgs are omitted from default + installation + +* Tue May 3 2016 Marek Kasik - 1:5.2.0.0-3.alpha1 +- Rebuild for poppler-0.43.0 + +* Mon May 02 2016 David Tardon - 1:5.2.0.0-2.alpha1 +- Resolves: rhbz#1326602 leakage of removed background image set in master slide + +* Fri Apr 22 2016 David Tardon - 1:5.2.0.0-1.alpha1 +- update to 5.2.0 alpha1 + +* Thu Apr 21 2016 David Tardon - 1:5.1.3.1-1 +- update to 5.1.3 rc1 +- Resolves: tdf#91778 drawing the background over an active cursor + +* Mon Apr 18 2016 Caolán McNamara - 1:5.1.2.1-6 +- rebuild for hunspell 1.4.0 + +* Fri Apr 15 2016 David Tardon - 1:5.1.2.1-5 +- rebuild for ICU 57.1 + +* Thu Apr 07 2016 Caolán McNamara - 1:5.1.2.1-4 +- gtk3: fix combobox and listbox + +* Wed Mar 30 2016 David Tardon - 1:5.1.2.1-3 +- support both glade and glade3 + +* Mon Mar 21 2016 David Tardon - 1:5.1.2.1-2 +- Resolves: rhbz#1319458 avoid rich deps in Requires + +* Wed Mar 16 2016 David Tardon - 1:5.1.2.1-1 +- update to 5.1.2 rc1 +- split VCL plugins into subpackages +- rename libreoffice-kde to libreoffice-kde4 +- only recommend fonts +- remove hard dependency on English spell checker and auto-correction + rules +- disable quickstarter +- move icons and other system-integration stuff to a noarch subpackage +- disable browser plugin in preparation for its removal in 5.2 + +* Wed Mar 09 2016 David Tardon - 1:5.1.1.3-2 +- update for liborcus 0.11.0 + +* Thu Mar 03 2016 David Tardon - 1:5.1.1.3-1 +- update to 5.1.1 rc3 + +* Fri Feb 26 2016 David Tardon - 1:5.1.1.2-1 +- update to 5.1.1 rc2 + +* Mon Feb 22 2016 David Tardon - 1:5.1.1.1-5 +- Resolves: rhbz#1310527 add langpack deps + +* Tue Feb 16 2016 Caolán McNamara - 1:5.1.1.1-4 +- video playback under wayland with gstreamer gtksink + +* Mon Feb 15 2016 David Tardon - 1:5.1.1.1-3 +- rebuild for openCOLLADA soname change + +* Sun Feb 14 2016 David Tardon - 1:5.1.1.1-2 +- switch to mdds 1.x + +* Thu Feb 11 2016 David Tardon - 1:5.1.1.1-1 +- update to 5.1.1 rc1 +- Resolves: rhbz#1303007 add noarch Provides too + +* Thu Feb 11 2016 Caolán McNamara - 1:5.1.0.3-3 +- rework gtk3 themeing to work with latest gtk + +* Tue Feb 02 2016 Caolán McNamara - 1:5.1.0.3-2 +- Resolves: rhbz#1303619 nothing provides java-devel(x86_64) + +* Wed Jan 27 2016 David Tardon - 1:5.1.0.3-1 +- update to 5.1.0 rc3 +- Resolves: rhbz#1168757 Selecting multiple slides is not reflected in Print + dialog + +* Fri Jan 22 2016 Marek Kasik - 1:5.1.0.2-5 +- Rebuild for poppler-0.40.0 + +* Mon Jan 18 2016 Jonathan Wakely - 1:5.1.0.2-4 +- Rebuilt for Boost 1.60 + +* Sat Jan 16 2016 Mamoru TASAKA - 1:5.1.0.2-3 +- Remove arch-specific dependency for font subpackage as it is noarch + +* Thu Jan 14 2016 Adam Jackson - 1:5.1.0.2-2 +- Rebuild for glew 1.13 + +* Thu Jan 14 2016 David Tardon - 1:5.1.0.2-1 +- update to 5.1.0 rc2 + +* Thu Dec 17 2015 Bastien Nocera 1:5.1.0.1-2 +- Add GLSL files missing from the package +- Split up inclusion of latin Serbian files to avoid duplicate listing + +* Wed Dec 16 2015 David Tardon - 1:5.1.0.1-1 +- update to 5.1.0 rc1 + +* Mon Dec 14 2015 David Tardon - 1:5.1.0.0-11.beta2 +- backport more upstream fixes for libreofficekit +- fix unit test on i686 + +* Wed Dec 09 2015 David Tardon - 1:5.1.0.0-10.beta2 +- backport upstream fixes for libreofficekit + +* Fri Dec 04 2015 David Tardon - 1:5.1.0.0-9.beta2 +- update to 5.1.0 beta2 + +* Thu Dec 03 2015 Caolán McNamara - 1:5.1.0.0-8.beta1 +- enable and bundle libreofficekit introspection + +* Thu Nov 26 2015 David Tardon - 1:5.1.0.0-7.beta1 +- update to 5.1.0 beta1 + +* Tue Nov 10 2015 Fedora Release Engineering - 1:5.1.0.0-6.alpha1 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Thu Nov 05 2015 David Tardon - 1:5.1.0.0-5.alpha1 +- Related: rhbz#1276061 build failure on ppc64 + +* Tue Nov 03 2015 David Tardon - 1:5.1.0.0-4.alpha1 +- Resolves: rhbz#1276061 build failure on ppc64 + +* Wed Oct 28 2015 David Tardon - 1:5.1.0.0-3.alpha1 +- rebuild for ICU 56.1 + +* Tue Oct 27 2015 Eike Rathke - 1:5.1.0.0-2.alpha1 +- prepare to enable build with ICU 56 + +* Mon Oct 19 2015 David Tardon - 1:5.1.0.0-1.alpha1 +- update to 5.1.0 alpha1 + +* Mon Oct 12 2015 David Tardon - 1:5.0.3.1-1 +- update to 5.0.3 rc1 + +* Thu Oct 08 2015 Caolán McNamara - 1:5.0.2.2-4 +- Resolves: rhbz#1269593 declare support for vnd.libreoffice.cmis:// URLs + +* Wed Sep 30 2015 Caolán McNamara - 1:5.0.2.2-3 +- implement save slide background for impress + +* Mon Sep 28 2015 Caolán McNamara - 1:5.0.2.2-2 +- Resolves: tdf#93461 captions laid out behind images + +* Thu Sep 17 2015 David Tardon - 1:5.0.2.2-1 +- update to 5.0.2 rc2 + +* Sat Sep 05 2015 David Tardon - 1:5.0.2.1-1 +- update to 5.0.2 rc1 + +* Sat Aug 22 2015 David Tardon - 1:5.0.1.2-1 +- update to 5.0.1 rc2 + +* Tue Aug 11 2015 David Tardon - 1:5.0.1.1-1 +- update to 5.0.1 rc1 + +* Wed Aug 05 2015 Jonathan Wakely 5.0.0.5-2 +- Rebuilt for Boost 1.58 + +* Mon Aug 03 2015 David Tardon - 1:5.0.0.5-1 +- update to 5.0.0 rc5 + +* Wed Jul 29 2015 Fedora Release Engineering - 1:5.0.0.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159 + +* Sat Jul 25 2015 David Tardon - 1:5.0.0.4-1 +- update to 5.0.0 rc4 + +* Fri Jul 24 2015 Adam Williamson - 1:5.0.0.3-3 +- rebuild for Boost 1.58 (for real this time) + +* Wed Jul 22 2015 David Tardon - 1:5.0.0.3-2 +- rebuild for Boost 1.58 + +* Fri Jul 10 2015 David Tardon - 1:5.0.0.3-1 +- update to 5.0.0 rc3 + +* Sun Jun 28 2015 David Tardon - 1:5.0.0.2-1 +- update to 5.0.0 rc2 + +* Sun Jun 21 2015 David Tardon - 1:5.0.0.1-1 +- update to 5.0.0 rc1 + +* Fri Jun 19 2015 David Tardon - 1:5.0.0.0-8.beta3 +- Resolves: rhbz#1233420 crash on auto-fill + +* Wed Jun 17 2015 Fedora Release Engineering - 1:5.0.0.0-7.beta3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Jun 10 2015 David Tardon - 1:5.0.0.0-6.beta3 +- update to 5.0.0 beta3 + +* Tue Jun 09 2015 David Tardon - 1:5.0.0.0-5.beta2 +- update to 5.0.0 beta2 + +* Mon Jun 08 2015 David Tardon - 1:5.0.0.0-4.beta1 +- rebuild for poppler 0.33 + +* Wed May 20 2015 David Tardon - 1:5.0.0.0-3.beta1 +- update to 5.0.0 beta1 + +* Sat May 16 2015 Kalev Lember - 1:5.0.0.0-2.alpha1 +- Resolves: rhbz#1215800 install symbolic icons + +* Sun Apr 19 2015 David Tardon - 1:5.0.0.0-1.alpha1 +- update to 5.0.0 alpha1 + +* Tue Apr 14 2015 Stephan Bergmann - 1:4.4.2.2-3 +- Resolves: rhbz#1197614 crash when updating extension +- Resolves: rhbz#1134285 redundant user/password request for WebDAV access + +* Mon Mar 30 2015 Richard Hughes - 1:4.4.2.2-2 +- Use better AppData screenshots + +* Thu Mar 26 2015 David Tardon - 1:4.4.2.2-1 +- update to 4.4.2 rc2 + +* Thu Mar 12 2015 David Tardon - 1:4.4.2.1-1 +- update to 4.2.2 rc1 + +* Mon Feb 23 2015 David Tardon - 1:4.4.1.2-1 +- update to 4.4.1 rc2 + +* Tue Feb 10 2015 David Tardon - 1:4.4.1.1-1 +- update to 4.4.1 rc1 + +* Thu Jan 29 2015 David Tardon - 1:4.4.0.3-5 +- fix build on s390 + +* Wed Jan 28 2015 Petr Machata - 1:4.4.0.3-4 +- Rebuild for boost 1.57.0 + +* Wed Jan 28 2015 Petr Machata - 1:4.4.0.3-3 +- Rebuild for boost 1.57.0 + +* Fri Jan 23 2015 Stephan Bergmann - 1:4.4.0.3-2 +- Related: rhbz#1185307 get search for Hamcrest unstuck + +* Fri Jan 23 2015 David Tardon - 1:4.4.0.3-1 +- update to 4.4.0 rc3 + +* Fri Jan 23 2015 Marek Kasik - 1:4.4.0.2-4 +- Rebuild (poppler-0.30.0) + +* Thu Jan 22 2015 Stephan Bergmann - 1:4.4.0.2-3 +- Resolves: rhbz#1184582 crash in grammar checking thread + +* Mon Jan 19 2015 David Tardon - 1:4.4.0.2-2 +- Resolves: rhbz#1180114 writerfilter: don't crash on w:customXmlDelRangeStart + etc. +- Resolves: rhbz#1175027 fix life cycle of SwConnectionDisposedListener_Impl + +* Fri Jan 09 2015 David Tardon - 1:4.4.0.2-1 +- update to 4.4.0 rc2 + +* Wed Jan 07 2015 Caolán McNamara - 1:4.4.0.1-2 +- Resolves: rhbz#1177547 system autocorr files not detected + +* Sun Dec 21 2014 David Tardon - 1:4.4.0.1-1 +- update to 4.4.0 rc1 + +* Fri Dec 12 2014 David Tardon - 1:4.4.0.0-6.beta2 +- Resolves: rhbz#1116534 crash when pasting over a formula + +* Sat Dec 06 2014 David Tardon - 1:4.4.0.0-5.beta2 +- update to 4.4.0 beta2 +- move officehelper.py to pyuno package so it can be imported from python + +* Tue Dec 02 2014 David Tardon - 1:4.4.0.0-4.beta1 +- add Provides: libreoffice-headless; packages are depending on it + +* Thu Nov 27 2014 Caolán McNamara - 1:4.4.0.0-3.beta1 +- Resolves: rhbz#1165444 abrt crash with NULL pView + +* Thu Nov 27 2014 Marek Kasik - 1:4.4.0.0-2.beta1 +- Rebuild (poppler-0.28.1) + +* Sat Nov 22 2014 David Tardon - 1:4.4.0.0-1.beta1 +- update to 4.4.0 beta1 + +* Fri Nov 21 2014 Caolán McNamara - 1:4.3.4.1-6 +- Resolves: fdo#86466 Wrong background color shown in impress table + +* Thu Nov 20 2014 Caolán McNamara - 1:4.3.4.1-5 +- Resolves: rhbz#1164551 we want to ensure that a libjvm.so is available + but we have no firm interest in which one that is + +* Wed Nov 19 2014 Caolán McNamara - 1:4.3.4.1-4 +- Resolves: rhbz#1165740 arbitrarily backport some rtf crash fixes + +* Mon Nov 17 2014 Michael Stahl - 1:4.3.4.1-3 +- set VCL.WM.ShouldSwitchWorkspace to false to avoid virtual desktop switching + +* Thu Nov 13 2014 Caolán McNamara - 1:4.3.4.1-2 +- fix impress table layout cache wrt wrong table selection border + +* Tue Nov 11 2014 David Tardon - 1:4.3.4.1-1 +- update to 4.3.4 rc1 + +* Tue Nov 11 2014 Caolán McNamara - 1:4.3.3.2-6 +- strip hard coded numbering off outline master previews + +* Mon Nov 10 2014 Caolán McNamara - 1:4.3.3.2-5 +- Resolves: rhbz#1161238 sync PRESOBJ_OUTLINE para depth on load + +* Thu Nov 06 2014 Caolán McNamara - 1:4.3.3.2-4 +- Resolves: fdo#60712 Inherits cell styles in inserting rows/columns +- implement toggling off removeable master elements with delete +- Resolves: fdo#78151 change underlying style on toggling bullets on/off in master view + +* Thu Nov 06 2014 Caolán McNamara - 1:4.3.3.2-3 +- Resolves: fdo#76581 copy-and-paste -> slideshow crash in presenter console + +* Wed Nov 05 2014 Caolán McNamara - 1:4.3.3.2-2 +- Resolves: fdo#37559 revert adding extra dummy polygons + +* Tue Oct 28 2014 David Tardon - 1:4.3.3.2-1 +- update to 4.3.3 rc2 + +* Sun Oct 19 2014 David Tardon - 1:4.3.3.1-2 +- enable support for 3-D models + +* Thu Oct 09 2014 David Tardon - 1:4.3.3.1-1 +- update to 4.3.3 rc1 + +* Wed Oct 08 2014 Stephan Bergmann - 1:4.3.2.2-5 +- Resolves: rhbz#1054952 bad access of smb URLs on KDE + +* Tue Sep 23 2014 Richard Hughes - 1:4.3.2.2-4 +- move appdata files to desktop files, where the belong + +* Tue Sep 23 2014 Caolán McNamara - 1:4.3.2.2-3 +- Resolves: rhbz#1054952 cannot access smb URLs on KDE + +* Tue Sep 23 2014 Caolán McNamara - 1:4.3.2.2-2 +- make brochure printing of impress/draw work out of the box +- Resolves: rhbz#1133863 fix looping layout + +* Mon Sep 22 2014 David Tardon - 1:4.3.2.2-1 +- update to 4.3.2 rc2 + +* Wed Sep 17 2014 Caolán McNamara - 1:4.3.2.1-3 +- make n-up printing of impress notes work out of the box + +* Wed Sep 17 2014 Caolán McNamara - 1:4.3.2.1-2 +- Resolves: fdo#80911 don't swap notes page width height + +* Fri Sep 12 2014 David Tardon - 1:4.3.2.1-1 +- update to 4.3.2 rc1 + +* Wed Sep 10 2014 Caolán McNamara - 1:4.3.1.2-5 +- create a master document template type + +* Tue Sep 09 2014 Caolán McNamara - 1:4.3.1.2-4 +- Resolves: fdo#82496 Change picture option with right click in writer + +* Fri Sep 05 2014 David Tardon - 1:4.3.1.2-3 +- build for aarch64 + +* Fri Aug 29 2014 Stephan Bergmann - 1:4.3.1.2-2 +- Resolves: rhbz#1098693 AArch64 port + +* Wed Aug 27 2014 David Tardon - 1:4.3.1.2-1 +- update to 4.3.1 rc2 + +* Tue Aug 26 2014 Caolán McNamara - 1:4.3.1.1-8 +- Related: rhbz#1131425 ure only needs jre-headless + +* Tue Aug 26 2014 David Tardon - 1:4.3.1.1-7 +- rebuild for ICU 53.1 + +* Fri Aug 22 2014 Caolán McNamara - 1:4.3.1.1-6 +- Resolves: rhbz#1131425 move libjawt-using office bean into a subpackage +- Resolves: rhbz#1125588 port LibreOffice to ppc64le + +* Tue Aug 19 2014 Caolán McNamara - 1:4.3.1.1-5 +- Resolves: rhbz#1131425 try java-headless instead of java + +* Sun Aug 17 2014 Fedora Release Engineering - 1:4.3.1.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Aug 16 2014 Rex Dieter 1:4.3.1.1-3 +- update mime scriptlets + +* Fri Aug 15 2014 Caolán McNamara - 1:4.3.1.1-2 +- Related: rhbz#1130264 crash in media playback on s390x + +* Sun Aug 10 2014 David Tardon - 1:4.3.1.1-1 +- update to 4.3.1 rc1 + +* Mon Jul 28 2014 David Tardon - 1:4.3.0.4-1 +- update to 4.3.0 rc4 + +* Fri Jul 25 2014 David Tardon - 1:4.3.0.3-4 +- Resolves: rhbz#1121254 crash when using font selector after adding new font + +* Fri Jul 25 2014 Caolán McNamara - 1:4.3.0.3-3 +- Resolves: rhbz#1122868 landscape printing is broken + +* Thu Jul 24 2014 David Tardon - 1:4.3.0.3-2 +- avoid image loss in Impress after auto-save + +* Wed Jul 16 2014 David Tardon - 1:4.3.0.1-1 +- update to 4.3.0 rc3 + +* Tue Jul 08 2014 David Tardon - 1:4.3.0.2-2 +- avoid problems detecting HTML files with xls extension + +* Wed Jul 02 2014 David Tardon - 1:4.3.0.2-1 +- update to 4.3.0 rc2 + +* Tue Jun 17 2014 David Tardon - 1:4.3.0.1-1 +- update to 4.3.0 rc1 + +* Mon Jun 09 2014 David Tardon - 1:4.3.0.0-9.beta2 +- Resolves: rhbz#1105376 FlatODF import/export does not work unless + libreoffice-xsltfilter is installed + +* Wed Jun 04 2014 David Tardon - 1:4.3.0.0-8.beta2 +- update to 4.3.0 beta2 + +* Thu May 29 2014 David Tardon - 1:4.3.0.0-7.beta1 +- fix some fallout from the import libs rebase + +* Wed May 28 2014 David Tardon - 1:4.3.0.0-6.beta1 +- switch to librevenge-based import libs + +* Tue May 27 2014 Kalev Lember - 1:4.3.0.0-5.beta1 +- Rebuild for boost 1.55.0 + +* Mon May 26 2014 David Tardon - 1:4.3.0.0-4.beta1 +- unblock build on ARM + +* Fri May 23 2014 Petr Machata - 1:4.3.0.0-3.beta1 +- Rebuild for boost 1.55.0 + +* Fri May 23 2014 David Tardon - 1:4.3.0.0-2.beta1 +- rebuild for boost 1.55.0 + +* Wed May 21 2014 David Tardon - 1:4.3.0.0-1.beta1 +- update to 4.3.0 beta1 + +* Fri May 16 2014 Caolán McNamara - 1:4.2.4.2-14 +- render smart-art with a vector format so it can be scaled nicely +- fix leak on pasting metafiles into office +- fix leak on pasting draw items into office +- fix another leak on scaling metric items + +* Thu May 15 2014 David Tardon - 1:4.2.4.2-13 +- fix SDK doc generation with doxygen 1.8.7 + +* Wed May 14 2014 David Tardon - 1:4.2.4.2-12 +- rebuild for new poppler + +* Mon May 12 2014 Caolán McNamara - 1:4.2.4.2-11 +- Resolves: rhbz#1096747 format->page crash on html doc + +* Mon May 12 2014 David Tardon - 1:4.2.4.2-10 +- Resolves: fdo#78119 bad july (červenec) month name support in czech + localization + +* Mon May 12 2014 Caolán McNamara - 1:4.2.4.2-9 +- Resolves: rhbz#1096486 avoid access to nonexisting parent +- Resolves: rhbz#1096295 hard to distinguish slides in slide pane + +* Fri May 09 2014 David Tardon - 1:4.2.4.2-8 +- Resolves: rhbz#1071604 Draw depends on files from libreoffice-impress, crashes + without them + +* Fri May 09 2014 Eike Rathke - 1:4.2.4.2-7 +- Resolves: fdo#77509 memory corruption / crash in Consolidate + +* Thu May 08 2014 Caolán McNamara - 1:4.2.4.2-6 +- center current slide after changing zoom +- add a status bar icon to fit slide to window +- Related: fdo#50697 reset the cache timeout on GetGraphic + +* Thu May 08 2014 Stephan Bergmann - 1:4.2.4.2-5 +- Resolves: rhbz#1092589 Thoroughly check whether JRE is still present + +* Tue May 06 2014 Caolán McNamara - 1:4.2.4.2-4 +- clip over-long comments + +* Thu May 01 2014 Eike Rathke - 1:4.2.4.2-3 +- Resolves: fdo#78294 default null-date for document import is 1899-12-30 + +* Thu May 01 2014 Caolán McNamara - 1:4.2.4.2-2 +- better scaling of notes-using pages + +* Wed Apr 30 2014 David Tardon - 1:4.2.4.2-1 +- update to 4.2.4 rc2 + +* Fri Apr 25 2014 Caolán McNamara - 1:4.2.4.1-7 +- Related: rhbz#1032774 disable autoexit when switching monitors + +* Thu Apr 24 2014 Caolán McNamara - 1:4.2.4.1-6 +- Resolves: fdo#37130 use 10pt Default style font for comments +- Resolves: fdo#60040 crash after undoing master page +- vertically center printout when including comments + +* Wed Apr 23 2014 Caolán McNamara - 1:4.2.4.1-5 +- add a 'format all comments' feature + +* Tue Apr 22 2014 Caolán McNamara - 1:4.2.4.1-4 +- Resolves: rhbz#1089377 crash on loading a specific rtf + +* Tue Apr 22 2014 Caolán McNamara - 1:4.2.4.1-3 +- sometimes tables in impress don't resize when adding rows +- Resolves: fdo#71423 crash while editing Impress tables + +* Fri Apr 18 2014 Caolán McNamara - 1:4.2.4.1-2 +- every 2nd print job is incorrectly flagged as failed +- Related: rhbz#1088625 PresenterPaintManager seen as NULL + +* Thu Apr 17 2014 David Tardon - 1:4.2.4.1-1 +- update to 4.2.4 rc1 + +* Wed Apr 16 2014 David Tardon - 1:4.2.3.3-6 +- install man pages +- Resolves: rhbz#1086714 overlarge pixmap + +* Wed Apr 16 2014 Caolán McNamara - 1:4.2.3.3-5 +- Resolves: fdo#36815 enable printing WYSIWYG sidewindow comments + +* Sat Apr 12 2014 David Tardon - 1:4.2.3.3-4 +- drop filtering of provides again + +* Sat Apr 12 2014 Caolán McNamara - 1:4.2.3.3-3 +- Related: rhbz#1081176 don't jump to cursor pos when we don't want to + +* Fri Apr 11 2014 Caolán McNamara - 1:4.2.3.3-2 +- Resolves: rhbz#1081176 don't jump to cursor pos when we don't want to +- Related: rhbz#1085916 kde startup woes + +* Sat Apr 05 2014 David Tardon - 1:4.2.3.3-1 +- update to 4.2.3 rc3 + +* Tue Apr 01 2014 Caolán McNamara - 1:4.2.3.2-3 +- Related: rhbz#1075951 abrt crash in MSWordExportBase + +* Mon Mar 31 2014 David Tardon - 1:4.2.3.2-2 +- Resolves: rhbz#1080196 mdds/multi_type_vector_itr.hpp update_node(): + soffice.bin killed by SIGSEGV + +* Wed Mar 26 2014 David Tardon - 1:4.2.3.2-1 +- update to 4.2.3 rc2 + +* Tue Mar 25 2014 Caolán McNamara - 1:4.2.3.1-2 +- Resolves: rhbz#1077780 crash on loading a specific docx + +* Mon Mar 17 2014 David Tardon - 1:4.2.3.1-1 +- update to 4.2.3 rc1 + +* Fri Mar 14 2014 Caolán McNamara - 1:4.2.2.1-7 +- Related: rhbz#1076264 intermittent a11y crash in calc + +* Mon Mar 10 2014 Michael Stahl - 1:4.2.2.1-6 +- Resolves: rhbz#988516: DOCX import: fix context stack when importing header +- Resolves: rhbz#1072553: Fix deselection problems of template view +- Resolves: rhbz#1072607: fix crash in SvxRuler::MouseMove() +- Resolves: rhbz#1043551: sw: avoid division-by-0 in Text Grid painting code +- RTF import: import field parameters +- RTF import: fix spurious page breaks at doc end + +* Tue Mar 04 2014 Caolán McNamara - 1:4.2.2.1-5 +- Related: rhbz#1065807 wizards should find the right wizards subdir + of Template_internal, who knew this stuff was so fragile + +* Mon Mar 03 2014 Caolán McNamara - 1:4.2.2.1-4 +- Related: rhbz#1065807 wizards should look in Template_internal + +* Fri Feb 28 2014 Caolán McNamara - 1:4.2.2.1-3 +- Resolves: rhbz#1007697 Update on a Window deletes itself + +* Fri Feb 28 2014 Caolán McNamara - 1:4.2.2.1-2 +- Related: rhbz#1065807 don't throw with no "Templates" dir under KDE + +* Thu Feb 27 2014 David Tardon - 1:4.2.2.1-1 +- update to 4.2.2 rc1 + +* Thu Feb 27 2014 Stephan Bergmann - 1:4.2.1.1-4 +- Resolves: fdo#75540 spadmin does not start + +* Thu Feb 27 2014 David Tardon - 1:4.2.1.1-3 +- Resolves: rhbz#1057977 do not crash when fonts are updated + +* Tue Feb 25 2014 Caolán McNamara - 1:4.2.1.1-2 +- Resolves: rhbz#1065807 search XDG defined "Templates" dir + +* Thu Feb 13 2014 David Tardon - 1:4.2.1.1-1 +- update to 4.2.1 rc1 + +* Thu Feb 13 2014 David Tardon - 1:4.2.0.4-4 +- rebuild for new ICU + +* Thu Feb 06 2014 David Tardon - 1:4.2.0.4-3 +- Resolves: rhbz#1017379 libreoffice impress imports animated motion paths + incorrectly from powerpoint +- Resolves: fdo#33852 Custom animation (Motionpath Left) isn't being + imported correctly from .ppt + +* Thu Jan 30 2014 David Tardon - 1:4.2.0.4-2 +- split LibreLogo into a separate subpackage +- create a metapackage depending on all subpackages containing filters, + for use of packages like unoconv + +* Tue Jan 28 2014 David Tardon - 1:4.2.0.4-1 +- update to 4.2.0 rc4 + +* Fri Jan 24 2014 David Tardon - 1:4.2.0.3-3 +- enable EOT support +- fix PPC build + +* Thu Jan 23 2014 David Tardon - 1:4.2.0.3-2 +- stop showing math and startcenter in menu (again) + +* Wed Jan 22 2014 David Tardon - 1:4.2.0.3-1 +- update to 4.2.0 rc3 + +* Mon Jan 13 2014 Caolán McNamara - 1:4.2.0.2-2 +- Related: rhbz#1047871 conditional formatting doesn't fit on screen + +* Thu Jan 09 2014 David Tardon - 1:4.2.0.2-1 +- update to 4.2.0 rc2 +- Resolves: rhbz#1049543 Include AppData files in packages + +* Tue Jan 07 2014 David Tardon - 1:4.2.0.1-1 +- 4.2.0 rc1 + +* Wed Dec 11 2013 Caolán McNamara - 1:4.2.0.0-3.beta2 +- Resolves: rhbz#1040291 Change language name from "Oriya" to "Odia" + +* Wed Dec 04 2013 Caolán McNamara - 1:4.2.0.0-2.beta2 +- update to 4.2.0 beta2 +- Related: rhbz#1032774 bodge around reported NULL +- Resolves: rhbz#1035092 no shortcut key for Italian 'Tools' menu +- Resolves: rhbz#912529 Kerkis SmallCaps shown instead of Kerkis Regular +- Resolves: rhbz#1038189 refresh printer list when print dialog launched +- openssl no longer required to build + +* Thu Nov 21 2013 David Tardon - 1:4.2.0.0-1.beta1 +- switch to 4.2.0 + +* Wed Nov 20 2013 Stephan Bergmann - 1:4.1.3.2-5 +- Resolves: rhbz#1031989 Accept --pt in addition to deprecated -pt +- Related: rhbz#1014990 valgrind reports uninitialized variables + +* Sun Nov 03 2013 David Tardon - 1:4.1.3.2-4 +- adapt for libmwaw 0.2 + +* Thu Oct 31 2013 David Tardon - 1:4.1.3.2-3 +- Resolves: fdo#56209 reviving FilterFormulaParser + +* Thu Oct 31 2013 Stephan Bergmann - 1:4.1.3.2-2 +- Resolves: fdo#67725 unoidl::AggregatingCursor must wrap modules for aggregation +- Resolves: rhbz#1021915 force menubar menus to be up/down only +- Resolves: rhbz#1025201 Incorrect rendering of Devanagari short i + +* Wed Oct 23 2013 David Tardon - 1:4.1.3.2-1 +- 4.1.3 rc2 +- Resolves: rhbz#1022094 libreoffice-4.1.3.1-1 was built without + langpacks + +* Mon Oct 21 2013 Caolán McNamara - 1:4.1.3.1-2 +- Resolves: rhbz#1020712 wrong default CTL font shown in editengine +- Resolves: rhbz#919070 display -1 means span all screens + + +* Wed Oct 16 2013 David Tardon - 1:4.1.3.1-1 +- 4.1.3 rc1 + +* Mon Oct 07 2013 Caolán McNamara - 1:4.1.2.3-4 +- Resolves: rhbz#1001768: fix various a11y deadlocks and crashes +- Resolves: rhbz#1016022 fix cut from impress and paste to writer +- Resolves: rhbz#1003179 fix AUTOFMT related crashes in Writer Undo + +* Mon Oct 07 2013 Caolán McNamara - 1:4.1.2.3-3 +- Resolves: rhbz#1015281 crash on clicking custom animation +- Resolves: rhbz#996162 crash with no bullet font + +* Wed Oct 02 2013 Caolán McNamara - 1:4.1.2.3-2 +- Resolves: rhbz#1013480 crash in EditLineList::operator[] +- Resolves: rhbz#1014010 crash on start up +- Resolves: rhbz#1013844 encrypted OOo 1.0 files don't reopen + +* Mon Sep 30 2013 David Tardon - 1:4.1.2.3-1 +- 4.1.2 rc3 + +* Fri Sep 20 2013 David Tardon - 1:4.1.2.2-1 +- 4.1.2 rc2 + +* Tue Sep 17 2013 Caolán McNamara - 1:4.1.2.1-3 +- add select sheet menu to calc prev/next area +- Resolves: rhbz#988104 crash on certain pptx + +* Thu Sep 12 2013 Caolán McNamara - 1:4.1.2.1-2 +- Resolves: rhbz#1006850 crash in SwCommentRuler + +* Thu Sep 05 2013 David Tardon - 1:4.1.2.1-1 +- 4.1.2 rc1 + +* Tue Sep 03 2013 Caolán McNamara - 1:4.1.1.2-3 +- Resolves: rhbz#993963 NULL m_pWindow on firefox close plugin window + +* Fri Aug 23 2013 Stephan Bergmann - 1:4.1.1.2-2 +- Resolves: rhbz#1000150, Do not call exit upon XIOError + +* Thu Aug 22 2013 David Tardon - 1:4.1.1.2-1 +- 4.1.1 rc2 +- Related: rhbz#895690 Always try to do a mount when opening a file via GIO +- Resolves: rhbz#998136 wrong index to gWidgetData +- Resolves: rhbz#998046 store last size/position of the base windows + +* Mon Aug 19 2013 Marek Kasik - 1:4.1.1.1-2 +- Rebuild (poppler-0.24.0) + +* Fri Aug 09 2013 David Tardon - 1:4.1.1.1-1 +- 4.1.1 rc1 + +* Fri Aug 09 2013 Caolán McNamara - 1:4.1.0.4-6 +- Resolves: fdo#67743 user autocorr file not written + +* Tue Jul 30 2013 Stephan Bergmann - 1:4.1.0.4-5 +- Resolves: rhbz#989246 Honor user's JavaDriverClass override in mysql driver +- Resolves: fdo#67045 fix several nasty screen selection issues + +* Tue Jul 30 2013 Caolán McNamara - 1:4.1.0.4-4 +- Resolves: rhbz#989686 Fix crash with stripping whitespace from toc entries + +* Mon Jul 29 2013 David Tardon - 1:4.1.0.4-3 +- make libwpd-based filters work correctly with newest libwpd + +* Sun Jul 28 2013 Petr Machata - 1:4.1.0.4-2 +- Rebuild for boost 1.54.0 + +* Wed Jul 24 2013 David Tardon - 1:4.1.0.4-1 +- 4.1.0 rc4 + +* Mon Jul 22 2013 Eike Rathke - 1:4.1.0.3-2 +- force rebuild with icu-50.1.2-7 + +* Thu Jul 18 2013 David Tardon - 1:4.1.0.3-1 +- 4.1.0 rc3 +- Resolves: fdo#48835 GNOME3 app menu + +* Thu Jul 18 2013 Caolán McNamara - 1:4.1.0.2-5 +- silence scary gcc warning +- fdo#66924 switching to master view is broken + +* Tue Jul 16 2013 David Tardon - 1:4.1.0.2-4 +- bump release + +* Fri Jul 12 2013 David Tardon - 1:4.1.0.2-3 +- Resolves: rhbz#983809 libreoffice-base misses deps on needed java packages + +* Thu Jul 11 2013 David Tardon - 1:4.1.0.2-2 +- Resolves: rhbz#980387 Exporting a odg to jpg or tiff generates error + +* Thu Jul 04 2013 David Tardon - 1:4.1.0.2-1 +- 4.1.0 rc2 + +* Mon Jul 01 2013 Caolán McNamara - 1:4.1.0.1-8 +- Resolves: rhbz#979758 crash on Diagrammen in LibreOffice help page + +* Thu Jun 27 2013 David Tardon - 1:4.1.0.1-7 +- bump revision + +* Mon Jun 24 2013 Marek Kasik - 1:4.1.0.1-6 +- Rebuild (poppler-0.22.5) + +* Mon Jun 24 2013 David Tardon - 1:4.1.0.1-5 +- fix build on big endian archs + +* Mon Jun 24 2013 David Tardon - 1:4.1.0.1-4 +- put glade catalog into an extra packgae + +* Sun Jun 23 2013 Caolán McNamara - 1:4.1.0.1-3 +- Resolves: rhbz#976304 gallery elements may not insert + +* Wed Jun 19 2013 Dennis Gilmore - 1:4.1.0.1-2 +- fix _smp_mflags macro useage + +* Wed Jun 19 2013 David Tardon - 1:4.1.0.1-1 +- 4.1.0 rc1 +- Related: rhbz#971321 failing tests on ppc and s390 + +* Sun Jun 16 2013 David Tardon - 1:4.1.0.0-9.beta2 +- Resolves: rhbz#971321 failing tests on ppc and s390 +- Resolves: rhbz#974062 incorrect rendering of text in outline blocks in + Impress + +* Fri Jun 07 2013 David Tardon - 1:4.1.0.0-8.beta2 +- Related: rhbz#971795 go back to BR: harfbuzz-devel + +* Fri Jun 07 2013 David Tardon - 1:4.1.0.0-7.beta2 +- Resolves: rhbz#971230 Use BR: harfbuzz-icu-devel + +* Wed Jun 05 2013 David Tardon - 1:4.1.0.0-7.beta1 +- 4.1.0 beta2 + +* Wed Jun 05 2013 Caolán McNamara - 1:4.1.0.0-6.beta1 +- Related: rhbz#968892 discard impossible languages for Oriya script + +* Tue Jun 04 2013 Caolán McNamara - 1:4.1.0.0-5.beta1 +- Resolves: rhbz#968892 block entire grapheme together for glyph fallback +- Related: rhbz#968892 discard impossible languages for glyph fallback + +* Fri May 31 2013 Caolán McNamara - 1:4.1.0.0-4.beta1 +- Resolves: rhbz#968976 fix dropdown list autosizing + +* Thu May 30 2013 David Tardon - 1:4.1.0.0-3.beta1 +- build fix for s390 + +* Fri May 24 2013 David Tardon - 1:4.1.0.0-2.beta1 +- 4.1.0 beta1 + +* Fri May 24 2013 Stephan Bergmann - 1:4.0.3.3-3 +- Resolves: rhbz#961460 can't save WebDAV (davs) files + +* Thu May 16 2013 Caolán McNamara - 1:4.0.3.3-2 +- Resolves: rhbz#963276 font options cache crash + +* Fri May 03 2013 David Tardon - 1:4.0.3.3-1 +- 4.0.3 rc3 + +* Tue Apr 30 2013 David Tardon - 1:4.0.3.2-1 +- 4.0.3 rc2 + +* Mon Apr 22 2013 Stephan Bergmann - 1:4.0.3.1-2 +- Resolves: rhbz#954991 Avoid static data (causing trouble at exit) + +* Thu Apr 18 2013 David Tardon - 1:4.0.3.1-1 +- 4.0.3 rc1 +- Resolves: rhbz#867808 do not throw UNO exceptions by pointer in C++ + +* Tue Apr 16 2013 Caolán McNamara - 1:4.0.2.2-4 +- Resolves: rhbz#927223 syntax highlighting crash + +* Mon Apr 08 2013 Caolán McNamara - 1:4.0.2.2-3 +- Resolves: rhbz#949238 div by zero on pagedown in 0 width panel + +* Fri Apr 05 2013 Kalev Lember - 1:4.0.2.2-2 +- Resolves: rhbz#949106 libreoffice drags in both openjdk 1.7.0 and 1.8.0 + +* Thu Mar 28 2013 David Tardon - 1:4.0.2.2-1 +- 4.0.2 rc2 +- Resolves: rhbz#876742 manipulation with larger tables in impress is + very slow + +* Fri Mar 15 2013 Caolán McNamara - 1:4.0.2.1-2 +- Resolves: rhbz#906137 slide show inverts outputs + +* Fri Mar 15 2013 David Tardon - 1:4.0.2.1-1 +- 4.0.2 rc1 +- Resolves: rhbz#921716 Build Breton language pack + +* Wed Mar 13 2013 Stephan Bergmann - 1:4.0.1.2-4 +- Resolves: rhbz#895690 failure saving to gvfs mounts + +* Tue Mar 12 2013 Caolán McNamara - 1:4.0.1.2-3 +- Resolves: rhbz#920697 presentation not always full-screen + +* Thu Mar 07 2013 Caolán McNamara - 1:4.0.1.2-2 +- Related: rhbz#902884 check for NULL GetSelectedMasterPage +- Resolves: fdo#61241 force area page to size itself +- Resolves: fdo#61656 use order and orientation combobox +- Resolves: fdo#56031 RSID attr changes drop content changes + +* Thu Feb 28 2013 David Tardon - 1:4.0.1.2-1 +- 4.0.1 rc2 + +* Tue Feb 26 2013 Eike Rathke - 1:4.0.0.3-8 +- do not access vector elements beyond size, rhbz#847519 related +- Resolves: rhbz#742780 let make OPT_FLAGS=... override SDK flags +- Resolves: rhbz#907933 crash on removing second last para + +* Tue Feb 19 2013 Caolán McNamara - 1:4.0.0.3-7 +- Resolves: rhbz#895196 sc filter float a11y parent of itself + +* Tue Feb 19 2013 David Tardon - 1:4.0.0.3-6 +- Resolves: rhbz#911896 add Kazakh localization + +* Fri Feb 15 2013 Caolán McNamara - 1:4.0.0.3-5 +- make evolution 3.6 work with address book +- Resolves: rhbz#910176 cannot select directory with gtk folder picker +- fixes for building against Boost 1.53.0 + +* Fri Feb 15 2013 Stephan Bergmann - 1:4.0.0.3-4 +- Resolves: fdo#60491 missing libemboleobj.so +- Resolves: rhbz#908674 crash on start + +* Sat Feb 09 2013 Denis Arnaud - 1:4.0.0.3-3 +- Rebuild for Boost-1.53.0 + +* Wed Feb 06 2013 David Tardon - 1:4.0.0.3-2 +- fix parsing errors in translated help + +* Fri Feb 01 2013 David Tardon - 1:4.0.0.3-1 +- 4.0.0 rc3 + +* Wed Jan 23 2013 David Tardon - 1:4.0.0.2-1 +- 4.0.0 rc2 +- use ucpp again + +* Tue Jan 22 2013 David Tardon - 1:4.0.0.1-3 +- Resolves: rhbz#760765 Impress doesn't copy custom styles from one file + to another + +* Mon Jan 21 2013 David Tardon - 1:4.0.0.1-2 +- Resolves: rhbz#901346 do not install 512x512 icons + +* Tue Jan 15 2013 David Tardon - 1:4.0.0.1-1 +- 4.0.0 rc1 + +* Sat Dec 22 2012 David Tardon - 1:4.0.0.0-4.beta2 +- use system cpp instead of ucpp + +* Wed Dec 19 2012 David Tardon - 1:4.0.0.0-3.beta2 +- 4.0.0 beta2 + +* Thu Dec 06 2012 David Tardon - 1:4.0.0.0-2.beta1 +- 4.0.0 beta1 + +* Thu Nov 29 2012 David Tardon - 1:3.6.4.3-1 +- 3.6.4 rc3 + +* Wed Nov 28 2012 Caolán McNamara - 1:3.6.4.1-2 +- fix docx import on big endian + +* Sun Nov 18 2012 David Tardon - 1:3.6.4.1-1 +- 3.6.4 rc1 + +* Wed Nov 14 2012 Caolán McNamara - 1:3.6.3.2-8 +- Resolves: rhbz#872815 ogltrans effects still suboptimal + +* Tue Nov 13 2012 Caolán McNamara - 1:3.6.3.2-7 +- big endian test failure + +* Thu Nov 08 2012 Caolán McNamara - 1:3.6.3.2-6 +- Resolves: fdo#56198/rhbz#868002 honour gtk-scrollbar-warp-preference + +* Tue Nov 06 2012 Caolán McNamara - 1:3.6.3.2-5 +- bump for libexttextcat + +* Fri Nov 02 2012 David Tardon - 1:3.6.3.2-4 +- Resolves: rhbz#871929 add keywords to desktop files +- fix debuginfo + +* Wed Oct 31 2012 Eike Rathke - 1:3.6.3.2-3 +- Resolves: rhbz#865058 increase number of user-defined format codes + +* Fri Oct 26 2012 David Tardon - 1:3.6.3.2-2 +- Resolves: rhbz#824035 do not bundle saxon + +* Wed Oct 24 2012 David Tardon - 1:3.6.3.2-1 +- 3.6.3 rc2 +- drop integrated 0001-Resolves-rhbz-868479-fdo-56281-doubled-in-German-ok-.patch + +* Mon Oct 22 2012 Caolán McNamara - 1:3.6.3.1-3 +- Resolves: rhbz#868479 guard against duplicated ~ in OK/Cancel + +* Thu Oct 11 2012 David Tardon - 1:3.6.3.1-2 +- Resolves: rhbz#858641 backport gstreamer 1.0 support to F-18 + +* Thu Oct 11 2012 Caolán McNamara - 1:3.6.3.1-1 +- 3.6.3 rc1 +- drop integrated 0001-Resolves-rhbz-855972-crash-on-switching-to-outline-v.patch +- drop integrated 0001-fdo-52022-Simple-LargeControlPoints-actually-can-hav.patch +- drop integrated 0001-fdo-46071-Do-not-hide-windows-based-on-nil-Visible-p.patch + +* Fri Oct 05 2012 Stephan Bergmann - 1:3.6.2.2-3 +- Resolves: fdo#46071 Do not hide windows based on nil Visible property + +* Fri Oct 05 2012 Stephan Bergmann - 1:3.6.2.2-2 +- Resolves: fdo#52022 Part of data in userdir is lost on upgrade + +* Wed Sep 26 2012 David Tardon - 1:3.6.2.2-1 +- 3.6.2 rc2 + +* Wed Sep 12 2012 Caolán McNamara - 1:3.6.2.1-2 +- Resolves: rhbz#855541 XIOError handler multithread woes + +* Wed Sep 12 2012 David Tardon - 1:3.6.2.1-1 +- 3.6.2 rc1 + +* Tue Sep 11 2012 Caolán McNamara - 1:3.6.1.2-4 +- Resolves: rhbz#855507 large ole2 compound files fail to load + +* Mon Sep 10 2012 Caolán McNamara - 1:3.6.1.2-3 +- Resolves: rhbz#855972 crash on switching to outline view + +* Wed Aug 29 2012 Caolán McNamara - 1:3.6.1.2-2 +- Related: rhbz#850709 hunspell en-US available standalone so + make English langpack require hunspell-en and core just + bare bones hunspell-en-US + +* Sun Aug 26 2012 David Tardon - 1:3.6.1.2-1 +- 3.6.1 rc2 + +* Wed Aug 22 2012 Caolán McNamara - 1:3.6.1.1-2 +- Resolves: rhbz#846775 Clipboard must be disposed before selection +- Resolves: rhbz#842292 crash in scrolling multiselection in draw + +* Wed Aug 15 2012 David Tardon - 1:3.6.1.1-1 +- 3.6.1 rc1 + +* Sun Aug 12 2012 Kevin Fenzi - 1:3.6.0.4-3 +- Rebuild for new boost + +* Sat Jul 28 2012 David Tardon - 1:3.6.0.4-2 +- rebuilt for boost 1.50 + +* Fri Jul 27 2012 David Tardon - 1:3.6.0.4-1 +- 3.6.0 rc4 + +* Thu Jul 26 2012 David Tardon - 1:3.6.0.3-2 +- Resolves: rhbz#842552 crash in pptx import + +* Wed Jul 25 2012 David Tardon - 1:3.6.0.3-1 +- 3.6.0 rc3 + +* Tue Jul 17 2012 David Tardon - 1:3.6.0.2-1 +- 3.6.0 rc2 + +* Mon Jul 16 2012 Caolán McNamara - 1:3.6.0.1-3 +- Resolves: rhbz#836937 insanely slow with Zemberek + +* Mon Jul 16 2012 David Tardon - 1:3.6.0.1-2 +- rebuild for new libexttextcat + +* Thu Jul 12 2012 David Tardon - 3.6.0.1-1 +- 3.6.0 rc1 + +* Mon Jul 09 2012 Caolán McNamara - 3.6.0.0-4 +- Resolves: rhbz#838368 --view ignored while -view accepted + +* Thu Jul 05 2012 David Tardon - 3.6.0.0-3 +- 3.6.0 beta3 + +* Mon Jul 2 2012 Marek Kasik - 3.6.0.0-2 +- Rebuild (poppler-0.20.1) + +* Wed Jun 27 2012 David Tardon - 3.6.0.0-1 +- 3.6.0 beta2 +- drop integrated 0001-move-binfilter-mime-types-into-extra-.desktop-file.patch +- drop integrated 0001-Resolves-rhbz-788042-skip-splashscreen-with-quicksta.patch +- drop integrated libreoffice-ensure-non-broken-xml-tree.patch +- drop integrated 0001-preserve-timestamps-for-.py-files.patch +- drop integrated 0001-Resolves-rhbz-788045-swriter-help-etc-doesn-t-show-h.patch +- drop integrated 0001-Resolves-rhbz-799525-put-flat-odf-mimetypes-in-xsltf.patch +- drop integrated 0001-Resolves-rhbz-800272-complain-about-unknown-command-.patch +- drop integrated 0001-Resolves-rhbz-806663-SlideshowImpl-can-outlive-SdMod.patch +- drop integrated 0001-desktop-do-not-complain-about-soffice-command-line-o.patch +- drop integrated 0001-Resolves-fdo-48096-torn-off-popups-trigger-keyboard-.patch +- drop integrated 0001-fdo-38088-better-CSV-import-default-separators.patch +- drop integrated 0001-save-register-arguments-first.patch +- drop integrated 0001-do-not-let-gcc-use-registers-we-are-setting-ourselve.patch +- drop integrated 0001-wrong-types-used-here-breaks-64bit-bigendian.patch +- drop integrated 0001-Resolves-rhbz-805743-a11y-call-doShow-after-we-have-.patch +- drop integrated 0001-Resolves-fdo-49849-implement-Unicode-6.1-hebrew-line.patch +- drop integrated 0001-use-ure-instead-of-ure-link.patch +- drop broken 0001-fix-setting-of-paper-tray-from-print-dialog-fdo-4393.patch + +* Mon Jun 18 2012 Caolán McNamara - 3.5.5.1-2 +- Resolves: rhbz#830810 missing dependency on lucene-contrib + +* Thu Jun 14 2012 David Tardon - 3.5.5.1-1 +- 3.5.5 rc1 +- drop integrated 0001-make-hsqldb-build-with-java-1.7.patch +- drop integrated 0001-Related-rhbz-799628-crash-with-chewing-IM-with-g3g.patch +- drop integrated 0001-silence-SolarMutex-not-locked-spew.patch +- drop integrated 0001-gcc-trunk-fix-unable-to-find-string-literal-operator.patch +- drop integrated 0001-ppc-yyinput-returns-a-int-truncating-to-unsigned-cha.patch +- drop integrated 0001-Resolves-rhbz-826609-rhbz-820554-fix-smoketest-on-pp.patch + +* Mon Jun 11 2012 David Tardon - 3.5.4.2-3 +- make gdb pretty printers for URE libs usable again + +* Fri Jun 08 2012 Caolán McNamara - 3.5.4.2-2 +- Resolves: rhbz#826609, rhbz#820554 fix smoketest on ppc[64] and s390[x] + +* Wed May 23 2012 David Tardon - 3.5.4.2-1 +- 3.5.4 rc2 + +* Thu May 17 2012 Caolán McNamara - 3.5.4.1-2 +- Resolves: rhbz#811226 ARM FTBFS + +* Wed May 16 2012 David Tardon - 3.5.4.1-1 +- 3.5.4 rc1 +- drop integrated 0001-do-not-prepend-n-twice-it-confuses-KFileDialog-rhbz-.patch +- drop integrated 0001-incrementing-index-twice-in-one-run-seems-wrong.patch +- drop integrated 0001-fdo-49365-correctly-map-monitor-index-back-to-screen.patch +- drop integrated 0001-rhbz-809019-count-mirrored-monitors-as-one.patch + +* Sun May 13 2012 Caolán McNamara - 3.5.3.2-5 +- Resolves: fdo#49849 line breaking fixes for Hebrew + +* Fri May 11 2012 David Tardon - 3.5.3.2-4 +- Resolves: rhbz#820439 KDE export dialog broken for most formats +- Resolves: fdo#49365 Libreoffice fails to start on second screen with + gtk vcl plugin +- Resolves: rhbz#809019 Impress thinks a machine with 2 monitors in + clone mode is multihead + +* Wed May 09 2012 Caolán McNamara - 3.5.3.2-3 +- Resolves: rhbz#805743 a11y crash in impress/draw +- Resolves: rhbz#813202 opengl slide transitions still a bit + problematic in Fedora 17 + +* Thu May 03 2012 David Tardon - 3.5.3.2-2 +- rebuild for changed dependencies + +* Wed Apr 25 2012 David Tardon - 3.5.3.2-1 +- 3.5.3 rc2 +- fix broken test on 64bit big endian + +* Mon Apr 23 2012 David Tardon - 3.5.3.1-2 +- rebuild for icu +- fix UNO bridges for ppc and ppc64 + +* Thu Apr 19 2012 David Tardon - 3.5.3.1-1 +- 3.5.3 rc1 +- drop integrated 0001-Introduced-SystemShellExecuteFlags-URIS_ONLY.patch +- drop integrated 0001-Simplify-code-and-use-proper-register-names-for-linu.patch +- drop integrated 0001-resolved-rhbz-813280-the-current-document-is-not-alw.patch + +* Wed Apr 18 2012 Eike Rathke - 3.5.2.1-7 +- Resolves: rhbz#813280 sheets cannot be moved in Calc + +* Wed Apr 11 2012 Eike Rathke - 3.5.2.1-6 +- Resolves: fdo#38088 rhbz#810267 better CSV import default separators + +* Tue Apr 10 2012 Caolán McNamara - 3.5.2.1-5 +- Resolves: rhbz#811226 FTBFS ARM + +* Thu Apr 05 2012 Stephan Bergmann - 3.5.2.1-4 +- Fix URIS_ONLY flag issue +- rebuild for db4 + +* Mon Apr 02 2012 Caolán McNamara - 3.5.2.1-3 +- Resolves: rhbz#708041 focus problems with tearable menus + +* Mon Mar 26 2012 Caolán McNamara - 3.5.2.1-2 +- Resolves: rhbz#806663 SlideshowImpl can outlive SdModule + +* Sun Mar 25 2012 David Tardon - 3.5.2.1-1 +- 3.5.2 rc1 +-drop integrated 0001-yet-another-clash-with-macro-name.patch + +* Wed Mar 14 2012 David Tardon - 3.5.1.2-2 +- Resolves: rhbz#770209 can't change paper tray setting while printing + +* Thu Mar 08 2012 David Tardon - 3.5.1.2-1 +- 3.5.1 rc2 + +* Tue Mar 06 2012 Caolán McNamara - 3.5.1.1-3 +- Resolves: rhbz#799628 crash with chewing IM with g3g +- Resolves: rhbz#799525 put flat odf mimetypes into xsltfilter.desktop +- Resolves: rhbz#800272 complain about unknown commandline options + +* Wed Feb 29 2012 Caolán McNamara - 3.5.1.1-2 +- Resolves: rhbz#788045 swriter --help doesn't show help +- Resolves: rhbz#798667 missing .desktop icons + +* Sun Feb 26 2012 David Tardon - 3.5.1.1-1 +- 3.5.1 rc1 +- drop 0001-Resolves-fdo-43644-survive-registered-but-unavailabl.patch +- drop 0001-Resolves-rhbz-789622-Adapt-SDK-to-changed-paths-in-L.patch +- drop 0001-Fix-fdo-45177-avoid-linked-undo-for-the-while.patch +- drop 0001-Fix-some-apparent-misuses-of-RTL_CONSTASCII_USTRINGP.patch +- drop binfilter-Fix-some-apparent-misuses-of-RTL_CONSTASCII_USTRINGP.patch +- Resolves: fdo#45177 avoid linked undo crash +- Fix some apparent misuses of RTL_CONSTASCII_USTRINGPARAM (cherry-picked from + upstream libreoffice-3-5 branch) + +* Tue Feb 14 2012 Stephan Bergmann - 3.5.0.3-5 +- Resolves rhbz#789622: Adapt SDK to changed paths in LO installation + +* Mon Feb 13 2012 Caolán McNamara - 3.5.0.3-4 +- ensure gdb .py files have the same timstamps so that multilib + .pyc's and .pyo's have the same content (timestamp in binary cache) + +* Sat Feb 11 2012 Caolán McNamara - 3.5.0.3-3 +- make sure .tree files don't get busted again + +* Tue Feb 07 2012 Stephan Bergmann - 3.5.0.3-2 +- junit4 -> junit +- Resolves: rhbz#788042 skip splashscreen with quickstarter +- with split binfilter we need fix for fdo#43644 + +* Thu Feb 02 2012 David Tardon - 3.5.0.3-1 +- 3.5.0 rc3 +- Resolves: rhbz#786328 add nlpsolver subpackage +- split legacy binary filters into subpackage + +* Thu Jan 26 2012 Stephan Bergmann - 3.5.0.2-2 +- add libreoffice-postgresql subpackage + +* Wed Jan 25 2012 David Tardon - 3.5.0.2-1 +- 3.5.0 rc2 + +* Thu Jan 19 2012 David Tardon - 3.5.0.1-1 +- 3.5.0 rc1 +- drop integrated 0001-workaround-internal-compiler-error-with-gcc-4.7.patch +- drop integrated 0001-fix-for-gcc-4.7-C-11-these-are-not-string-literal-op.patch +- drop integrated 0001-fix-for-gcc-4.7-C-11-this-is-not-string-literal-oper.patch +- drop integrated 0001-Revert-fast_merge-fix-mis-merge-of-first-module-s-st.patch +- drop integrated 0001-fix-writing-of-strings-from-the-first-module.patch +- drop integrated 0001-refactor-slightly-to-avoid-link-problems-with-gcc-4..patch + +* Fri Jan 13 2012 David Tardon - 3.4.99.3-1 +- 3.5.0 beta3 +- drop integrated 0001-fix-syntactic-error.patch +- drop integrated 0001-gcc-trunk-fix-error-unable-to-find-string-literal-op.patch +- drop integrated 0001-gcc-trunk-avoid-confusion.patch +- drop integrated 0001-workaround-for-LO-namespace-pollution-breaking-KDE4-.patch +- drop integrated 0001-smath-does-not-handle-accents-in-MathML.patch +- Resolves: rhbz#533318 smath does not handle accents in MathML +- Resolves: rhbz#771108 English menu in writer despite installation of + libreoffice-langpack-de + +* Fri Jan 06 2012 David Tardon - 3.4.99.2-2 +- rebuild with gcc 4.7 + +* Wed Dec 21 2011 David Tardon - 3.4.99.2-1 +- 3.5.0 beta2 +- drop integrated 0001-Resolves-rhbz-761009-IFSD_Equal-is-asymmetrical.patch +- drop integrated 0001-Resolves-rhbz-767708-avoid-SIGBUS-writing-to-overcom.patch +- drop integrated 0001-force-gbuild-stage-for-CustomTargets.patch +- drop integrated 0001-these-translations-do-already-exist-in-translations-.patch +- drop integrated 0001-Fix-typo-and-clean-up.patch +- use system mysql-connector-c++ + +* Sun Dec 18 2011 David Tardon - 3.4.99.1-1 +- 3.5.0 beta1 +- drop integrated 0001-Related-fdo-37195-migrationoo3-not-registered.patch +- drop integrated 0001-Related-i58612-don-t-crash-anyway.patch +- drop integrated 0001-Related-rhbz-652604-better-survive-exceptions-thrown.patch +- drop integrated 0001-Related-rhbz-702833-addEventListener-without-removeE.patch +- drop integrated 0001-Related-rhbz-711087-band-aid.patch +- drop integrated 0001-Related-rhbz-718976-crash-in-SwTxtSizeInfo-GetMultiC.patch +- drop integrated 0001-Related-rhbz-730225-avoid-segv-in-ld-this-was-set-to.patch +- drop integrated 0001-Related-rhbz-753201-fedora-ant-java-1.5.0-gcj-won-t-.patch +- drop integrated 0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch +- drop integrated 0001-Resolves-rhbz-693265-fix-crash-from-unhandled-except.patch +- drop integrated 0001-Resolves-rhbz-695509-crash-in-RefreshDocumentLB.patch +- drop integrated 0001-Resolves-rhbz-713154-pdf-export-dialog-too-tall-to-f.patch +- drop integrated 0001-Resolves-rhbz-715549-use-fontconfig-s-detected-forma.patch +- drop integrated 0001-Resolves-rhbz-738255-avoid-crash-on-NULL-pointer.patch +- drop integrated 0001-Resolves-rhbz-751290-KDE-black-on-dark-tooltips.patch +- drop integrated 0001-add-Oracle-Java-1.7.0-recognition.patch +- drop integrated 0001-avoid-using-com.sun.org-apis.patch +- drop integrated 0001-bubble-down-configure-test-findings-on-visibility.patch +- drop integrated 0001-fix-horizontal-scrollbars-with-KDE-oxygen-style-bnc-.patch +- drop integrated 0001-gtk3-fix-cairo-canvas-crash-for-non-X-or-svp-backend.patch +- drop integrated 0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch +- drop integrated 0001-rhbz-667082-do-not-crash-importing-section-containin.patch +- drop integrated 0001-rhbz-702635-set-correct-page-number-when-exporting-s.patch +- drop integrated Backport-reading-AES-encrypted-ODF-1.2-documents.patch +- drop integrated gdb-pretty-printers.patch +- drop integrated kde4configure.patch +- drop integrated libreoffice-ppc64.patch +- drop integrated openoffice.org-3.3.0.ooo108637.sfx2.uisavedir.patch +- drop integrated openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch +- drop integrated vbahelper.visibility.patch +- drop libreoffice-testtools subpackage, because testtool has been + removed by upstream + +* Thu Dec 15 2011 Caolán McNamara - 3.4.4.2-6 +- Resolves: rhbz#761009 IFSD_Equal is asymmetrical +- Resolves: rhbz#767708 write to mmap'ed file w/o disk space: SIGBUS + +* Tue Nov 29 2011 Caolán McNamara - 3.4.4.2-5 +- Resolves: rhbz#757653 fix headless crash with cairo canvas + +* Tue Nov 22 2011 Lukas Tinkl - 3.4.4.2-4 +- Resolves: rhbz#751290 - [kde] LibreOffice has black on dark-grey tooltip-texts + +* Fri Nov 11 2011 Caolán McNamara - 3.4.4.2-3 +- Related: fdo#42534 0001-Related-i58612-don-t-crash-anyway.patch +- Resolves: fdo#42749 KDE oxygen theme and scrollbars + +* Thu Nov 10 2011 Stephan Bergmann - 3.4.4.2-2 +- Patch to backport reading AES-encrypted ODF 1.2 documents + +* Thu Nov 03 2011 David Tardon - 3.4.4.2-1 +- 3.4.4 rc2 + +* Fri Oct 28 2011 Rex Dieter - 1:3.4.4.1-4 +- rebuild(poppler) + +* Thu Oct 27 2011 Caolán McNamara - 3.4.4.1-3 +- Resolves: rhbz#665800 missing glyph symbol shown when toggling bold/italic + for Sinhala text + +* Thu Oct 27 2011 Caolán McNamara - 3.4.4.1-2 +- possible fix for java 1.7.0 detection + + +* Wed Oct 26 2011 David Tardon - 3.4.4.1-1 +- 3.4.4 rc1 + +* Tue Oct 25 2011 Caolán McNamara - 3.4.3.2-16 +- allow building with gcj + +* Fri Oct 21 2011 Caolán McNamara - 3.4.3.2-15 +- Resolves: rhbz#747356 let Qt call XInitThreads +- fix .sdw import + +* Wed Oct 19 2011 Caolán McNamara - 3.4.3.2-14 +- Related: rhbz#743750 addXineramaScreenUnique issue + +* Fri Oct 07 2011 Stephan Bergmann - 3.4.3.2-13 +- Patches to build with GCC 6.4.1 + +* Fri Sep 30 2011 Marek Kasik - 3.4.3.2-12 +- Rebuild (poppler-0.18.0) + +* Tue Sep 20 2011 Caolán McNamara - 3.4.3.2-11 +- Resolves: rhbz#738133 fix bn discard string +- Resolves: fdo#35513 avoid crash while processing incorrect print range + +* Mon Sep 19 2011 Marek Kasik - 3.4.3.2-10 +- Rebuild (poppler-0.17.3) + +* Thu Sep 15 2011 Caolán McNamara - 3.4.3.2-9 +- Resolves: rhbz#738255 avoid crash on sc inputhdl + +* Tue Sep 13 2011 Caolán McNamara - 3.4.3.2-8 +- Resolves: rhbz#274631 remove NoDisplay from -math.desktop + +* Thu Sep 08 2011 David Tardon - 3.4.3.2-7 +- rebuild for new icu + +* Tue Sep 06 2011 David Tardon - 3.4.3.2-6 +- Resolves: rhbz#734976 libreoffice-langpack-*-* not pulled in by + yum install libreoffice + +* Fri Sep 02 2011 Caolán McNamara - 3.4.3.2-5 +- Resolves: rhbz#735182 be able to rebuild against poppler 0.17.3 + +* Tue Aug 30 2011 David Tardon - 3.4.3.2-4 +- Resolves: rhbz#734432 openoffice.org symlink broken + +* Mon Aug 29 2011 David Tardon - 3.4.3.2-3 +- add Latvian langpack + +* Fri Aug 26 2011 Caolán McNamara - 3.4.3.2-2 +- Resolves: rhbz#733564 graphite2 now packaged into fedora +- Related: fdo#37195 migrationoo3 not registered + +* Thu Aug 25 2011 David Tardon - 3.4.3.2-1 +- 3.4.3 rc2 + +* Mon Aug 22 2011 David Tardon - 3.4.3.1-2 +- add gdb pretty printers + +* Tue Aug 16 2011 David Tardon - 3.4.3.1-1 +- 3.4.3 rc1 +- drop integrated 0001-Resolves-rhbz-725144-wrong-csh-syntax.patch + +* Fri Aug 12 2011 Caolán McNamara - 3.4.2.3-3 +- Related: rhbz#730225 avoid segv in ld + +* Tue Aug 02 2011 Caolán McNamara - 3.4.2.3-2 +- Resolves: rhbz#693265 fix crash from unhandled exception + +* Fri Jul 29 2011 David Tardon - 3.4.2.3-1 +- 3.4.2 rc3 + +* Mon Jul 25 2011 Caolán McNamara - 3.4.2.2-2 +- Resolves: rhbz#725144 wrong csh syntax + +* Wed Jul 20 2011 David Tardon - 3.4.2.2-1 +- 3.4.2 rc2 +- fix breakage in KDE4 plugin + +* Tue Jul 19 2011 Caolán McNamara - 3.4.2.1-3 +- Resolves: rhbz#715549 use fontconfig's detected format + +* Mon Jul 18 2011 Caolán McNamara - 3.4.2.1-2 +- Rebuild (poppler-0.17.0), add libreoffice-poppler-0.17.0.patch + seeing as the API changed for some reason or other + +* Wed Jul 13 2011 David Tardon - 3.4.2.1-1 +- 3.4.2 rc1 +- drop 0001-bad-merge-fix-to-enable-extensions-to-build-again.patch +- drop 0001-fix-regression-in-SvGlobalName-operator.patch + +* Tue Jul 12 2011 Caolán McNamara - 3.4.1.3-3 +- fix regression in SvGlobalName operator + +* Tue Jul 05 2011 Caolán McNamara - 3.4.1.3-2 +- Related: rhbz#718976 crash in SwTxtSizeInfo::GetMultiCreator + +* Fri Jul 01 2011 David Tardon - 3.4.1.3-1 +- 3.4.1 rc3 + +* Thu Jun 23 2011 Caolán McNamara - 3.4.1.2-1 +- 3.4.1 rc2 +- drop integrated 0001-correctly-build-GTK-systray-icon.patch + +* Tue Jun 21 2011 David Tardon - 3.4.1.1-5 +- Resolves: rhbz#714781 add Persian langpack +- Resolves: rhbz#667082 do not crash importing section containing just + an empty paragraph + +* Mon Jun 20 2011 Caolán McNamara - 3.4.1.1-4 +- Related: rhbz#711087 band aid for crash in sc undo +- Resolves: rhbz#714338 add a metapackage to install standard bits + +* Fri Jun 17 2011 Caolán McNamara - 3.4.1.1-3 +- Related: rhbz#702833 addEventListener without removeEventListener + +* Thu Jun 16 2011 Caolán McNamara - 3.4.1.1-2 +- Resolves: rhbz#713154 pdf export dialog too tall to fit + +* Wed Jun 15 2011 David Tardon - 3.4.1.1-1 +- 3.4.1 RC1 +- drop integrated 0001-Resolves-rhbz-707317-avoid-crash-in-getRowSpan.patch +- drop integrated 0001-Resolves-rhbz-710004-band-aid-for-immediate-crash-in.patch +- drop integrated 0001-Resolves-rhbz-710556-don-t-crash-on-missing-graphics.patch +- drop integrated 0001-Resolves-rhbz-699909-crash-in-export-of-.doc-in-lcl_.patch +- drop integrated 0001-fdo-37584-Make-a-real-copy-of-the-text-where-to-coun.patch +- drop integrated 0001-Resolves-fdo-37668-bitwise-operations-on-signed-numb.patch + +* Thu Jun 09 2011 Caolán McNamara - 3.4.0.2-5 +- Resolves: rhbz#699909 crash in export of .doc in lcl_getField +- Resolves: fdo#37584 Make a real copy of the text +- Resolves: rhbz#709503/fdo#37668 bitwise operations on signed values + +* Tue Jun 07 2011 Caolán McNamara - 3.4.0.2-4 +- Resolves: rhbz#710556 't crash on missing graphics .pptx export +- Resolves: rhbz#652604 better survive exceptions in autorecovery + +* Thu Jun 02 2011 Caolán McNamara - 3.4.0.2-3 +- Resolves: rhbz#710004 band aid for crash + +* Mon May 30 2011 Caolán McNamara - 3.4.0.2-2 +- Resolves: rhbz#707317 avoid crash in getRowSpan + +* Fri May 27 2011 David Tardon - 3.4.0.2-1 +- 3.4.0 RC2 +- drop integrated 0001-fix-build-with-system-bsh.patch + +* Wed May 25 2011 Caolán McNamara - 3.4.0.1-3 +- rebuild for new hunspell + +* Tue May 24 2011 David Tardon - 3.4.0.1-2 +- Resolves: rhbz#706110 oosplash.bin segfault on every login + +* Fri May 20 2011 David Tardon - 3.4.0.1-1 +- 3.4 RC1 +- Resolves: rhbz#702635 set correct page number when exporting selected + pages + +* Sat May 07 2011 Christopher Aillon - 3.3.99.4-2 +- Update icon cache scriptlet + +* Sat May 07 2011 David Tardon 3.3.99.4-1 +- 3.4 beta4 +- drop integrated 0001-Removed-duplicate-code-block-mis-merge-prolly.patch +- drop integrated 7de0b88ce2dd932915894385b54be1897d5ee053.zip + +* Mon Apr 18 2011 Caolán McNamara 3.3.99.1-2 +- Resolves: rhbz#695509 crash in RefreshDocumentLB +- bubble down configure test findings on visibility + +* Mon Apr 11 2011 Caolán McNamara 3.3.99.1-1 +- 3.4 beta1 +- drop openoffice.org-1.9.123.ooo53397.prelinkoptimize.desktop.patch + in favour of ooosplash +- drop openoffice.org-2.2.0.gccXXXXX.solenv.javaregistration.patch + because components are passively registered now +- drop integrated openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch +- drop integrated turn-script-providers-into-extensions.patch +- drop integrated 0001-tidy-this-up-and-don-t-bail-out-on-mislength-records.patch +- drop integrated 0001-free-ctxt-after-taking-lastError-details.patch +- drop integrated 0001-Removed-suspect-hack.-Cursor-on-post-it-now-scrolls-.patch +- drop integrated libreoffice-gcc4.6.0.patch +- drop integrated 0001-fexceptions-fexceptions.patch +- drop integrated 0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch +- drop vbahelper.visibility.patch +- drop integrated 0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch +- drop integrated 0001-Resolves-rhbz-670020-crash-in-slidesorting.patch +- drop integrated 0001-Resolves-rhbz-676539-handle-missing-pWindows-from-xW.patch +- drop integrated 0001-Resolves-fdo-33750-i94623-use-optimal-border-width-w.patch +- drop integrated 0001-rhbz-649310-don-t-crash-deregistering-diff.-platform.patch +- drop integrated 0001-Resolves-rhbz-674330-dereference-of-NULL-mpBase.patch +- drop integrated 0001-rhbz-678284-Get-correct-current-position-when-shift-page-up-and-.patch +- drop integrated 0001-Resolves-rhbz-681159-bandaid-for-crash.patch +- drop integrated 0001-Resolves-rhbz-672818-bandaid-for-crash-in-SwTxtNode-.patch +- drop integrated 0001-install-high-resolution-icons.patch +- drop integrated 0001-Resolves-rhbz-682716-pa-IN-isn-t-handled-by-fontconf.patch +- drop integrated 0001-Related-rhbz-684477-make-sure-this-is-thread-safe.patch +- drop integrated 0001-Resolves-rhbz-682621-better-resizing-of-overtall-gly.patch +- drop integrated 0001-Resolves-rhbz-684620-crash-with-NULL-pTableBox.patch +- drop integrated libreoffice-fdo33947.sd.print.crash.patch +- drop integrated 0001-add-cairo_ft_font_face_create_for_pattern-wrapper.patch +- drop integrated 0001-Related-rhbz-680460-reorganize-this-to-make-it-inher.patch +- drop integrated 0001-Related-rhbz-680460-don-t-bother-with-an-interim-Fon.patch +- drop integrated 0001-Resolves-rhbz-680460-honour-lcdfilter-subpixeling-et.patch +- drop integrated 0001-Cut-Gordian-Knot-of-who-owns-the-font-options.patch +- drop integrated 0001-beware-of-invalidated-iterator.patch +- drop integrated rhbz680766.fix-mdds-crash.patch +- drop integrated 0001-Resolves-rhbz-684580-X-and-strike-through-escapes-ra.patch +- drop integrated 0001-set-mime-types-on-flat-xml-filters.patch +- drop integrated 0001-add-flat-xml-types-to-.desktop-files-etc.patch +- drop integrated libreoffice-fdo31271.icu.patch + +* Tue Apr 05 2011 Caolán McNamara 3.3.2.2-6 +- Resolves: rhbz#655686 get order of shutdown correct + +* Wed Mar 30 2011 Caolán McNamara 3.3.2.2-5 +- Add application/vnd.oasis.opendocument.text-flat-xml, etc. to + .desktop files for mcepl + +* Tue Mar 29 2011 Caolán McNamara 3.3.2.2-4 +- Resolves: rhbz#684580 improve X and / strike-through + +* Thu Mar 24 2011 David Tardon 3.3.2.2-3 +- Resolves: rhbz#680766 crash in mdds + +* Wed Mar 23 2011 David Tardon 3.3.2.2-2 +- Related: rhbz#689268 versioned deps need to contain epoch + +* Tue Mar 22 2011 Caolán McNamara 3.3.2.2-1 +- latest version +- drop integrated 0001-Resolves-fdo-33701-ensure-node-outlives-path.patch +- drop integrated 0001-valgrind-don-t-leave-an-evil-thread-running-after-ma.patch + +* Tue Mar 22 2011 Caolán McNamara 3.3.1.2-12 +- Fix fontoptions cache +- avoid crash in calc on changing size of rows (dtardon) + +* Mon Mar 21 2011 Caolán McNamara 3.3.1.2-11 +- Resolves: rhbz#689268 autocorrs from OOo F14 not upgraded + +* Wed Mar 16 2011 Caolán McNamara 3.3.1.2-10 +- Resolves: rhbz#680460 honour lcdfilter and subpixeling + +* Tue Mar 15 2011 Caolán McNamara 3.3.1.2-9 +- Resolves: fdo#33947 sd print crash + +* Mon Mar 14 2011 Caolán McNamara 3.3.1.2-8 +- Related: rhbz#684477 make sure this is thread safe +- Resolves: rhbz#684620 crash with NULL pTableBox + +* Sun Mar 13 2011 Marek Kasik 3.3.1.2-7 +- Rebuild (poppler-0.16.3) + +* Wed Mar 09 2011 Caolán McNamara 3.3.1.2-6 +- Resolves: rhbz#682621 better resizing of overtall glyphsubs + +* Tue Mar 08 2011 Caolán McNamara 3.3.1.2-5 +- Resolves: rhbz#682716 pa-IN isn't handled well by fontconfig + +* Tue Mar 08 2011 David Tardon 3.3.1.2-4 +- install 128x128 px icons + +* Wed Mar 02 2011 Caolán McNamara 3.3.1.2-3 +- Resolves: rhbz#681159 crash in writer +- Resolves: rhbz#672818 crash in writer +- Resolves: fdo#33701 ensure node outlives path +- Resolves: rhbz#681738 crash on writing config post-main + +* Thu Feb 17 2011 Caolán McNamara 3.3.1.2-2 +- Resolves: rhbz#678284 Calc crashes during cell select with keys + (dtardon) + +* Thu Feb 17 2011 Caolán McNamara 3.3.1.2-1 +- RC2 + +* Wed Feb 16 2011 Caolán McNamara 3.3.1.1-2 +- Resolves: rhbz#674330 dereference of NULL mpBase + +* Fri Feb 11 2011 Caolán McNamara 3.3.1.1-1 +- 3.3.1 rc1 +- drop integrated 0001-don-t-pushback-and-process-a-corrupt-extension.patch +- drop integrated libreoffice-fdo32561.comphelper.patch +- drop integrated 0001-Related-rhbz-610103-more-woes-on-rpm-upgrade-vs-rpm-.patch +- drop integrated 0001-Resolves-rhbz-673819-crash-on-changing-position-of-d.patch +- drop integrated 0001-rhbz-666440-don-t-pushback-and-process-a-corrupt-extension.patch + +* Thu Feb 10 2011 Caolán McNamara 3.3.0.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild +- Related: rhbz#610103 make this even more robust +- Related: rhbz#672872 cancel gtk file dialog on terminate +- Resolves: fdo#33509/ooo#62414 fix CTL spelling popup +- Resolves: rhbz#673819 crash on changing position of header/footer object +- Resolves: rhbz#670020 crash in slidesorting +- Resolves: rhbz#676539 handle missing pWindows from xWindows +- Resolves: rhbz#649310 don't crash deregistering diff. platform ext. + (dtardon) +- Resolves: rhbz#666440 don't pushback and process a corrupt extension + +* Mon Jan 24 2011 Caolán McNamara 3.3.0.4-2 +- Resolves: rhbz#671540 fix lonely ) + +* Thu Jan 20 2011 Caolán McNamara 3.3.0.4-1 +- next release candidate +- drop integrated 0001-fix-presenter-screens-description.xml-build.patch + +* Tue Jan 18 2011 Caolán McNamara 3.3.0.3-2 +- backport fix to get presenter screen working +- make handling busted extensions more robust + +* Wed Jan 12 2011 Caolán McNamara 3.3.0.3-1 +- latest version +- drop integrated 0001-Resoves-rhbz-663857-font-color-missing-C-FAQ-10.3-do.patch +- drop integrated 0001-Avoid-double-paste-when-pasting-text-into-cell-comme.patch +- drop integrated 0001-Resolves-rhbz-660342-Undo-Redo-crash-with-postits.patch +- drop integrated 0001-Resolves-rhbz-666088-clean-up-search-cache-singleton.patch + +* Thu Jan 06 2011 Caolán McNamara 3.3.0.2-5 +- Resolves: rhbz#666088 don't crash on clean up of search cache + +* Wed Jan 05 2011 Lukas Tinkl 3.3.0.2-4 +- create a KDE integration subpackage + +* Mon Jan 03 2011 David Tardon 3.3.0.2-3 +- rebuild with new poppler + +* Wed Dec 22 2010 Caolán McNamara 3.3.0.2-2 +- Resolves: rhbz#663724 fdo32572-sc-dont-double-paste.patch +- Resolves: rhbz#660342 Undo/Redo crash with postits + +* Tue Dec 21 2010 Caolán McNamara 3.3.0.2-1 +- latest version + +* Sat Dec 18 2010 Caolán McNamara 3.3.0.1-4 +- Resolves: rhbz#663857 font color missing in transitions + +* Wed Dec 15 2010 Rex Dieter - 3.3.0.1-3 +- rebuild (poppler) + +* Wed Dec 15 2010 Caolán McNamara 3.3.0.1-2 +- Fix up some doc imports + +* Sun Dec 05 2010 Caolán McNamara 3.3.0.1-1 +- release candidate 1 +- drop integrated qstart.dont-forceenabled-on-post-reg-restart.patch +- drop integrated exit.quickstarter.when.deleted.patch +- drop integrated 0001-destroydesktop.in.timeout.patch +- drop integrated openoffice.org-3.3.0.rhbz657541.join-paragraphs.patch + +* Sat Nov 27 2010 Caolán McNamara 3.2.99.3-2 +- Resolves: rhbz#610103 exit quickstarter when libs deleted +- Resolves: rhbz#652695 release desktop in timeout +- Resolves: rhbz#657541 don't crash during processing of auto. styles + when joining paragraphs (dtardon) + +* Thu Nov 18 2010 Caolán McNamara 3.2.99.2-5 +- Resolves: rhbz#649210 add Sinhalese langpack + +* Sat Oct 30 2010 Caolán McNamara 3.2.99.2-4 +- langpack macro hard-coded version number + +* Fri Oct 22 2010 Caolán McNamara 3.2.99.2-3 +- Resolves: xdg632229 gnomeshell app tracking + +* Tue Oct 12 2010 David Tardon 3.2.99.2-2 +- use macros to define auto-correction and language pack subpackages + +* Mon Oct 11 2010 Caolán McNamara 3.2.99.2-1 +- next LibreOffice milestone +- drop integrated openoffice.org-2.3.0.ooo76649.httpencoding.patch +- drop integrated workspace.dtardon03.patch +- drop integrated openoffice.org-3.1.0.ooo61927.sw.ww6.unicodefontencoding.patch +- drop integrated workspace.impress195.patch +- drop integrated workspace.srb1.patch +- drop integrated openoffice.org-3.2.0.ooo106502.svx.fixspelltimer.patch +- drop integrated openoffice.org-3.3.0.ooo108246.svx.hide-sql-group-when-inactive.patch +- drop integrated openoffice.org-3.2.0.ooo95369.sw.sortedobjs.patch +- drop integrated openoffice.org-3.2.0.ooo110142.svx.safercolornames.patch +- drop integrated openoffice.org-3.3.0.ooo111758.sd.xerror.patch +- drop integrated openoffice.org-3.2.0.ooo111741.extras.malformed-xml-file.patch +- drop integrated openoffice.org-3.3.0.ooo112059.sw.avoid-null-ptr-deref.patch +- drop integrated openoffice.org-3.3.0.ooo100686.wizards.types.not.mediatypes.patch +- drop integrated workspace.vcl113.patch +- drop integrated openoffice.org-3.3.0.ooo112384.sw.export.doc.styledoesntexist.patch +- drop integrated workspace.cmcfixes77.patch +- drop integrated workspace.vcl114.patch +- drop integrated openoffice.org-3.3.0.ooo106591.sal.tradcopy.patch +- drop integrated workspace.vcl115.patch +- drop integrated workspace.cmcfixes78.patch +- drop integrated openoffice.org-3.3.0.ooo114012.sd.bada11ychain.patch +- drop integrated workspace.cmcfixes79.patch +- drop integrated openoffice.org-3.3.0.ooo114703.vcl.betterlocalize.font.patch +- drop integrated openoffice.org-3.3.0.rh638185.editeng.cjkctlhtmlsizes.patch +- drop integrated openoffice.org-3.3.0.rh637738.libgcrypt.addmutex.patch +- drop integrated openoffice.org-3.2.0.rh632236.writerfilter.cleanup-cell-props.patch +- drop workspace.gtk3.patch + +* Wed Oct 06 2010 Caolán McNamara 3.2.99.1-2 +- Related: rhbz#639945 pull in review changes + + redland build-fix + + replace awk script + + validate .destop files + +* Wed Sep 29 2010 Caolán McNamara 3.2.99.1-1 +- initial import of the leviathan