Compare commits

...

No commits in common. '24.8.3.2' and 'c9' have entirely different histories.
24.8.3.2 ... c9

11
.gitignore vendored

@ -1,7 +1,8 @@
SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll
SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
SOURCES/Java-WebSocket-1.5.6.tar.gz
SOURCES/libreoffice-help-24.8.3.2.tar.xz
SOURCES/dtoa-20180411.tgz SOURCES/dtoa-20180411.tgz
SOURCES/libreoffice-translations-24.8.3.2.tar.xz SOURCES/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
SOURCES/libreoffice-24.8.3.2.tar.xz SOURCES/libreoffice-7.1.8.1.tar.xz
SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip SOURCES/libreoffice-help-7.1.8.1.tar.xz
SOURCES/libreoffice-translations-7.1.8.1.tar.xz

@ -1,7 +1,8 @@
7168b0f40aa5c72267899601c116d2348d2f56ec SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
0619ed3a89644bef318df67db12045b2b590585b SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll
2d49e11b0b711970f494294dc3698f05eb294853 SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip 2d49e11b0b711970f494294dc3698f05eb294853 SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
ee561c270fa186bac51bb240d4ce2166f866795c SOURCES/Java-WebSocket-1.5.6.tar.gz
fe7c694c1156e412a3ecc2ef77ca670f56b6b470 SOURCES/libreoffice-help-24.8.3.2.tar.xz
083509db5ad9d1680830be9add727d58b54ca0d3 SOURCES/dtoa-20180411.tgz 083509db5ad9d1680830be9add727d58b54ca0d3 SOURCES/dtoa-20180411.tgz
c8766c085e21cc92c47d7ef2371b8a4d3dc2933d SOURCES/libreoffice-translations-24.8.3.2.tar.xz dd55efd721df8a013709e27836bdf26623e5320e SOURCES/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
d4a6c4a735210ddfd0b723e926a8b3352705662f SOURCES/libreoffice-24.8.3.2.tar.xz 58642377b80001f41884b2fff3d74fe66426b182 SOURCES/libreoffice-7.1.8.1.tar.xz
7168b0f40aa5c72267899601c116d2348d2f56ec SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip 48afe3a1a30861904bf31b387d6bc56360f5ac19 SOURCES/libreoffice-help-7.1.8.1.tar.xz
cb1238f7b182c8bfb16086d2eb9305b43b8a6d16 SOURCES/libreoffice-translations-7.1.8.1.tar.xz

@ -0,0 +1,69 @@
From 26c9da40d44f1469df97398362667c74553be7d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 20 Dec 2021 17:05:44 +0000
Subject: [PATCH] only use X509Data
Change-Id: I52e6588f5fac04bb26d77c1f3af470db73e41f72
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127193
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit be446d81e07b5499152efeca6ca23034e51ea5ff)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127178
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
(cherry picked from commit b0404f80577de9ff69e58390c6f6ef949fdb0139)
---
.../source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx | 6 ++++++
xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx
index c699c950f351..9f816479f9dd 100644
--- a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx
+++ b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx
@@ -22,6 +22,8 @@
#include <rtl/uuid.h>
#include <xmlsec-wrapper.h>
+#include <xmlsec/mscng/x509.h>
+
#include <com/sun/star/xml/crypto/SecurityOperationStatus.hpp>
#include <com/sun/star/xml/crypto/XXMLSignature.hpp>
@@ -233,6 +235,10 @@ SAL_CALL XMLSignature_MSCryptImpl::validate(
// We do certificate verification ourselves.
pDsigCtx->keyInfoReadCtx.flags |= XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS;
+ // limit possible key data to valid X509 certificates only, no KeyValues
+ if (xmlSecPtrListAdd(&(pDsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecMSCngKeyDataX509GetKlass()) < 0)
+ throw RuntimeException("failed to limit allowed key data");
+
//Verify signature
//The documentation says that the signature is only valid if the return value is 0 (that is, not < 0)
//AND pDsigCtx->status == xmlSecDSigStatusSucceeded. That is, we must not make any assumptions, if
diff --git a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
index b41d754f7407..975c17272dc7 100644
--- a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
+++ b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
@@ -20,6 +20,8 @@
#include <sal/config.h>
#include <xmlsec-wrapper.h>
+#include <xmlsec/nss/x509.h>
+
#include <xmlelementwrapper_xmlsecimpl.hxx>
#include <xmlsec/xmlstreamio.hxx>
#include <xmlsec/errorcallback.hxx>
@@ -247,6 +249,10 @@ SAL_CALL XMLSignature_NssImpl::validate(
// We do certificate verification ourselves.
pDsigCtx->keyInfoReadCtx.flags |= XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS;
+ // limit possible key data to valid X509 certificates only, no KeyValues
+ if (xmlSecPtrListAdd(&(pDsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecNssKeyDataX509GetKlass()) < 0)
+ throw RuntimeException("failed to limit allowed key data");
+
//Verify signature
int rs = xmlSecDSigCtxVerify( pDsigCtx.get() , pNode );
--
2.35.1

@ -0,0 +1,63 @@
From 77f30ada1156ca1e1357776fea8e9dc113f6898d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Thu, 3 Mar 2022 14:22:37 +0000
Subject: [PATCH 1/5] CVE-2022-26305 compare authors using Thumbprint
Change-Id: I338f58eb07cbf0a3d13a7dafdaddac09252a8546
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130929
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit 65442205b5b274ad309308162f150f8d41648f72)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130866
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit a7aaa78acea4c1d51283c2fce54ff9f5339026f8)
---
.../component/documentdigitalsignatures.cxx | 23 +++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx b/xmlsecurity/source/component/documentdigitalsignatures.cxx
index b9066ea92cac..5a21c8421bec 100644
--- a/xmlsecurity/source/component/documentdigitalsignatures.cxx
+++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx
@@ -19,9 +19,10 @@
#include <resourcemanager.hxx>
-#include <digitalsignaturesdialog.hxx>
+#include <certificate.hxx>
#include <certificatechooser.hxx>
#include <certificateviewer.hxx>
+#include <digitalsignaturesdialog.hxx>
#include <macrosecurity.hxx>
#include <biginteger.hxx>
#include <strings.hrc>
@@ -666,9 +667,23 @@ sal_Bool DocumentDigitalSignatures::isAuthorTrusted(
Sequence< SvtSecurityOptions::Certificate > aTrustedAuthors = SvtSecurityOptions().GetTrustedAuthors();
return std::any_of(aTrustedAuthors.begin(), aTrustedAuthors.end(),
- [&xAuthor, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) {
- return xmlsecurity::EqualDistinguishedNames(rAuthor[0], xAuthor->getIssuerName())
- && ( rAuthor[1] == sSerialNum );
+ [this, &xAuthor, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) {
+ if (!xmlsecurity::EqualDistinguishedNames(rAuthor[0], xAuthor->getIssuerName()))
+ return false;
+ if (rAuthor[1] != sSerialNum)
+ return false;
+
+ DocumentSignatureManager aSignatureManager(mxCtx, {});
+ if (!aSignatureManager.init())
+ return false;
+ uno::Reference<css::security::XCertificate> xCert = aSignatureManager.getSecurityEnvironment()->createCertificateFromAscii(rAuthor[2]);
+
+ auto pAuthor = dynamic_cast<xmlsecurity::Certificate*>(xAuthor.get());
+ auto pCert = dynamic_cast<xmlsecurity::Certificate*>(xCert.get());
+ if (pAuthor && pCert)
+ return pCert->getSHA256Thumbprint() == pAuthor->getSHA256Thumbprint();
+
+ return xCert->getSHA1Thumbprint() == xAuthor->getSHA1Thumbprint();
});
}
--
2.37.3

@ -0,0 +1,93 @@
From dbf825c25195e29a00228f31112c5aaa2102f692 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann <sbergman@redhat.com>
Date: Mon, 21 Feb 2022 11:55:21 +0100
Subject: [PATCH] Avoid unnecessary empty -Djava.class.path=
Change-Id: Idcfe7321077b60381c0273910b1faeb444ef1fd8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130242
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
---
.../plugins/sunmajor/pluginlib/sunjavaplugin.cxx | 16 +++++++++++++---
jvmfwk/source/framework.cxx | 8 ++++++--
jvmfwk/source/fwkbase.cxx | 3 +++
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index f47b0a3..843f6d1 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -713,17 +713,22 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
// all versions below 1.5.1
options.emplace_back("abort", reinterpret_cast<void*>(abort_handler));
bool hasStackSize = false;
+#ifdef UNX
+ // Until java 1.5 we need to put a plugin.jar or javaplugin.jar (<1.4.2)
+ // in the class path in order to have applet support:
+ OString sAddPath = getPluginJarPath(pInfo->sVendor, pInfo->sLocation,pInfo->sVersion);
+#endif
for (int i = 0; i < cOptions; i++)
{
OString opt(arOptions[i].optionString);
#ifdef UNX
- // Until java 1.5 we need to put a plugin.jar or javaplugin.jar (<1.4.2)
- // in the class path in order to have applet support:
if (opt.startsWith("-Djava.class.path="))
{
- OString sAddPath = getPluginJarPath(pInfo->sVendor, pInfo->sLocation,pInfo->sVersion);
if (!sAddPath.isEmpty())
+ {
opt += OStringChar(SAL_PATHSEPARATOR) + sAddPath;
+ sAddPath.clear();
+ }
}
#endif
if (opt == "-Xint") {
@@ -768,6 +773,11 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
}
#endif
}
+#ifdef UNX
+ if (!sAddPath.isEmpty()) {
+ options.emplace_back("-Djava.class.path=" + sAddPath, nullptr);
+ }
+#endif
std::unique_ptr<JavaVMOption[]> sarOptions(new JavaVMOption[options.size()]);
for (std::vector<Option>::size_type i = 0; i != options.size(); ++i) {
diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx
index 5a7cef4..478b42b 100644
--- a/jvmfwk/source/framework.cxx
+++ b/jvmfwk/source/framework.cxx
@@ -189,8 +189,12 @@ javaFrameworkError jfw_startVM(
//In direct mode the options are specified by bootstrap variables
//of the form UNO_JAVA_JFW_PARAMETER_1 .. UNO_JAVA_JFW_PARAMETER_n
vmParams = jfw::BootParams::getVMParameters();
- sUserClassPath =
- "-Djava.class.path=" + jfw::BootParams::getClasspath();
+ auto const cp = jfw::BootParams::getClasspath();
+ if (!cp.isEmpty())
+ {
+ sUserClassPath =
+ "-Djava.class.path=" + cp;
+ }
}
else
OSL_ASSERT(false);
diff --git a/jvmfwk/source/fwkbase.cxx b/jvmfwk/source/fwkbase.cxx
index df84d7c..de1acdb 100644
--- a/jvmfwk/source/fwkbase.cxx
+++ b/jvmfwk/source/fwkbase.cxx
@@ -458,6 +458,9 @@ OString makeClassPathOption(OUString const & sUserClassPath)
sPaths = OUStringToOString(
sBufCP.makeStringAndClear(), osl_getThreadTextEncoding());
+ if (sPaths.isEmpty()) {
+ return "";
+ }
OString sOptionClassPath = "-Djava.class.path=" + sPaths;
return sOptionClassPath;
--
2.39.2

@ -0,0 +1,69 @@
From 6167f5815aefa78a70517c8e2acbdd7b9c9be27d Mon Sep 17 00:00:00 2001
Message-ID: <6167f5815aefa78a70517c8e2acbdd7b9c9be27d.1703003067.git.erack@redhat.com>
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolan.mcnamara@collabora.com>
Date: Fri, 3 Nov 2023 14:20:07 +0000
Subject: [PATCH] escape url passed to gstreamer
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: I3c93ee34800cc8563370f75ef3ef6f8a9220e6ec
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158894
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit f41dcadf6492a6ffd32696d50f818e44355b9ad9)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159583
erAck: backported to 7.1.8.1
---
avmedia/source/gstreamer/gstframegrabber.cxx | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
--------------erAck-patch-parts
Content-Type: text/x-patch; name="0001-escape-url-passed-to-gstreamer.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-escape-url-passed-to-gstreamer.patch"
diff --git a/avmedia/source/gstreamer/gstframegrabber.cxx b/avmedia/source/gstreamer/gstframegrabber.cxx
index ece799d87530..25170a296e66 100644
--- a/avmedia/source/gstreamer/gstframegrabber.cxx
+++ b/avmedia/source/gstreamer/gstframegrabber.cxx
@@ -51,11 +51,9 @@ void FrameGrabber::disposePipeline()
FrameGrabber::FrameGrabber( const OUString &rURL ) :
FrameGrabber_BASE()
{
- gchar *pPipelineStr;
- pPipelineStr = g_strdup_printf(
- "uridecodebin uri=%s ! videoconvert ! videoscale ! appsink "
- "name=sink caps=\"video/x-raw,format=RGB,pixel-aspect-ratio=1/1\"",
- OUStringToOString( rURL, RTL_TEXTENCODING_UTF8 ).getStr() );
+ const char pPipelineStr[] =
+ "uridecodebin name=source ! videoconvert ! videoscale ! appsink "
+ "name=sink caps=\"video/x-raw,format=RGB,pixel-aspect-ratio=1/1\"";
GError *pError = nullptr;
mpPipeline = gst_parse_launch( pPipelineStr, &pError );
@@ -66,6 +64,12 @@ FrameGrabber::FrameGrabber( const OUString &rURL ) :
}
if( mpPipeline ) {
+
+ if (GstElement *pUriDecode = gst_bin_get_by_name(GST_BIN(mpPipeline), "source"))
+ g_object_set(pUriDecode, "uri", OUStringToOString(rURL, RTL_TEXTENCODING_UTF8).getStr(), nullptr);
+ else
+ g_warning("Missing 'source' element in gstreamer pipeline");
+
// pre-roll
switch( gst_element_set_state( mpPipeline, GST_STATE_PAUSED ) ) {
case GST_STATE_CHANGE_FAILURE:
--------------erAck-patch-parts--

@ -0,0 +1,93 @@
From 37d73a1ab94b43e03866d5a910cb58331543b8c3 Mon Sep 17 00:00:00 2001
Message-ID: <37d73a1ab94b43e03866d5a910cb58331543b8c3.1703086247.git.erack@redhat.com>
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolan.mcnamara@collabora.com>
Date: Fri, 3 Nov 2023 17:14:26 +0000
Subject: [PATCH] add some protocols that don't make sense as floating frame
targets
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: Id900a5eef248731d1184c1df501a2cf7a2de7eb9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158910
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 11ebdfef16501c6d35c3e3d0d62507f706557c71)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158900
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit bab433911bdecb344f7ea94dbd00690241a08c54)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159582
erAck: backported to 7.1.8.1
---
include/tools/urlobj.hxx | 5 +++++
sfx2/source/doc/iframe.cxx | 5 ++++-
tools/source/fsys/urlobj.cxx | 8 ++++++++
3 files changed, 17 insertions(+), 1 deletion(-)
--------------erAck-patch-parts
Content-Type: text/x-patch; name="0001-add-some-protocols-that-don-t-make-sense-as-floating.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-add-some-protocols-that-don-t-make-sense-as-floating.patch"
diff --git a/include/tools/urlobj.hxx b/include/tools/urlobj.hxx
index 9d6820ddf241..dfd658722826 100644
--- a/include/tools/urlobj.hxx
+++ b/include/tools/urlobj.hxx
@@ -915,6 +915,11 @@ public:
void changeScheme(INetProtocol eTargetScheme);
+ // INetProtocol::Macro, INetProtocol::Uno, INetProtocol::Slot,
+ // vnd.sun.star.script, etc. All the types of URLs which shouldn't
+ // be accepted from an outside controlled source
+ bool IsExoticProtocol() const;
+
private:
// General Structure:
diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx
index 150218b436e9..b81ce82fd32e 100644
--- a/sfx2/source/doc/iframe.cxx
+++ b/sfx2/source/doc/iframe.cxx
@@ -168,8 +168,11 @@ sal_Bool SAL_CALL IFrameObject::load(
xTrans->parseStrict( aTargetURL );
INetURLObject aURLObject(aTargetURL.Complete);
- if (aURLObject.GetProtocol() == INetProtocol::Macro || aURLObject.isSchemeEqualTo(u"vnd.sun.star.script"))
+ if (aURLObject.IsExoticProtocol())
+ {
+ //SAL_WARN("sfx", "IFrameObject::load ignoring: " << aTargetURL.Complete);
return false;
+ }
uno::Reference<frame::XFramesSupplier> xParentFrame = xFrame->getCreator();
SfxObjectShell* pDoc = SfxMacroLoader::GetObjectShell(xParentFrame);
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx
index 764bb28ef623..2a9f7bc3d7dc 100644
--- a/tools/source/fsys/urlobj.cxx
+++ b/tools/source/fsys/urlobj.cxx
@@ -4829,4 +4829,12 @@ OUString INetURLObject::CutExtension()
? aTheExtension : OUString();
}
+bool INetURLObject::IsExoticProtocol() const
+{
+ return m_eScheme == INetProtocol::Slot ||
+ m_eScheme == INetProtocol::Macro ||
+ m_eScheme == INetProtocol::Uno ||
+ isSchemeEqualTo(u"vnd.sun.star.script");
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
--------------erAck-patch-parts--

@ -0,0 +1,29 @@
From 6582f7956313e16ea7df5b7cc961d368c150de0a Mon Sep 17 00:00:00 2001
From: Caolán McNamara <caolan.mcnamara@collabora.com>
Date: Wed, 27 Mar 2024 17:07:20 +0000
Subject: [PATCH] add notify for script use
Change-Id: I84af197cec7755f6803a578e1e21c03966ad5f3e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165410
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit a4a5c6b63599bca1f084bb90875f6fd8e15184ac)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167419
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
---
diff --git a/xmloff/source/draw/eventimp.cxx b/xmloff/source/draw/eventimp.cxx
index 226caca..bcf67c4 100644
--- a/xmloff/source/draw/eventimp.cxx
+++ b/xmloff/source/draw/eventimp.cxx
@@ -212,6 +212,9 @@
if( maData.mbValid )
maData.mbValid = !sEventName.isEmpty();
+
+ if (!maData.msMacroName.isEmpty())
+ rImp.NotifyMacroEventRead();
}
css::uno::Reference< css::xml::sax::XFastContextHandler > SdXMLEventContext::createFastChildContext(

@ -0,0 +1,79 @@
From 1dec4285bd4c59c23a6a9a56cee9a66ebe0ba6c3 Mon Sep 17 00:00:00 2001
Message-ID: <1dec4285bd4c59c23a6a9a56cee9a66ebe0ba6c3.1723721182.git.erack@redhat.com>
From: Sarper Akdemir <sarper.akdemir@allotropia.de>
Date: Tue, 11 Jun 2024 12:39:36 +0200
Subject: [PATCH] remove ability to trust not validated macro signatures in
high security
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
Giving the user the option to determine if they should trust an
invalid signature in HIGH macro security doesn't make sense.
CommonName of the signature is the most prominent feature presented
and the CommonName of a certificate can be easily forged for an
invalid signature, tricking the user into accepting an invalid
signature.
in the HIGH macro security setting only show the pop-up to
enable/disable signed macro if the certificate signature can be
validated.
cherry-picked without UI/String altering bits for 24-2
Change-Id: Ia766fb701660160ee5dc9f6e077f4012a44ce721
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168667
Tested-by: Jenkins
Reviewed-by: Sarper Akdemir <sarper.akdemir@allotropia.de>
(cherry picked from commit 2beaa3be3829303e948d401f492dbfd239d60aad)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169525
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171306
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171314
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171315
---
sfx2/source/doc/docmacromode.cxx | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
--------------erAck-patch-parts
Content-Type: text/x-patch; name="0001-remove-ability-to-trust-not-validated-macro-signatur.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-remove-ability-to-trust-not-validated-macro-signatur.patch"
diff --git a/sfx2/source/doc/docmacromode.cxx b/sfx2/source/doc/docmacromode.cxx
index 919033cbaf5d..33d546f2920a 100644
--- a/sfx2/source/doc/docmacromode.cxx
+++ b/sfx2/source/doc/docmacromode.cxx
@@ -228,14 +228,18 @@ namespace sfx2
// check whether the document is signed with trusted certificate
if ( nMacroExecutionMode != MacroExecMode::FROM_LIST )
{
+ SignatureState nSignatureState = m_xData->m_rDocumentAccess.getScriptingSignatureState();
+
// the trusted macro check will also retrieve the signature state ( small optimization )
const SvtSecurityOptions aSecOption;
const bool bAllowUIToAddAuthor = nMacroExecutionMode != MacroExecMode::FROM_LIST_AND_SIGNED_NO_WARN
&& (nMacroExecutionMode == MacroExecMode::ALWAYS_EXECUTE
- || !aSecOption.IsReadOnly(SvtSecurityOptions::EOption::MacroTrustedAuthors));
+ || !aSecOption.IsReadOnly(SvtSecurityOptions::EOption::MacroTrustedAuthors))
+ && (nMacroExecutionMode != MacroExecMode::FROM_LIST_AND_SIGNED_WARN
+ || nSignatureState == SignatureState::OK);
+
const bool bHasTrustedMacroSignature = m_xData->m_rDocumentAccess.hasTrustedScriptingSignature(bAllowUIToAddAuthor);
- SignatureState nSignatureState = m_xData->m_rDocumentAccess.getScriptingSignatureState();
if ( nSignatureState == SignatureState::BROKEN )
{
if (!bAllowUIToAddAuthor)
--------------erAck-patch-parts--

@ -0,0 +1,364 @@
From fee5967ab6ce7226f9baed984d7b1c49173a0c59 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann <sbergman@redhat.com>
Date: Thu, 24 Feb 2022 14:31:23 +0100
Subject: [PATCH] Don't use Library_tl in URE libraries
This partly reverts 8b5e23eac31cafbd442a3acab5fbcf98bfd0af11 "log nice exception
messages whereever possible", e1eb7cb04a4c30cec238ab0f54d41a6cdc3299c1
"loplugin:logexceptionnicely in starmath..svgio",
d6d80c4e1783b4459bd4a8fbcbdfeebe416c1cb5 "OSL_FAIL.*exception ->
TOOLS_WARN_EXCEPTION", and 877f40ac3f2add2b6dc37bae280d4d98dd102286 "tdf#42949
Fix new IWYU warnings in directories [h-r]*", and adapts
loplugin:logexceptionnicely accordingly.
Change-Id: I792b853b988c7c5f77179ca0672c30cb4223b5a6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130502
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Cherry-picked from 9c431f4d3afed0aad21b5ba67a5a55328c4d0685
Conflicts:
stoc/source/javavm/javavm.cxx
---
compilerplugins/clang/logexceptionnicely.cxx | 6 +++++
io/Library_io.mk | 1 -
io/source/stm/opump.cxx | 24 ++++++++++---------
javaunohelper/Library_juhx.mk | 1 -
javaunohelper/source/bootstrap.cxx | 7 ++----
stoc/Library_bootstrap.mk | 1 -
stoc/Library_javaloader.mk | 1 -
stoc/Library_javavm.mk | 1 -
stoc/source/javaloader/javaloader.cxx | 7 +++---
stoc/source/javavm/javavm.cxx | 17 +++++++------
stoc/source/servicemanager/servicemanager.cxx | 13 +++++-----
11 files changed, 39 insertions(+), 40 deletions(-)
diff --git a/compilerplugins/clang/logexceptionnicely.cxx b/compilerplugins/clang/logexceptionnicely.cxx
index a262d276b88c..fb5b1f86ed59 100644
--- a/compilerplugins/clang/logexceptionnicely.cxx
+++ b/compilerplugins/clang/logexceptionnicely.cxx
@@ -46,6 +46,12 @@ public:
return false;
if (loplugin::hasPathnamePrefix(fn, SRCDIR "/comphelper/"))
return false;
+ if (loplugin::hasPathnamePrefix(fn, SRCDIR "/io/"))
+ return false;
+ if (loplugin::hasPathnamePrefix(fn, SRCDIR "/javaunohelper/"))
+ return false;
+ if (loplugin::hasPathnamePrefix(fn, SRCDIR "/stoc/"))
+ return false;
// can't do that here, don't have an Any
if (loplugin::hasPathnamePrefix(fn, SRCDIR
"/connectivity/source/drivers/hsqldb/HStorageMap.cxx"))
diff --git a/io/Library_io.mk b/io/Library_io.mk
index b961b437cd46..fc61f3366e1b 100644
--- a/io/Library_io.mk
+++ b/io/Library_io.mk
@@ -17,7 +17,6 @@ $(eval $(call gb_Library_use_libraries,io,\
cppu \
cppuhelper \
sal \
- tl \
))
$(eval $(call gb_Library_set_componentfile,io,io/source/io))
diff --git a/io/source/stm/opump.cxx b/io/source/stm/opump.cxx
index 7ba8752d8dfb..d120dd37f8ed 100644
--- a/io/source/stm/opump.cxx
+++ b/io/source/stm/opump.cxx
@@ -18,6 +18,8 @@
*/
+#include <sal/log.hxx>
+
#include <com/sun/star/io/IOException.hpp>
#include <com/sun/star/io/NotConnectedException.hpp>
#include <com/sun/star/io/XActiveDataSource.hpp>
@@ -32,7 +34,7 @@
#include <cppuhelper/supportsservice.hxx>
#include <osl/mutex.hxx>
#include <osl/thread.h>
-#include <tools/diagnose_ex.h>
+
using namespace osl;
using namespace std;
@@ -124,9 +126,9 @@ void Pump::fireError( const Any & exception )
{
static_cast< XStreamListener * > ( iter.next() )->error( exception );
}
- catch ( const RuntimeException & )
+ catch ( const RuntimeException &e )
{
- TOOLS_WARN_EXCEPTION("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners");
+ SAL_WARN("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners" << e);
}
}
}
@@ -153,9 +155,9 @@ void Pump::fireClose()
{
static_cast< XStreamListener * > ( iter.next() )->closed( );
}
- catch ( const RuntimeException & )
+ catch ( const RuntimeException &e )
{
- TOOLS_WARN_EXCEPTION("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners");
+ SAL_WARN("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners" << e);
}
}
}
@@ -169,9 +171,9 @@ void Pump::fireStarted()
{
static_cast< XStreamListener * > ( iter.next() )->started( );
}
- catch ( const RuntimeException & )
+ catch ( const RuntimeException &e )
{
- TOOLS_WARN_EXCEPTION("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners");
+ SAL_WARN("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners" << e);
}
}
}
@@ -185,9 +187,9 @@ void Pump::fireTerminated()
{
static_cast< XStreamListener * > ( iter.next() )->terminated();
}
- catch ( const RuntimeException & )
+ catch ( const RuntimeException &e )
{
- TOOLS_WARN_EXCEPTION("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners");
+ SAL_WARN("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners" << e);
}
}
}
@@ -285,11 +287,11 @@ void Pump::run()
close();
fireClose();
}
- catch ( const css::uno::Exception & )
+ catch ( const css::uno::Exception &e )
{
// we are the last on the stack.
// this is to avoid crashing the program, when e.g. a bridge crashes
- TOOLS_WARN_EXCEPTION("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners");
+ SAL_WARN("io.streams","com.sun.star.comp.stoc.Pump: unexpected exception during calling listeners" << e);
}
}
diff --git a/javaunohelper/Library_juhx.mk b/javaunohelper/Library_juhx.mk
index 6eacff250c0f..1a24e5ef54f2 100644
--- a/javaunohelper/Library_juhx.mk
+++ b/javaunohelper/Library_juhx.mk
@@ -19,7 +19,6 @@ $(eval $(call gb_Library_use_libraries,juhx,\
jvmaccess \
sal \
salhelper \
- tl \
))
$(eval $(call gb_Library_add_exception_objects,juhx,\
diff --git a/javaunohelper/source/bootstrap.cxx b/javaunohelper/source/bootstrap.cxx
index e7bf63b841de..6ad39d467444 100644
--- a/javaunohelper/source/bootstrap.cxx
+++ b/javaunohelper/source/bootstrap.cxx
@@ -36,7 +36,6 @@
#include <jni.h>
#include <jvmaccess/unovirtualmachine.hxx>
-#include <tools/diagnose_ex.h>
#include "juhx-export-functions.hxx"
#include "vm.hxx"
@@ -148,11 +147,10 @@ jobject Java_com_sun_star_comp_helper_Bootstrap_cppuhelper_1bootstrap(
}
catch (const RuntimeException & exc)
{
- css::uno::Any exAny( cppu::getCaughtException() );
jclass c = jni_env->FindClass( "com/sun/star/uno/RuntimeException" );
if (nullptr != c)
{
- SAL_WARN("javaunohelper", "forwarding RuntimeException: " << exceptionToString(exAny) );
+ SAL_WARN("javaunohelper", "forwarding RuntimeException: " << exc );
OString cstr( OUStringToOString(
exc.Message, RTL_TEXTENCODING_JAVA_UTF8 ) );
jni_env->ThrowNew( c, cstr.getStr() );
@@ -160,11 +158,10 @@ jobject Java_com_sun_star_comp_helper_Bootstrap_cppuhelper_1bootstrap(
}
catch (const Exception & exc)
{
- css::uno::Any ex( cppu::getCaughtException() );
jclass c = jni_env->FindClass( "com/sun/star/uno/Exception" );
if (nullptr != c)
{
- SAL_WARN("javaunohelper", "forwarding Exception: " << exceptionToString(ex) );
+ SAL_WARN("javaunohelper", "forwarding Exception: " << exc );
OString cstr( OUStringToOString(
exc.Message, RTL_TEXTENCODING_JAVA_UTF8 ) );
jni_env->ThrowNew( c, cstr.getStr() );
diff --git a/stoc/Library_bootstrap.mk b/stoc/Library_bootstrap.mk
index 49fbafc12a09..3cc57e868d29 100644
--- a/stoc/Library_bootstrap.mk
+++ b/stoc/Library_bootstrap.mk
@@ -32,7 +32,6 @@ $(eval $(call gb_Library_use_libraries,bootstrap,\
reg \
sal \
salhelper \
- tl \
))
$(eval $(call gb_Library_set_componentfile,bootstrap,stoc/util/bootstrap))
diff --git a/stoc/Library_javaloader.mk b/stoc/Library_javaloader.mk
index caf4a1e27df6..f0b11fb4a9dc 100644
--- a/stoc/Library_javaloader.mk
+++ b/stoc/Library_javaloader.mk
@@ -19,7 +19,6 @@ $(eval $(call gb_Library_use_libraries,javaloader,\
jvmaccess \
sal \
salhelper \
- tl \
))
$(eval $(call gb_Library_set_componentfile,javaloader,stoc/source/javaloader/javaloader))
diff --git a/stoc/Library_javavm.mk b/stoc/Library_javavm.mk
index ce5f773ef394..84e29e8556e0 100644
--- a/stoc/Library_javavm.mk
+++ b/stoc/Library_javavm.mk
@@ -21,7 +21,6 @@ $(eval $(call gb_Library_use_libraries,javavm,\
jvmfwk \
sal \
salhelper \
- tl \
))
$(eval $(call gb_Library_set_componentfile,javavm,stoc/source/javavm/javavm))
diff --git a/stoc/source/javaloader/javaloader.cxx b/stoc/source/javaloader/javaloader.cxx
index 73b0ddf557ff..036ea71af93a 100644
--- a/stoc/source/javaloader/javaloader.cxx
+++ b/stoc/source/javaloader/javaloader.cxx
@@ -26,7 +26,6 @@
#include <com/sun/star/uno/RuntimeException.hpp>
#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
#include <cppuhelper/exc_hlp.hxx>
-#include <tools/diagnose_ex.h>
#ifdef LINUX
#undef minor
@@ -328,8 +327,10 @@ stoc_JavaComponentLoader_get_implementation(
try {
return cppu::acquire(new JavaComponentLoader(context));
}
- catch(const RuntimeException &) {
- TOOLS_INFO_EXCEPTION("stoc", "could not init javaloader");
+ catch(const RuntimeException & runtimeException) {
+ SAL_INFO(
+ "stoc",
+ "could not init javaloader due to " << runtimeException);
throw;
}
}
diff --git a/stoc/source/javavm/javavm.cxx b/stoc/source/javavm/javavm.cxx
index 8600a23eb759..8d95f71a68a3 100644
--- a/stoc/source/javavm/javavm.cxx
+++ b/stoc/source/javavm/javavm.cxx
@@ -61,7 +61,6 @@
#include <rtl/ustring.hxx>
#include <sal/types.h>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
#include <uno/current_context.hxx>
#include <jvmfwk/framework.hxx>
#include <i18nlangtag/languagetag.hxx>
@@ -423,23 +422,23 @@ void initVMConfiguration(
try {
getINetPropsFromConfig(&jvm, xSMgr, xCtx);
}
- catch(const css::uno::Exception &) {
- TOOLS_INFO_EXCEPTION("stoc", "can not get INETProps");
+ catch(const css::uno::Exception & exception) {
+ SAL_INFO("stoc", "can not get INETProps because of " << exception);
}
try {
getDefaultLocaleFromConfig(&jvm, xSMgr,xCtx);
}
- catch(const css::uno::Exception &) {
- TOOLS_INFO_EXCEPTION("stoc", "can not get locale");
+ catch(const css::uno::Exception & exception) {
+ SAL_INFO("stoc", "can not get locale because of " << exception);
}
try
{
getJavaPropsFromSafetySettings(&jvm, xSMgr, xCtx);
}
- catch(const css::uno::Exception &) {
- TOOLS_INFO_EXCEPTION("stoc", "couldn't get safety settings");
+ catch(const css::uno::Exception & exception) {
+ SAL_INFO("stoc", "couldn't get safety settings because of " << exception);
}
*pjvm= jvm;
@@ -1213,9 +1212,9 @@ void JavaVirtualMachine::registerConfigChangesListener()
if (m_xJavaConfiguration.is())
m_xJavaConfiguration->addContainerListener(this);
}
- }catch(const css::uno::Exception &)
+ }catch(const css::uno::Exception & e)
{
- TOOLS_INFO_EXCEPTION("stoc", "could not set up listener for Configuration");
+ SAL_INFO("stoc", "could not set up listener for Configuration because of >" << e << "<");
}
}
diff --git a/stoc/source/servicemanager/servicemanager.cxx b/stoc/source/servicemanager/servicemanager.cxx
index ba728ba1fa88..1a53ecf97f63 100644
--- a/stoc/source/servicemanager/servicemanager.cxx
+++ b/stoc/source/servicemanager/servicemanager.cxx
@@ -24,7 +24,6 @@
#include <osl/diagnose.h>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
#include <cppuhelper/factory.hxx>
#include <cppuhelper/weakref.hxx>
@@ -611,9 +610,9 @@ void OServiceManager::disposing()
if( xComp.is() )
xComp->dispose();
}
- catch (const RuntimeException &)
+ catch (const RuntimeException & exc)
{
- TOOLS_INFO_EXCEPTION("stoc", "RuntimeException occurred upon disposing factory:");
+ SAL_INFO("stoc", "RuntimeException occurred upon disposing factory: " << exc);
}
}
@@ -797,9 +796,9 @@ Reference< XInterface > OServiceManager::createInstanceWithContext(
}
}
}
- catch (const lang::DisposedException &)
+ catch (const lang::DisposedException & exc)
{
- TOOLS_INFO_EXCEPTION("stoc", "");
+ SAL_INFO("stoc", "DisposedException occurred: " << exc);
}
}
@@ -849,9 +848,9 @@ Reference< XInterface > OServiceManager::createInstanceWithArgumentsAndContext(
}
}
}
- catch (const lang::DisposedException &)
+ catch (const lang::DisposedException & exc)
{
- TOOLS_INFO_EXCEPTION("stoc", "DisposedException occurred:");
+ SAL_INFO("stoc", "DisposedException occurred: " << exc);
}
}
--
2.40.1

@ -0,0 +1,53 @@
From 3925cf39742ebee935498b14571f13f3e8b64b49 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Sat, 19 Feb 2022 20:43:33 +0000
Subject: [PATCH] EditTextObjectImpl copy ctor doesn't exactly copy
EditTextObjectImpl
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
and this is apparently relied on, so eliding the copy gives unexpected
results.
EditTextObjectImpl::Clone returns a copy of *this, but the
EditTextObjectImpl copy ctor explicitly does not copy the "PortionInfo"
member, so in:
commit fb8973f31f111229be5184f4e4223e963ced2c7b
Author: Caolán McNamara <caolanm@redhat.com>
Date: Sat Oct 10 19:21:38 2020 +0100
ofz#23492 the only user of this ctor throws away the original of the clone
so we can take ownership of the original instead
where the copy was optimized away we want from a state where there was a
new EditTextObjectImpl with an empty PortionInfo member to one where the
PortionInfo of the EditTextObjectImpl was retained.
So explicitly clear this unwanted info.
It's very hard to make rational judgements about code if a copy behaves
differently than the orignal :-(
Change-Id: I642d60841d6bdccbf830f8a2ccdbd9f542a8aa18
---
editeng/source/outliner/outliner.cxx | 1 +
1 file changed, 1 insertion(+)
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 9c474131352c..d48e4a542723 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -383,6 +383,7 @@ std::unique_ptr<OutlinerParaObject> Outliner::CreateParaObject( sal_Int32 nStart
aParagraphDataVector[nPara-nStartPara] = *GetParagraph(nPara);
}
+ xText->ClearPortionInfo(); // tdf#147166 the PortionInfo is unwanted here
std::unique_ptr<OutlinerParaObject> pPObj(new OutlinerParaObject(std::move(xText), aParagraphDataVector, bIsEditDoc));
pPObj->SetOutlinerMode(GetMode());
--
2.35.1

File diff suppressed because one or more lines are too long

@ -0,0 +1,77 @@
From d6bfde52b0b51e96075cfb195c2f9d8200a0fb08 Mon Sep 17 00:00:00 2001
From: Eike Rathke <erack@redhat.com>
Date: Thu, 16 Feb 2023 20:20:31 +0100
Subject: [PATCH 1/3] Obtain actual 0-parameter count for OR(), AND() and
1-parameter functions
OR and AND for legacy infix notation are classified as binary
operators but in fact are functions with parameter count. In case
no argument is supplied, GetByte() returns 0 and for that case the
implicit binary operator 2 parameters were wrongly assumed.
Similar for functions expecting 1 parameter, without argument 1
was assumed. For "real" unary and binary operators the compiler
already checks parameters. Omit OR and AND and 1-parameter
functions from this implicit assumption and return the actual 0
count.
Change-Id: Ie05398c112a98021ac2875cf7b6de994aee9d882
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147173
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit e7ce9bddadb2db222eaa5f594ef1de2e36d57e5c)
---
formula/source/core/api/token.cxx | 13 +++++--------
sc/source/core/tool/interpr4.cxx | 10 +++++++++-
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index 37dd26979ced..c2b12cf3a145 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -93,17 +93,14 @@ sal_uInt8 FormulaToken::GetParamCount() const
return 0; // parameters and specials
// ocIf... jump commands not for FAP, have cByte then
//2do: bool parameter whether FAP or not?
- else if ( GetByte() )
+ else if (GetByte())
return GetByte(); // all functions, also ocExternal and ocMacro
- else if (SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP)
- return 2; // binary
- else if ((SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP)
- || eOp == ocPercentSign)
- return 1; // unary
+ else if (SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP && eOp != ocAnd && eOp != ocOr)
+ return 2; // binary operators, compiler checked; OR and AND legacy but are functions
+ else if ((SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP) || eOp == ocPercentSign)
+ return 1; // unary operators, compiler checked
else if (SC_OPCODE_START_NO_PAR <= eOp && eOp < SC_OPCODE_STOP_NO_PAR)
return 0; // no parameter
- else if (SC_OPCODE_START_1_PAR <= eOp && eOp < SC_OPCODE_STOP_1_PAR)
- return 1; // one parameter
else if (FormulaCompiler::IsOpCodeJumpCommand( eOp ))
return 1; // only the condition counts as parameter
else
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index b9d34cd080a6..d5d8588fe49a 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4022,7 +4022,15 @@ StackVar ScInterpreter::Interpret()
else if (sp >= pCur->GetParamCount())
nStackBase = sp - pCur->GetParamCount();
else
- nStackBase = sp; // underflow?!?
+ {
+ SAL_WARN("sc.core", "Stack anomaly at " << aPos.Format(
+ ScRefFlags::VALID | ScRefFlags::FORCE_DOC | ScRefFlags::TAB_3D, &mrDoc)
+ << " eOp: " << static_cast<int>(eOp)
+ << " params: " << static_cast<int>(pCur->GetParamCount())
+ << " nStackBase: " << nStackBase << " sp: " << sp);
+ nStackBase = sp;
+ assert(!"underflow");
+ }
}
switch( eOp )
--
2.41.0

@ -0,0 +1,162 @@
From 366e9237399a948d2ef616b758d390bd7d0978a5 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann <sbergman@redhat.com>
Date: Mon, 31 May 2021 09:36:28 +0200
Subject: [PATCH] Replace inet_ntoa with inet_ntop
...as inet_ntoa is potentially not thread-safe; and add a test
Change-Id: I9df945b006ba7194c3b1444c4886101c08339ad0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116425
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit 33bf4f0bcf941ee4609f558442035514f54cbc8a)
and
Replace inet_addr with inet_pton
...as inet_addr is deprecated (it does not allow to distinguish successful
return for "255.255.255.255" from -1 error return); and update tests
Change-Id: I605cb2ba18fe9bd11d2d68c8f1c94271c4503509
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116441
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit 1fef071c01caf6c293dd941ee7c8340e6894afc3)
fix leak in SocketTest
Change-Id: I8c5e2d4c4687beab08876fe3e945d19a1629bc36
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116514
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit 313eaf979ea2d69e4ffa88a5e87cc09ffe0ff088)
---
sal/CppunitTest_sal_osl.mk | 1 +
sal/osl/unx/socket.cxx | 16 +++++++----
sal/qa/osl/socket.cxx | 58 ++++++++++++++++++++++++++++++++++++++
3 files changed, 70 insertions(+), 5 deletions(-)
create mode 100644 sal/qa/osl/socket.cxx
diff --git a/sal/CppunitTest_sal_osl.mk b/sal/CppunitTest_sal_osl.mk
index 2e4b77509f56..d8c2627d9e0f 100644
--- a/sal/CppunitTest_sal_osl.mk
+++ b/sal/CppunitTest_sal_osl.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,sal_osl,\
sal/qa/osl/process/osl_Thread \
sal/qa/osl/profile/osl_old_testprofile \
sal/qa/osl/setthreadname/test-setthreadname \
+ sal/qa/osl/socket \
))
$(eval $(call gb_CppunitTest_use_libraries,sal_osl,\
diff --git a/sal/osl/unx/socket.cxx b/sal/osl/unx/socket.cxx
index 56a8f6cd63ac..9fafc6d1db81 100644
--- a/sal/osl/unx/socket.cxx
+++ b/sal/osl/unx/socket.cxx
@@ -437,7 +437,10 @@ oslSocketAddr SAL_CALL osl_createInetBroadcastAddr (
&pDottedAddr, strDottedAddr->buffer, strDottedAddr->length,
RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS);
- nAddr = inet_addr (pDottedAddr->buffer);
+ in_addr buf;
+ if (inet_pton (AF_INET, pDottedAddr->buffer, &buf) == 1) {
+ nAddr = buf.s_addr;
+ }
rtl_string_release (pDottedAddr);
}
@@ -505,11 +508,11 @@ oslSocketAddr osl_psz_createInetSocketAddr (
sal_Int32 Port)
{
oslSocketAddr pAddr = nullptr;
- sal_Int32 Addr = inet_addr(pszDottedAddr);
- if(Addr != -1)
+ in_addr buf;
+ if(inet_pton(AF_INET, pszDottedAddr, &buf) == 1)
{
/* valid dotted addr */
- pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons(Port) , Addr );
+ pAddr = createSocketAddrWithFamily( osl_Socket_FamilyInet, htons(Port) , buf.s_addr );
}
return pAddr;
}
@@ -1090,7 +1093,10 @@ oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr(oslSocketAddr Addr, r
return osl_Socket_Error;
}
- rtl_uString_newFromAscii(ustrDottedInetAddr,inet_ntoa(pSystemInetAddr->sin_addr));
+ char buf[INET_ADDRSTRLEN];
+ auto const text = inet_ntop(AF_INET, &pSystemInetAddr->sin_addr, buf, INET_ADDRSTRLEN);
+ assert(text != nullptr);
+ rtl_uString_newFromAscii(ustrDottedInetAddr,text);
return osl_Socket_Ok;
diff --git a/sal/qa/osl/socket.cxx b/sal/qa/osl/socket.cxx
new file mode 100644
index 000000000000..ed31c9ede7ae
--- /dev/null
+++ b/sal/qa/osl/socket.cxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <osl/socket.h>
+#include <rtl/ustring.hxx>
+
+namespace
+{
+class SocketTest : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE(SocketTest);
+ CPPUNIT_TEST(test_createInetSocketAddr);
+ CPPUNIT_TEST(test_createInetBroadcastAddr);
+ CPPUNIT_TEST_SUITE_END();
+
+ void test_createInetSocketAddr()
+ {
+ OUString const in("123.4.56.78");
+ auto const addr = osl_createInetSocketAddr(in.pData, 100);
+ CPPUNIT_ASSERT(addr != nullptr);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_FamilyInet, osl_getFamilyOfSocketAddr(addr));
+ OUString out;
+ auto const res = osl_getDottedInetAddrOfSocketAddr(addr, &out.pData);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_Ok, res);
+ CPPUNIT_ASSERT_EQUAL(in, out);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(100), osl_getInetPortOfSocketAddr(addr));
+ osl_destroySocketAddr(addr);
+ }
+
+ void test_createInetBroadcastAddr()
+ {
+ OUString const in("123.4.56.78");
+ auto const addr = osl_createInetBroadcastAddr(in.pData, 100);
+ CPPUNIT_ASSERT(addr != nullptr);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_FamilyInet, osl_getFamilyOfSocketAddr(addr));
+ OUString out;
+ auto const res = osl_getDottedInetAddrOfSocketAddr(addr, &out.pData);
+ CPPUNIT_ASSERT_EQUAL(osl_Socket_Ok, res);
+ CPPUNIT_ASSERT_EQUAL(OUString("123.255.255.255"), out);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(100), osl_getInetPortOfSocketAddr(addr));
+ osl_destroySocketAddr(addr);
+ }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SocketTest);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
--
2.31.1

@ -0,0 +1,51 @@
From 1dbfd248524789efa4a84dc94d56a229c19bc0b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Wed, 4 May 2022 11:52:58 +0100
Subject: [PATCH] Resolves: rhbz#2081661 gtk-critical
gtk_tree_view_scroll_to_cell assertion
Change-Id: I4c7c4caed907072ef3a73ccfafabe882d618fa0e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133730
Tested-by: Jenkins
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
(cherry picked from commit 816435e4c2d52615462670464c48689bebdf1e55)
---
cui/source/customize/SvxMenuConfigPage.cxx | 2 +-
cui/source/customize/SvxToolbarConfigPage.cxx | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx
index 34cee1368d7a..bf7457193f5c 100644
--- a/cui/source/customize/SvxMenuConfigPage.cxx
+++ b/cui/source/customize/SvxMenuConfigPage.cxx
@@ -136,7 +136,7 @@ void SvxMenuConfigPage::Init()
ReloadTopLevelListBox();
- m_xTopLevelListBox->set_active(0);
+ m_xTopLevelListBox->set_active(m_xTopLevelListBox->get_count() ? 0 : -1);
SelectElement();
m_xCommandCategoryListBox->Init(comphelper::getProcessComponentContext(), m_xFrame,
diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx
index 99a85d82f96e..d2284428d8f1 100644
--- a/cui/source/customize/SvxToolbarConfigPage.cxx
+++ b/cui/source/customize/SvxToolbarConfigPage.cxx
@@ -246,10 +246,12 @@ void SvxToolbarConfigPage::Init()
ReloadTopLevelListBox();
- sal_Int32 nPos = 0;
+ sal_Int32 nCount = m_xTopLevelListBox->get_count();
+ sal_Int32 nPos = nCount > 0 ? 0 : -1;
+
if (!m_aURLToSelect.isEmpty())
{
- for (sal_Int32 i = 0, nCount = m_xTopLevelListBox->get_count(); i < nCount; ++i)
+ for (sal_Int32 i = 0; i < nCount; ++i)
{
SvxConfigEntry* pData
= reinterpret_cast<SvxConfigEntry*>(m_xTopLevelListBox->get_id(i).toInt64());
--
2.35.1

@ -0,0 +1,123 @@
From 197efb35e6f9661ecbeac2897d36a25bc2f6433e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Sun, 14 Nov 2021 14:59:38 +0000
Subject: [PATCH] Resolves: tdf#140250 don't share adjustments between
differerent spinbuttons
Change-Id: Ib684c746ff3176cf45ea9364efc12f2d6dde1f70
---
cui/uiconfig/ui/breaknumberoption.ui | 18 ++++++++++++++++--
cui/uiconfig/ui/calloutpage.ui | 14 ++++++++++++--
svx/uiconfig/ui/sidebareffect.ui | 7 ++++++-
3 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/cui/uiconfig/ui/breaknumberoption.ui b/cui/uiconfig/ui/breaknumberoption.ui
index 2641babeeb5d..23fe294ec702 100644
--- a/cui/uiconfig/ui/breaknumberoption.ui
+++ b/cui/uiconfig/ui/breaknumberoption.ui
@@ -9,6 +9,20 @@
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="lower">2</property>
+ <property name="upper">9</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="lower">2</property>
+ <property name="upper">9</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
<object class="GtkDialog" id="BreakNumberOption">
<property name="can_focus">False</property>
<property name="border_width">6</property>
@@ -134,7 +148,7 @@
<property name="can_focus">True</property>
<property name="halign">start</property>
<property name="activates_default">True</property>
- <property name="adjustment">adjustment1</property>
+ <property name="adjustment">adjustment2</property>
<property name="truncate-multiline">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="afterbreak-atkobject">
@@ -179,7 +193,7 @@
<property name="can_focus">True</property>
<property name="halign">start</property>
<property name="activates_default">True</property>
- <property name="adjustment">adjustment1</property>
+ <property name="adjustment">adjustment3</property>
<property name="truncate-multiline">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="wordlength-atkobject">
diff --git a/cui/uiconfig/ui/calloutpage.ui b/cui/uiconfig/ui/calloutpage.ui
index 87d4eff64eb4..00898dc3390c 100644
--- a/cui/uiconfig/ui/calloutpage.ui
+++ b/cui/uiconfig/ui/calloutpage.ui
@@ -7,6 +7,16 @@
<property name="step_increment">0.5</property>
<property name="page_increment">10</property>
</object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="upper">2400</property>
+ <property name="step_increment">0.5</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="upper">2400</property>
+ <property name="step_increment">0.5</property>
+ <property name="page_increment">10</property>
+ </object>
<object class="GtkBox" id="CalloutPage">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -231,7 +241,7 @@
<property name="can_focus">True</property>
<property name="activates_default">True</property>
<property name="text">0.00</property>
- <property name="adjustment">adjustment1</property>
+ <property name="adjustment">adjustment2</property>
<property name="digits">2</property>
<property name="truncate-multiline">True</property>
<child internal-child="accessible">
@@ -277,7 +287,7 @@
<property name="can_focus">True</property>
<property name="activates_default">True</property>
<property name="text">0.00</property>
- <property name="adjustment">adjustment1</property>
+ <property name="adjustment">adjustment3</property>
<property name="digits">2</property>
<property name="truncate-multiline">True</property>
<child internal-child="accessible">
diff --git a/svx/uiconfig/ui/sidebareffect.ui b/svx/uiconfig/ui/sidebareffect.ui
index 0e633242cd5c..1e041a2a8726 100644
--- a/svx/uiconfig/ui/sidebareffect.ui
+++ b/svx/uiconfig/ui/sidebareffect.ui
@@ -12,6 +12,11 @@
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="upper">150</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
<!-- n-columns=1 n-rows=1 -->
<object class="GtkGrid" id="EffectPropertyPanel">
<property name="visible">True</property>
@@ -195,7 +200,7 @@
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="truncate-multiline">True</property>
- <property name="adjustment">adjustment1</property>
+ <property name="adjustment">adjustment3</property>
</object>
<packing>
<property name="left_attach">1</property>
--
2.33.1

@ -0,0 +1,63 @@
From ea6cfca48017b76bfeb8898e6d9e47b3011a3add Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Sat, 6 Nov 2021 21:32:21 +0000
Subject: [PATCH] Resolves: tdf#145567 restore focus to the usual frame focus
widget
when tearing down the start center. Don't leave the focus in an
arbitrary widget.
Change-Id: I82c30c94121dc43b2ea1b4fbc66a0a3e79f7e664
---
vcl/unx/gtk3/gtk3gtkinst.cxx | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index a5d233e2f95e..0fddb27aaa2d 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1899,6 +1899,26 @@ GdkDragAction VclToGdk(sal_Int8 dragOperation)
return eRet;
}
+GtkWindow* get_active_window()
+{
+ GtkWindow* pFocus = nullptr;
+
+ GList* pList = gtk_window_list_toplevels();
+
+ for (GList* pEntry = pList; pEntry; pEntry = pEntry->next)
+ {
+ if (gtk_window_has_toplevel_focus(GTK_WINDOW(pEntry->data)))
+ {
+ pFocus = GTK_WINDOW(pEntry->data);
+ break;
+ }
+ }
+
+ g_list_free(pList);
+
+ return pFocus;
+}
+
class GtkInstanceWidget : public virtual weld::Widget
{
protected:
@@ -16635,6 +16655,14 @@ private:
// rehook handler and let vcl cycle its own way through this widget's
// children
pFrame->AllowCycleFocusOut();
+
+ // tdf#145567 if the focus is in this hierarchy then, now that we are tearing down,
+ // move focus to the usual focus candidate for the frame
+ GtkWindow* pFocusWin = get_active_window();
+ GtkWidget* pFocus = pFocusWin ? gtk_window_get_focus(pFocusWin) : nullptr;
+ bool bHasFocus = pFocus && gtk_widget_is_ancestor(pFocus, pTopLevel);
+ if (bHasFocus)
+ pFrame->GrabFocus();
}
static void signalUnmap(GtkWidget*, gpointer user_data)
--
2.33.1

@ -0,0 +1,39 @@
From 68a6c70f25762374f7aed0d4d755345c6f37c78d Mon Sep 17 00:00:00 2001
From: Stephan Bergmann <sbergman@redhat.com>
Date: Mon, 31 May 2021 10:56:38 +0200
Subject: [PATCH] Simplify construction of a hardcoded IPv4 address
Change-Id: I822313ee708935dd4ecb636c13a961fdd054d660
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116434
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
---
sd/source/ui/remotecontrol/DiscoveryService.cxx | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/sd/source/ui/remotecontrol/DiscoveryService.cxx b/sd/source/ui/remotecontrol/DiscoveryService.cxx
index 9ed2ae727761..cf0043387403 100644
--- a/sd/source/ui/remotecontrol/DiscoveryService.cxx
+++ b/sd/source/ui/remotecontrol/DiscoveryService.cxx
@@ -119,17 +119,7 @@ void DiscoveryService::setupSockets()
struct ip_mreq multicastRequest;
-// the Win32 SDK 8.1 deprecates inet_addr()
-#if defined(_WIN32)
- IN_ADDR addr;
- INT ret = InetPtonW(AF_INET, L"239.0.0.1", & addr);
- if (1 == ret)
- {
- multicastRequest.imr_multiaddr.s_addr = addr.S_un.S_addr;
- }
-#else
- multicastRequest.imr_multiaddr.s_addr = inet_addr( "239.0.0.1" );
-#endif
+ multicastRequest.imr_multiaddr.s_addr = htonl((239U << 24) | 1U); // 239.0.0.1
multicastRequest.imr_interface.s_addr = htonl(INADDR_ANY);
rc = setsockopt( mSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP,
--
2.31.1

@ -0,0 +1,32 @@
From 57b58d4fb85579a9aacbd6b2d7e389cce46f5fbc Mon Sep 17 00:00:00 2001
From: Stephan Bergmann <sbergman@redhat.com>
Date: Mon, 9 May 2022 16:17:15 +0200
Subject: [PATCH] URE Library_boostrap should not depend on Library_comphelper
...and apparently doesn't need to, even though that dependency got added with
6ffdc88e79904882e319bdd0b901e7491abae0b3 "Simplify Sequence iterations in
shell..svgio"
Change-Id: I7cb67dc48d11e426d5d5f7912eca13e25a32dbc5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134079
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
---
stoc/Library_bootstrap.mk | 1 -
1 file changed, 1 deletion(-)
diff --git a/stoc/Library_bootstrap.mk b/stoc/Library_bootstrap.mk
index ca1f49618bb8..62e2360581db 100644
--- a/stoc/Library_bootstrap.mk
+++ b/stoc/Library_bootstrap.mk
@@ -26,7 +26,6 @@ $(eval $(call gb_Library_use_internal_bootstrap_api,bootstrap,\
))
$(eval $(call gb_Library_use_libraries,bootstrap,\
- comphelper \
cppu \
cppuhelper \
reg \
--
2.40.1

@ -0,0 +1,143 @@
From 6de192ad5ffe9ec04328bfd178050cb8a33e1cbb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Wed, 15 Dec 2021 12:46:24 +0000
Subject: [PATCH] annocheck warning about missing .note.gnu.property section
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
copy and paste recommendation from:
https://sourceware.org/annobin/annobin.html/Test-cf-protection.html
and adapt like:
https://github.com/openssl/openssl/commit/51994e505dbb1cd0dd76869ec962e2948b77b585
where https://bugs.ruby-lang.org/attachments/8962 is similar
Intel docs have "The ENDBR32 and ENDBR64 (collectively ENDBRANCH) are
two new instructions that are used to mark valid indirect CALL/JMP
target locations in the program."
Change-Id: Ie867c263a888763db4478720ba189c9ec6cc974d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126859
Tested-by: Jenkins
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit af55dc3891f7950d392175004b2090cb0e54828e)
---
.../source/cpp_uno/gcc3_linux_intel/call.s | 16 ++++++++++++++++
.../source/cpp_uno/gcc3_linux_x86-64/call.s | 19 +++++++++++++++++++
config_host.mk.in | 1 +
configure.ac | 14 ++++++++++++++
solenv/gbuild/platform/com_GCC_class.mk | 1 +
5 files changed, 51 insertions(+)
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/call.s b/bridges/source/cpp_uno/gcc3_linux_intel/call.s
index 6be583247733..0a5870defcf3 100644
--- a/bridges/source/cpp_uno/gcc3_linux_intel/call.s
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/call.s
@@ -290,3 +290,19 @@ privateSnippetExecutorClass:
.align 4
.LEFDEc:
.section .note.GNU-stack,"",@progbits
+ .section .note.gnu.property,"a"
+ .p2align 2
+ .long 1f - 0f
+ .long 4f - 1f
+ .long 5
+0:
+ .string "GNU"
+1:
+ .p2align 2
+ .long 0xc0000002
+ .long 3f - 2f
+2:
+ .long 0x3
+3:
+ .p2align 2
+4:
diff --git a/bridges/source/cpp_uno/gcc3_linux_x86-64/call.s b/bridges/source/cpp_uno/gcc3_linux_x86-64/call.s
index 447ac0cecfdd..2e9346dff8a0 100644
--- a/bridges/source/cpp_uno/gcc3_linux_x86-64/call.s
+++ b/bridges/source/cpp_uno/gcc3_linux_x86-64/call.s
@@ -22,6 +22,9 @@
.type privateSnippetExecutor, @function
privateSnippetExecutor:
.LFB3:
+#if defined(END_BRANCH_INS_SUPPORT)
+ endbr64
+#endif
pushq %rbp
.LCFI0:
movq %rsp, %rbp
@@ -115,3 +118,19 @@ privateSnippetExecutor:
.align 8
.LEFDE1:
.section .note.GNU-stack,"",@progbits
+ .section .note.gnu.property,"a"
+ .p2align 3
+ .long 1f - 0f
+ .long 4f - 1f
+ .long 5
+0:
+ .string "GNU"
+1:
+ .p2align 3
+ .long 0xc0000002
+ .long 3f - 2f
+2:
+ .long 0x3
+3:
+ .p2align 3
+4:
diff --git a/config_host.mk.in b/config_host.mk.in
index d6edba704b21..6ac2a90695e2 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -260,6 +260,7 @@ export GTK3_CFLAGS=$(gb_SPACE)@GTK3_CFLAGS@
export GTK3_LIBS=$(gb_SPACE)@GTK3_LIBS@
export USING_X11=@USING_X11@
export HAMCREST_JAR=@HAMCREST_JAR@
+export HAVE_ASM_END_BRANCH_INS_SUPPORT=@HAVE_ASM_END_BRANCH_INS_SUPPORT@
export HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED=@HAVE_BROKEN_GCC_WMAYBE_UNINITIALIZED@
export HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR=@HAVE_CLANG_DEBUG_INFO_KIND_CONSTRUCTOR@
export HAVE_LO_CLANG_DLLEXPORTINLINES=@HAVE_LO_CLANG_DLLEXPORTINLINES@
diff --git a/configure.ac b/configure.ac
index bd28bc6eb38e..ef03408e8e98 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7730,6 +7730,20 @@ _ACEOF
CPPFLAGS="$save_CPPFLAGS"
+ AC_MSG_CHECKING([if CET endbranch is recognized])
+cat > endbr.s <<_ACEOF
+endbr32
+_ACEOF
+ HAVE_ASM_END_BRANCH_INS_SUPPORT=
+ if $CXX -c endbr.s -o endbr.o >/dev/null 2>&5; then
+ AC_MSG_RESULT([yes])
+ HAVE_ASM_END_BRANCH_INS_SUPPORT=TRUE
+ else
+ AC_MSG_RESULT([no])
+ fi
+ rm -f endbr.s endbr.o
+ AC_SUBST(HAVE_ASM_END_BRANCH_INS_SUPPORT)
+
AC_LANG_POP([C++])
fi
diff --git a/solenv/gbuild/platform/com_GCC_class.mk b/solenv/gbuild/platform/com_GCC_class.mk
index c29e2a979fd9..e2056abf9682 100644
--- a/solenv/gbuild/platform/com_GCC_class.mk
+++ b/solenv/gbuild/platform/com_GCC_class.mk
@@ -44,6 +44,7 @@ $(call gb_Helper_abbreviate_dirs,\
-x assembler-with-cpp \
$(gb_LTOFLAGS) \
$(gb_AFLAGS) \
+ $(if $(HAVE_ASM_END_BRANCH_INS_SUPPORT),-DEND_BRANCH_INS_SUPPORT) \
-c $(3) \
-o $(1)) \
$(INCLUDE) && \
--
2.33.1

@ -1,8 +1,9 @@
From 0b613b941c3ffbe432934269f8865bc1f9e59cde Mon Sep 17 00:00:00 2001 From 4cac125f90e0a3d6828d879cb06f3a4bac14321b Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build> From: David Tardon <dtardon@redhat.com>
Date: Tue, 27 Sep 2022 15:13:59 -0700 Date: Thu, 21 Aug 2014 16:10:51 +0200
Subject: [PATCH] disable libe-book support Subject: [PATCH] disable libe-book support
Change-Id: Ie915a9bd2acf7f3aeb8b0933252da33c17043bc4
--- ---
configure.ac | 3 --- configure.ac | 3 ---
external/Module_external.mk | 1 - external/Module_external.mk | 1 -
@ -10,14 +11,14 @@ Subject: [PATCH] disable libe-book support
writerperfect/Library_wpftwriter.mk | 2 -- writerperfect/Library_wpftwriter.mk | 2 --
writerperfect/qa/unit/WpftFilterFixture.hxx | 4 ---- writerperfect/qa/unit/WpftFilterFixture.hxx | 4 ----
writerperfect/qa/unit/WpftWriterFilterTest.cxx | 5 ----- writerperfect/qa/unit/WpftWriterFilterTest.cxx | 5 -----
writerperfect/source/writer/wpftwriter.component | 6 ------ writerperfect/source/writer/wpftwriter.component | 5 -----
7 files changed, 29 deletions(-) 7 files changed, 28 deletions(-)
diff --git a/configure.ac b/configure.ac diff --git a/configure.ac b/configure.ac
index 8babc85..e7733de 100644 index fe425319b8f8..4b8f6a95472c 100644
--- a/configure.ac --- a/configure.ac
+++ b/configure.ac +++ b/configure.ac
@@ -9606,9 +9606,6 @@ libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.10]) @@ -8566,9 +8566,6 @@ libo_PKG_VERSION([ETONYEK], [libetonyek-0.1], [0.1.8])
libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1]) libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1])
@ -28,25 +29,25 @@ index 8babc85..e7733de 100644
libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0]) libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0])
diff --git a/external/Module_external.mk b/external/Module_external.mk diff --git a/external/Module_external.mk b/external/Module_external.mk
index 366fff2..bc987d1 100644 index 41e018d2ef3f..1b7627a1b3e2 100644
--- a/external/Module_external.mk --- a/external/Module_external.mk
+++ b/external/Module_external.mk +++ b/external/Module_external.mk
@@ -31,7 +31,6 @@ $(eval $(call gb_Module_add_moduledirs,external,\ @@ -33,7 +33,6 @@ $(eval $(call gb_Module_add_moduledirs,external,\
$(call gb_Helper_optional,CT2N,ct2n) \
$(call gb_Helper_optional,CURL,curl) \ $(call gb_Helper_optional,CURL,curl) \
$(call gb_Helper_optional,DRAGONBOX,dragonbox) \
dtoa \ dtoa \
- $(call gb_Helper_optional,EBOOK,libebook) \ - $(call gb_Helper_optional,EBOOK,libebook) \
$(call gb_Helper_optional,EPM,epm) \ $(call gb_Helper_optional,EPM,epm) \
$(call gb_Helper_optional,EPOXY,epoxy) \ $(call gb_Helper_optional,EPOXY,epoxy) \
$(call gb_Helper_optional,EPUBGEN,libepubgen) \ $(call gb_Helper_optional,EPUBGEN,libepubgen) \
diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk
index a58b839..526b447 100644 index e71ffacf8f25..74d2ef05c4aa 100644
--- a/filter/Configuration_filter.mk --- a/filter/Configuration_filter.mk
+++ b/filter/Configuration_filter.mk +++ b/filter/Configuration_filter.mk
@@ -359,10 +359,6 @@ $(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu @@ -358,10 +358,6 @@ $(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu
writer_OOXML \
writer_OOXML_Template \ writer_OOXML_Template \
writer_layout_dump_xml \ writer_layout_dump_xml \
writer_indexing_export_xml \
- writer_BroadBand_eBook \ - writer_BroadBand_eBook \
- writer_FictionBook_2 \ - writer_FictionBook_2 \
- writer_PalmDoc \ - writer_PalmDoc \
@ -54,10 +55,10 @@ index a58b839..526b447 100644
writer_ApplePages \ writer_ApplePages \
MWAW_Text_Document \ MWAW_Text_Document \
Palm_Text_Document \ Palm_Text_Document \
@@ -409,10 +405,6 @@ $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters @@ -406,10 +402,6 @@ $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters
OOXML_Text \
OOXML_Text_Template \ OOXML_Text_Template \
writer_layout_dump \ writer_layout_dump \
writer_indexing_export \
- BroadBand_eBook \ - BroadBand_eBook \
- FictionBook_2 \ - FictionBook_2 \
- PalmDoc \ - PalmDoc \
@ -66,30 +67,30 @@ index a58b839..526b447 100644
MWAW_Text_Document \ MWAW_Text_Document \
Palm_Text_Document \ Palm_Text_Document \
diff --git a/writerperfect/Library_wpftwriter.mk b/writerperfect/Library_wpftwriter.mk diff --git a/writerperfect/Library_wpftwriter.mk b/writerperfect/Library_wpftwriter.mk
index 840a86f..70a8933 100644 index 8993cca31490..b6e11f356d97 100644
--- a/writerperfect/Library_wpftwriter.mk --- a/writerperfect/Library_wpftwriter.mk
+++ b/writerperfect/Library_wpftwriter.mk +++ b/writerperfect/Library_wpftwriter.mk
@@ -64,7 +64,6 @@ endif @@ -53,7 +53,6 @@ $(eval $(call gb_Library_use_libraries,wpftwriter,\
$(eval $(call gb_Library_use_externals,wpftwriter,\ $(eval $(call gb_Library_use_externals,wpftwriter,\
abw \ abw \
boost_headers \ boost_headers \
- ebook \ - ebook \
$(if $(ENABLE_WASM_STRIP_SWEXPORTS),,etonyek) \ epubgen \
etonyek \
icu_headers \ icu_headers \
icui18n \ @@ -73,7 +72,6 @@ $(eval $(call gb_Library_use_externals,wpftwriter,\
@@ -93,7 +92,6 @@ endif
ifneq ($(ENABLE_WASM_STRIP_SWEXPORTS),TRUE)
$(eval $(call gb_Library_add_exception_objects,wpftwriter,\ $(eval $(call gb_Library_add_exception_objects,wpftwriter,\
writerperfect/source/writer/AbiWordImportFilter \ writerperfect/source/writer/AbiWordImportFilter \
- writerperfect/source/writer/EBookImportFilter \ - writerperfect/source/writer/EBookImportFilter \
writerperfect/source/writer/MSWorksImportFilter \ writerperfect/source/writer/EPUBExportDialog \
writerperfect/source/writer/MWAWImportFilter \ writerperfect/source/writer/EPUBExportFilter \
writerperfect/source/writer/PagesImportFilter \ writerperfect/source/writer/EPUBExportUIComponent \
diff --git a/writerperfect/qa/unit/WpftFilterFixture.hxx b/writerperfect/qa/unit/WpftFilterFixture.hxx diff --git a/writerperfect/qa/unit/WpftFilterFixture.hxx b/writerperfect/qa/unit/WpftFilterFixture.hxx
index 2fdd6a2..dbdd672 100644 index f32478165617..f42edb0d7f55 100644
--- a/writerperfect/qa/unit/WpftFilterFixture.hxx --- a/writerperfect/qa/unit/WpftFilterFixture.hxx
+++ b/writerperfect/qa/unit/WpftFilterFixture.hxx +++ b/writerperfect/qa/unit/WpftFilterFixture.hxx
@@ -25,10 +25,6 @@ @@ -26,10 +26,6 @@
|| ((major) == (req_major) \ || ((major) == (req_major) \
&& ((minor) > (req_minor) || ((minor) == (req_minor) && ((micro) >= (req_micro))))) && ((minor) > (req_minor) || ((minor) == (req_minor) && ((micro) >= (req_micro)))))
@ -101,7 +102,7 @@ index 2fdd6a2..dbdd672 100644
REQUIRE_VERSION(ETONYEK_VERSION_MAJOR, ETONYEK_VERSION_MINOR, ETONYEK_VERSION_MICRO, major, \ REQUIRE_VERSION(ETONYEK_VERSION_MAJOR, ETONYEK_VERSION_MINOR, ETONYEK_VERSION_MICRO, major, \
minor, micro) minor, micro)
diff --git a/writerperfect/qa/unit/WpftWriterFilterTest.cxx b/writerperfect/qa/unit/WpftWriterFilterTest.cxx diff --git a/writerperfect/qa/unit/WpftWriterFilterTest.cxx b/writerperfect/qa/unit/WpftWriterFilterTest.cxx
index 78d24dc..39924f9 100644 index 8bc4c7cadbb3..eca43caf8d8c 100644
--- a/writerperfect/qa/unit/WpftWriterFilterTest.cxx --- a/writerperfect/qa/unit/WpftWriterFilterTest.cxx
+++ b/writerperfect/qa/unit/WpftWriterFilterTest.cxx +++ b/writerperfect/qa/unit/WpftWriterFilterTest.cxx
@@ -30,9 +30,6 @@ WpftWriterFilterTest::WpftWriterFilterTest() @@ -30,9 +30,6 @@ WpftWriterFilterTest::WpftWriterFilterTest()
@ -114,32 +115,31 @@ index 78d24dc..39924f9 100644
const writerperfect::test::WpftOptionalMap_t aEtonyekOptional{ const writerperfect::test::WpftOptionalMap_t aEtonyekOptional{
{ "Pages_4.pages", REQUIRE_ETONYEK_VERSION(0, 1, 2) }, { "Pages_4.pages", REQUIRE_ETONYEK_VERSION(0, 1, 2) },
{ "Pages_5.pages", REQUIRE_ETONYEK_VERSION(0, 1, 8) }, { "Pages_5.pages", REQUIRE_ETONYEK_VERSION(0, 1, 8) },
@@ -59,8 +56,6 @@ void WpftWriterFilterTest::test() @@ -54,8 +51,6 @@ void WpftWriterFilterTest::test()
doTest("com.sun.star.comp.Writer.AbiWordImportFilter", doTest("com.sun.star.comp.Writer.AbiWordImportFilter",
u"/writerperfect/qa/unit/data/writer/libabw/"); "/writerperfect/qa/unit/data/writer/libabw/");
- doTest("org.libreoffice.comp.Writer.EBookImportFilter", - doTest("org.libreoffice.comp.Writer.EBookImportFilter",
- u"/writerperfect/qa/unit/data/writer/libe-book/", aEBookOptional); - "/writerperfect/qa/unit/data/writer/libe-book/", aEBookOptional);
doTest("com.sun.star.comp.Writer.MSWorksImportFilter", doTest("com.sun.star.comp.Writer.MSWorksImportFilter",
u"/writerperfect/qa/unit/data/writer/libwps/", aWpsOptional); "/writerperfect/qa/unit/data/writer/libwps/", aWpsOptional);
doTest("com.sun.star.comp.Writer.MWAWImportFilter", doTest("com.sun.star.comp.Writer.MWAWImportFilter",
diff --git a/writerperfect/source/writer/wpftwriter.component b/writerperfect/source/writer/wpftwriter.component diff --git a/writerperfect/source/writer/wpftwriter.component b/writerperfect/source/writer/wpftwriter.component
index 176d487..0c89217 100644 index 8ab436634052..2720023baedf 100644
--- a/writerperfect/source/writer/wpftwriter.component --- a/writerperfect/source/writer/wpftwriter.component
+++ b/writerperfect/source/writer/wpftwriter.component +++ b/writerperfect/source/writer/wpftwriter.component
@@ -42,12 +42,6 @@ @@ -38,11 +38,6 @@
<service name="com.sun.star.document.ExtendedTypeDetection"/>
<service name="com.sun.star.document.ImportFilter"/> <service name="com.sun.star.document.ImportFilter"/>
<optional/>
</implementation> </implementation>
- <implementation name="org.libreoffice.comp.Writer.EBookImportFilter" - <implementation name="org.libreoffice.comp.Writer.EBookImportFilter"
- constructor="org_libreoffice_comp_Writer_EBookImportFilter_get_implementation"> - constructor="org_libreoffice_comp_Writer_EBookImportFilter_get_implementation">
- <service name="com.sun.star.document.ExtendedTypeDetection"/> - <service name="com.sun.star.document.ExtendedTypeDetection"/>
- <service name="com.sun.star.document.ImportFilter"/> - <service name="com.sun.star.document.ImportFilter"/>
- <optional/>
- </implementation> - </implementation>
<implementation name="org.libreoffice.comp.Writer.PagesImportFilter" <implementation name="org.libreoffice.comp.Writer.PagesImportFilter"
constructor="org_libreoffice_comp_Writer_PagesImportFilter_get_implementation"> constructor="org_libreoffice_comp_Writer_PagesImportFilter_get_implementation">
<service name="com.sun.star.document.ExtendedTypeDetection"/> <service name="com.sun.star.document.ExtendedTypeDetection"/>
-- --
2.31.1 2.25.1

@ -0,0 +1,99 @@
From 78111bfd799914b4a39a9f3022f5028234c609bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 13 Feb 2023 13:56:10 +0000
Subject: [PATCH] disable script dump
Change-Id: I04d740cc0fcf87daa192a0a6af34138278043a19
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146986
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147051
Tested-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147256
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Andras Timar <andras.timar@collabora.com>
(cherry picked from commit c948c8d3bb1433cde46319f3bb81693912371aea)
---
.../source/drivers/hsqldb/HDriver.cxx | 31 +++++++++++++++++++
external/hsqldb/UnpackedTarball_hsqldb.mk | 1 +
.../hsqldb/patches/disable-dump-script.patch | 14 +++++++++
3 files changed, 46 insertions(+)
create mode 100644 external/hsqldb/patches/disable-dump-script.patch
diff --git a/connectivity/source/drivers/hsqldb/HDriver.cxx b/connectivity/source/drivers/hsqldb/HDriver.cxx
index 6ff0f539407b..eee39911a255 100644
--- a/connectivity/source/drivers/hsqldb/HDriver.cxx
+++ b/connectivity/source/drivers/hsqldb/HDriver.cxx
@@ -290,6 +290,37 @@ namespace connectivity
} // if ( xStream.is() )
::comphelper::disposeComponent(xStream);
}
+
+ // disallow any database/script files that contain a "SCRIPT[.*]" entry (this is belt and braces
+ // in that bundled hsqldb 1.8.0 is patched to also reject them)
+ //
+ // hsqldb 2.6.0 release notes have: added system role SCRIPT_OPS for export / import of database structure and data
+ // which seems to provide a builtin way to do this with contemporary hsqldb
+ const OUString sScript( "script" );
+ if (!bIsNewDatabase && xStorage->isStreamElement(sScript))
+ {
+ Reference<XStream > xStream = xStorage->openStreamElement(sScript, ElementModes::READ);
+ if (xStream.is())
+ {
+ std::unique_ptr<SvStream> pStream(::utl::UcbStreamHelper::CreateStream(xStream));
+ if (pStream)
+ {
+ OString sLine;
+ while (pStream->ReadLine(sLine))
+ {
+ OString sText = sLine.trim();
+ if (sText.startsWithIgnoreAsciiCase("SCRIPT"))
+ {
+ ::connectivity::SharedResources aResources;
+ sMessage = aResources.getResourceString(STR_COULD_NOT_LOAD_FILE).replaceFirst("$filename$", sSystemPath);
+ break;
+ }
+ }
+ }
+ } // if ( xStream.is() )
+ ::comphelper::disposeComponent(xStream);
+ }
+
}
catch(Exception&)
{
diff --git a/external/hsqldb/UnpackedTarball_hsqldb.mk b/external/hsqldb/UnpackedTarball_hsqldb.mk
index cbba770f19a0..ed262cccf4ca 100644
--- a/external/hsqldb/UnpackedTarball_hsqldb.mk
+++ b/external/hsqldb/UnpackedTarball_hsqldb.mk
@@ -29,6 +29,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,hsqldb,\
external/hsqldb/patches/jdbc-4.1.patch \
external/hsqldb/patches/multipleResultSets.patch \
) \
+ external/hsqldb/patches/disable-dump-script.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/hsqldb/patches/disable-dump-script.patch b/external/hsqldb/patches/disable-dump-script.patch
new file mode 100644
index 000000000000..401dd38abc9a
--- /dev/null
+++ b/external/hsqldb/patches/disable-dump-script.patch
@@ -0,0 +1,14 @@
+--- a/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java 2023-02-13 11:08:11.297243034 +0000
++++ b/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java 2023-02-13 13:49:17.973089433 +0000
+@@ -403,6 +403,11 @@
+ throw Trace.error(Trace.INVALID_IDENTIFIER);
+ }
+
++ // added condition to avoid execution of spurious command in .script or .log file
++ if (session.isProcessingScript() || session.isProcessingLog()) {
++ return new Result(ResultConstants.UPDATECOUNT);
++ }
++
+ dsw = new ScriptWriterText(database, token, true, true, true);
+
+ dsw.writeAll();
--
2.41.0

@ -0,0 +1,45 @@
From ce37356f6bcaaef62a80814d7d54d3aa6d53167d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 12 Oct 2021 09:52:53 +0100
Subject: [PATCH] document-new shouldn't get prefixed to become
libreoffice-document-new
seen by rpminspect as .desktop "references icon libreoffice-document-new
but no subpackages contain libreoffice-document-new"
introduced by:
commit f767d5e2b017c0d0cfd23ff3318cb30901847722
Date: Sun Sep 1 11:30:12 2019 +0200
Add icons to New Document desktop file actions
in the [Desktop Action NewDocument] section
Change-Id: I64ce5e2dbaca32083b2f76e960c33a815f8a3773
---
sysui/desktop/share/brand.pl | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/sysui/desktop/share/brand.pl b/sysui/desktop/share/brand.pl
index 9d73e619c495..b17a7374fd62 100644
--- a/sysui/desktop/share/brand.pl
+++ b/sysui/desktop/share/brand.pl
@@ -81,9 +81,11 @@ while ($arg = shift) {
# remove possible Windows line-ends
chomp;
- # patch all occurrences of openoffice in ICON line with
- # $prefix
- s/Icon=/Icon=$iconprefix/;
+ # patch all icons in ICON line with $prefix
+ if (! /Icon=document-new/ ) { # except for Icon=document-new which
+ # is a stock icon, not one of ours
+ s/Icon=/Icon=$iconprefix/;
+ }
# patch all occurrences of openoffice in icon_filename
# line with $prefix
--
2.32.0

@ -14,7 +14,7 @@ diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index c54aea9dd4f7..a613fe12cef2 100644 index c54aea9dd4f7..a613fe12cef2 100644
--- a/desktop/source/app/app.cxx --- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx
@@ -1165,8 +1165,6 @@ @@ -1147,14 +1147,12 @@ void Desktop::Exception(ExceptionCategory nCategory)
if( bRestart ) if( bRestart )
{ {
RequestHandler::Disable(); RequestHandler::Disable();
@ -22,10 +22,8 @@ index c54aea9dd4f7..a613fe12cef2 100644
- osl_removeSignalHandler( pSignalHandler ); - osl_removeSignalHandler( pSignalHandler );
restartOnMac(false); restartOnMac(false);
#if !ENABLE_WASM_STRIP_SPLASH if ( m_rSplashScreen.is() )
@@ -1174,7 +1172,7 @@
m_rSplashScreen->reset(); m_rSplashScreen->reset();
#endif
- _exit( EXITHELPER_CRASH_WITH_RESTART ); - _exit( EXITHELPER_CRASH_WITH_RESTART );
+ return; + return;

@ -0,0 +1,40 @@
From a94b58277c7aeaa83ce14347cd0b8f7137969d03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= <l.lunak@collabora.com>
Date: Fri, 29 Oct 2021 14:20:57 +0200
Subject: [PATCH] fix comparison when searching cache
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This made the cache always fail and re-cache, making CJK text layout
slower over time. A mistake from ef513fd4b049b214a03fbe6e that
converted !strcmp() to != instead of ==.
Change-Id: Ib70579cd36d7b1df062e4d067e03f5c65e34b142
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124432
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Tested-by: Luboš Luňák <l.lunak@collabora.com>
(cherry picked from commit 5b38b5744af1e896892df708c16b83e1b551d2c7)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124206
Tested-by: Jenkins
---
i18npool/source/breakiterator/xdictionary.cxx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/i18npool/source/breakiterator/xdictionary.cxx b/i18npool/source/breakiterator/xdictionary.cxx
index 947a23c5073b..6b57433370c7 100644
--- a/i18npool/source/breakiterator/xdictionary.cxx
+++ b/i18npool/source/breakiterator/xdictionary.cxx
@@ -152,7 +152,7 @@ void xdictionary::initDictionaryData(const char *pLang)
osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() );
for(const datacache & i : aLoadedCache)
{
- if( i.maLang != pLang )
+ if( i.maLang == pLang )
{
data = i.maData;
return;
--
2.33.1

@ -0,0 +1,40 @@
From 2f11e4247b6332b06a5b23c33207fa10767244a6 Mon Sep 17 00:00:00 2001
From: Thierry Vignaud <thierry.vignaud@gmail.com>
Date: Thu, 30 Jan 2020 11:19:20 +0000
Subject: [PATCH] fix detecting qrcodegen
Change-Id: Ib945b57420083489273cefc5655eb50932b5a3f8
---
configure.ac | 2 +-
cui/source/dialogs/QrCodeGenDialog.cxx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index 5a14369..ebd1b55 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10250,7 +10250,7 @@ else
AC_MSG_RESULT([external])
SYSTEM_QRCODEGEN=TRUE
AC_LANG_PUSH([C++])
- AC_CHECK_HEADER(qrcodegen/QrCode.hpp, [],
+ AC_CHECK_HEADER(qrcodegencpp/QrCode.hpp, [],
[AC_MSG_ERROR(qrcodegen headers not found.)], [#include <stdexcept>])
AC_CHECK_LIB([qrcodegencpp], [main], [:],
[ AC_MSG_ERROR(qrcodegen C++ library not found.) ], [])
diff --git a/cui/source/dialogs/QrCodeGenDialog.cxx b/cui/source/dialogs/QrCodeGenDialog.cxx
index 7f3f6a8..b79a356 100644
--- a/cui/source/dialogs/QrCodeGenDialog.cxx
+++ b/cui/source/dialogs/QrCodeGenDialog.cxx
@@ -19,7 +19,7 @@
#if ENABLE_QRCODEGEN
#if defined(SYSTEM_QRCODEGEN)
-#include <qrcodegen/QrCode.hpp>
+#include <qrcodegencpp/QrCode.hpp>
#else
#include <QrCode.hpp>
#endif
--
2.26.2

@ -0,0 +1,118 @@
From b06e5e2b9761d242d9269b091da9a98ec705d2b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 1 Jun 2021 13:20:43 +0100
Subject: [PATCH] gtk3: workaround missing gdk_threads_enter calls in external
code
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
with gtk3 file dialog. file, open, +other locations,
type davs://somewhere + return
#0 0x00007ffff7a6e2a2 in raise () at /lib64/libc.so.6
#1 0x00007ffff7a578a4 in abort () at /lib64/libc.so.6
#2 0x00007ffff7a57789 in _nl_load_domain.cold () at /lib64/libc.so.6
#3 0x00007ffff7a66a16 in () at /lib64/libc.so.6
#4 0x00007fffd9be7672 in GtkYieldMutex::ThreadsLeave() (this=0x513480) at vcl/unx/gtk3/gtkinst.cxx:354
#5 0x00007fffd9be6a53 in GdkThreadsLeave() () at vcl/unx/gtk3/gtkinst.cxx:116
#6 0x00007fffd947ac2d in gtk_dialog_run (dialog=0xa984310) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkdialog.c:1397
^^^ this also (see #30) calls gdk_threads_leave before g_main_loop_run, but no gdk_threads_enter has been called, presumably emit_show_error_message should have called it (?) ^^^
#7 0x00007fffd94a6dc6 in error_message_with_parent (detail=0xa97f9b0 "HTTP Error: Error resolving “nowhere”: Name or service not known", msg=<optimized out>, parent=<optimized out>)
at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkfilechooserwidget.c:763
#8 error_message (impl=<optimized out>, msg=<optimized out>, detail=0xa97f9b0 "HTTP Error: Error resolving “nowhere”: Name or service not known") at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkfilechooserwidget.c:786
#9 0x00007fffe996ec2f in g_closure_invoke () at /lib64/libgobject-2.0.so.0
#10 0x00007fffe998aea6 in signal_emit_unlocked_R () at /lib64/libgobject-2.0.so.0
#11 0x00007fffe998c76a in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#12 0x00007fffe998c983 in g_signal_emit () at /lib64/libgobject-2.0.so.0
#13 0x00007fffd9561fc7 in emit_show_error_message (secondary_message=0x7fffbc0566f0 "HTTP Error: Error resolving “nowhere”: Name or service not known", primary_message=<optimized out>, view=0x900a240)
at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkplacesview.c:171
#14 server_mount_ready_cb (source_file=0x7fffbc05b4c0, res=<optimized out>, user_data=0x900a240) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkplacesview.c:1232
#15 0x00007fffe9a64a7a in g_task_return_now () at /lib64/libgio-2.0.so.0
#16 0x00007fffe9a64c7b in g_task_return () at /lib64/libgio-2.0.so.0
#17 0x00007fffd80653b8 in mount_reply () at /usr/lib64/gio/modules/libgvfsdbus.so
#18 0x00007fffe9a64a7a in g_task_return_now () at /lib64/libgio-2.0.so.0
#19 0x00007fffe9a64c7b in g_task_return () at /lib64/libgio-2.0.so.0
#20 0x00007fffe9acd2dd in reply_cb () at /lib64/libgio-2.0.so.0
#21 0x00007fffe9a64a7a in g_task_return_now () at /lib64/libgio-2.0.so.0
#22 0x00007fffe9a64c7b in g_task_return () at /lib64/libgio-2.0.so.0
#23 0x00007fffe9ac4c34 in g_dbus_connection_call_done () at /lib64/libgio-2.0.so.0
#24 0x00007fffe9a64a7a in g_task_return_now () at /lib64/libgio-2.0.so.0
#25 0x00007fffe9a64abd in complete_in_idle_cb () at /lib64/libgio-2.0.so.0
#26 0x00007fffe987074b in g_idle_dispatch () at /lib64/libglib-2.0.so.0
#27 0x00007fffe98744cf in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
#28 0x00007fffe98c84e8 in g_main_context_iterate.constprop () at /lib64/libglib-2.0.so.0
#29 0x00007fffe9873a93 in g_main_loop_run () at /lib64/libglib-2.0.so.0
#30 0x00007fffd947ac37 in gtk_dialog_run (dialog=0x1604460) at /usr/src/debug/gtk3-3.24.29-1.fc34.x86_64/gtk/gtkdialog.c:1398
^^^ this will call gdk_threads_leave before g_main_loop_run, (gdk_threads_enter has been called earlier, and gdk_threads_enter will be called after g_main_loop_run) ^^^
#31 0x00007fffd9bdbd96 in RunDialog::run() (this=0x9134f00) at vcl/unx/gtk3/fpicker/SalGtkPicker.cxx:199
#32 0x00007fffd9bbf23f in SalGtkFilePicker::execute() (this=0x9004690) at vcl/unx/gtk3/fpicker/SalGtkFilePicker.cxx:953
#33 0x00007ffff474741a in sfx2::FileDialogHelper_Impl::implDoExecute() (this=0x1667470) at sfx2/source/dialog/filedlghelper.cxx:1279
#14 presumably server_mount_ready_cb of gtkplacesview.c should protect its gtk
calls with gdk_threads_enter/gdk_threads_leave like enclosing_volume_mount_cb
of gtkfilesystem.c does.
Seeing as gdk_threads_leave/gdk_threads_enter is gone in gtk4 I doubt
there's any point looking for a fix in gtk3 and we should just try and
survive the problem.
Change-Id: I007be4dee4f615d4431e27034dcf7f3d446c3e9a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116559
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 08b7529f628eda1d209cf27f9bbe52ee336fef62)
---
vcl/unx/gtk3/gtk3gtkinst.cxx | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 2d4dc36ce5fe..bba4e07f3003 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -314,20 +314,34 @@ thread_local std::stack<sal_uInt32> GtkYieldMutex::yieldCounts;
void GtkYieldMutex::ThreadsEnter()
{
acquire();
- if (!yieldCounts.empty()) {
- auto n = yieldCounts.top();
- yieldCounts.pop();
- assert(n > 0);
- n--;
- if (n > 0)
- acquire(n);
+ if (yieldCounts.empty())
+ return;
+ auto n = yieldCounts.top();
+ yieldCounts.pop();
+
+ const bool bUndoingLeaveWithoutEnter = n == 0;
+ // if the ThreadsLeave bLeaveWithoutEnter of true condition occurred to
+ // create this entry then return early undoing the initial acquire of the
+ // function
+ if G_UNLIKELY(bUndoingLeaveWithoutEnter)
+ {
+ release();
+ return;
}
+
+ assert(n > 0);
+ n--;
+ if (n > 0)
+ acquire(n);
}
void GtkYieldMutex::ThreadsLeave()
{
- assert(m_nCount != 0);
+ const bool bLeaveWithoutEnter = m_nCount == 0;
+ SAL_WARN_IF(bLeaveWithoutEnter, "vcl.gtk", "gdk_threads_leave without matching gdk_threads_enter");
yieldCounts.push(m_nCount);
+ if G_UNLIKELY(bLeaveWithoutEnter) // this ideally shouldn't happen, but can due to the gtk3 file dialog
+ return;
release(true);
}
--
2.31.1

@ -0,0 +1,111 @@
From 748a9fd3a8e90e52a126190dbe0d97da6e0941ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Wed, 11 Aug 2021 20:55:14 +0100
Subject: [PATCH] make --with-idlc-cpp=cpp work for gcc cpp as a ucpp
replacement
e.g. the example of
https://bugs.launchpad.net/ubuntu/+source/libreoffice/+bug/1524638
has the same output .urd using cpp with these flags as ucpp created
Change-Id: Iadfd2deba7d365c66c3260fd6736c031987e107c
---
config_host.mk.in | 1 +
configure.ac | 14 ++++++++++++++
idlc/Executable_idlc.mk | 8 ++++++++
idlc/source/idlccompile.cxx | 8 ++++++++
4 files changed, 31 insertions(+)
diff --git a/config_host.mk.in b/config_host.mk.in
index 58ca1d1c14fb..6810660067b0 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -635,6 +635,7 @@ export SYSTEM_RHINO=@SYSTEM_RHINO@
export SYSTEM_SERF=@SYSTEM_SERF@
export SYSTEM_STAROFFICE=@SYSTEM_STAROFFICE@
export SYSTEM_UCPP=@SYSTEM_UCPP@
+export SYSTEM_UCPP_IS_GCC=@SYSTEM_UCPP_IS_GCC@
export SYSTEM_VISIO=@SYSTEM_VISIO@
export SYSTEM_WPD=@SYSTEM_WPD@
export SYSTEM_WPG=@SYSTEM_WPG@
diff --git a/configure.ac b/configure.ac
index 3d2bf7e24555..ac226fd46ace 100644
--- a/configure.ac
+++ b/configure.ac
@@ -8807,9 +8807,22 @@ dnl ===================================================================
dnl Check for C preprocessor to use
dnl ===================================================================
AC_MSG_CHECKING([which C preprocessor to use in idlc])
+SYSTEM_UCPP_IS_GCC=
if test -n "$with_idlc_cpp"; then
AC_MSG_RESULT([$with_idlc_cpp])
AC_PATH_PROG(SYSTEM_UCPP, $with_idlc_cpp)
+ AC_MSG_CHECKING([if $with_idlc_cpp is GCC CPP])
+ # ucpp will accept -v (to output version), warn about the others as unknown
+ # and return 1 (due to -v)
+ # gcc will accept -v (as verbose), --version (to output version) and -nostdinc
+ # and return 0 (due to --version ) if all options are supported
+ $SYSTEM_UCPP -v --version -nostdinc >/dev/null 2>/dev/null
+ if test $? -eq 0; then
+ SYSTEM_UCPP_IS_GCC=TRUE
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
else
AC_MSG_RESULT([ucpp])
AC_MSG_CHECKING([which ucpp tp use])
@@ -8822,6 +8835,7 @@ else
fi
fi
AC_SUBST(SYSTEM_UCPP)
+AC_SUBST(SYSTEM_UCPP_IS_GCC)
dnl ===================================================================
dnl Check for epm (not needed for Windows)
diff --git a/idlc/Executable_idlc.mk b/idlc/Executable_idlc.mk
index e194e9049c77..f2f79dcb8911 100644
--- a/idlc/Executable_idlc.mk
+++ b/idlc/Executable_idlc.mk
@@ -35,10 +35,18 @@ $(eval $(call gb_Executable_add_scanners,idlc,\
))
ifneq (,$(SYSTEM_UCPP))
+
$(eval $(call gb_Executable_add_defs,idlc,\
-DSYSTEM_UCPP \
-DUCPP=\"file://$(SYSTEM_UCPP)\" \
))
+
+ifneq ($(SYSTEM_UCPP_IS_GCC),)
+$(eval $(call gb_Executable_add_defs,idlc,\
+ -DSYSTEM_UCPP_IS_GCC \
+))
+endif
+
endif
$(eval $(call gb_Executable_add_exception_objects,idlc,\
diff --git a/idlc/source/idlccompile.cxx b/idlc/source/idlccompile.cxx
index bf3325d6821a..1902d63e0cad 100644
--- a/idlc/source/idlccompile.cxx
+++ b/idlc/source/idlccompile.cxx
@@ -237,7 +237,15 @@ sal_Int32 compileFile(const OString * pathname)
::std::vector< OUString> lCppArgs;
lCppArgs.emplace_back("-DIDL");
lCppArgs.emplace_back("-C");
+#ifdef SYSTEM_UCPP_IS_GCC
+ // -nostdinc Do not search the standard system directories for header files
+ lCppArgs.emplace_back("-nostdinc");
+ // with gcc cpp, even when not explicitly including anything, /usr/include/stdc-predef.h
+ // gets inserted without -nostdinc
+#else
+ // -zI Do not use the standard (compile-time) include path.
lCppArgs.emplace_back("-zI");
+#endif
Options* pOptions = idlc()->getOptions();
--
2.31.1

@ -0,0 +1,39 @@
From f586051919d047e2b67d32637817c3d96a898494 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Wed, 9 Jun 2021 09:13:23 +0100
Subject: [PATCH] math.desktop include "Spreadsheet" category
but it's not a spreadsheet
since...
commit dad7fe7227fb80a32d3c2c777584dc9d74b9e929
Date: Thu Jan 2 16:16:55 2014 +0100
Fix math categories to make SUSE rpm check happy
Change-Id: I0397ea12cd7f29f4b0c1f0e0ad76a3429b55c455
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116884
Tested-by: Jenkins
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
(cherry picked from commit 2df2ce1b51d13bc9e203fab1b7eb3c88c906588c)
---
sysui/desktop/menus/math.desktop | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sysui/desktop/menus/math.desktop b/sysui/desktop/menus/math.desktop
index d2391be5c234..5a8192ae4abc 100644
--- a/sysui/desktop/menus/math.desktop
+++ b/sysui/desktop/menus/math.desktop
@@ -21,7 +21,7 @@ Terminal=false
NoDisplay=false
Icon=math
Type=Application
-Categories=Office;Spreadsheet;Education;Science;Math;X-Red-Hat-Base;X-MandrivaLinux-Office-Other;
+Categories=Office;Education;Science;Math;X-Red-Hat-Base;X-MandrivaLinux-Office-Other;
Exec=${UNIXBASISROOTNAME} --math %%FILE%%
MimeType=application/vnd.oasis.opendocument.formula;application/vnd.sun.xml.math;application/vnd.oasis.opendocument.formula-template;text/mathml;application/mathml+xml;
Name=%PRODUCTNAME Math
--
2.31.1

@ -0,0 +1,26 @@
From 8b8a49e14c1010c5ab325b64fc3b65524a6a6049 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Wed, 20 Jan 2021 09:19:25 +0000
Subject: [PATCH] rhbz#1918152 fix FTBFS
Change-Id: I5c03c810d3b2572b0e58c62293add49bd7025e70
---
vcl/source/gdi/bitmap3.cxx | 2 --
1 file changed, 2 deletions(-)
diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx
index ec80b03c6008..8ea5c31bee3e 100644
--- a/vcl/source/gdi/bitmap3.cxx
+++ b/vcl/source/gdi/bitmap3.cxx
@@ -17,8 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <math.h>
-
#include <vcl/bitmapaccess.hxx>
#include <vcl/bitmapex.hxx>
#include <vcl/bitmap.hxx>
--
2.28.0

@ -0,0 +1,428 @@
From aec3e189e6e9aa1eb2fe91cbb1c46f308b074cd5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 13 Jul 2021 12:38:07 +0100
Subject: [PATCH] rhbz#1980800 allow --convert-to csv to write each sheet to a
separate file
Related: tdf#135762 except only currently implemented for command line use
sample usage:
soffice --convert-to csv:"Text - txt - csv (StarCalc)":44,34,UTF8,1,,0,false,true,false,false,false,-1 sample.ods
where the new (11th!) final token ("-1") enables writing each sheet to a
new file based on the suggested target name so output in this example
is files sample-Sheet1.csv and sample-Sheet2.csv
Only -1 for 'all sheets' vs 0 for existing 'current sheet only' (which
is always sheet 0 from the command line) are currently options but the
token could be expanded in the future to select specific sheets to
export.
Change-Id: Ib99a120f1a2c8d1008a7a3c59a6b39f572fb346e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118850
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit b8903bc106dad036acb3d117e5c4fc955697fe02)
Related: tdf#135762 Allow --convert-to csv to specify 1-based sheet number
Same multifile mechanism as for -1 all sheets is used, so
soffice --convert-to csv:"Text - txt - csv (StarCalc)":44,34,UTF8,1,,0,false,true,false,false,false,2 sample.ods
writes a file sample-Sheet2.csv
Change-Id: Ib9248c9561e4e340c88458ac5dfd159e443a4cfd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118971
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit fda91f8be16ba760e360940ebafd6244c648cb8c)
Related: tdf#135762 Suppress cout if not command line
Change-Id: I9431221aadf97739bb197871f25fa151ef4c391c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119294
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit 0cda081c9aa3b3dcb363f97bac60c845ce9a13e0)
---
desktop/source/app/dispatchwatcher.cxx | 50 +++++++--
sc/source/ui/dbgui/imoptdlg.cxx | 16 ++-
sc/source/ui/docshell/docsh.cxx | 141 +++++++++++++++++++++----
sc/source/ui/inc/docsh.hxx | 2 +-
sc/source/ui/inc/imoptdlg.hxx | 6 +-
5 files changed, 179 insertions(+), 36 deletions(-)
diff --git a/desktop/source/app/dispatchwatcher.cxx b/desktop/source/app/dispatchwatcher.cxx
index 50b92ecb7834..3df4f34ccf83 100644
--- a/desktop/source/app/dispatchwatcher.cxx
+++ b/desktop/source/app/dispatchwatcher.cxx
@@ -30,6 +30,7 @@
#include "officeipcthread.hxx"
#include <rtl/ustring.hxx>
#include <comphelper/processfactory.hxx>
+#include <comphelper/string.hxx>
#include <comphelper/synchronousdispatch.hxx>
#include <com/sun/star/io/IOException.hpp>
#include <com/sun/star/util/XCloseable.hpp>
@@ -598,6 +599,8 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest
aFilter = impl_GuessFilter( aOutFile, aDocService );
}
+ bool bMultiFileTarget = false;
+
if (aFilter.isEmpty())
{
std::cerr << "Error: no export filter" << std::endl;
@@ -605,29 +608,54 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest
else
{
sal_Int32 nFilterOptionsIndex = aFilter.indexOf(':');
- sal_Int32 nProps = ( 0 < nFilterOptionsIndex ) ? 3 : 2;
+ sal_Int32 nProps = ( 0 < nFilterOptionsIndex ) ? 4 : 3;
if ( !aImgOut.isEmpty() )
nProps +=1;
Sequence<PropertyValue> conversionProperties( nProps );
- conversionProperties[0].Name = "Overwrite";
- conversionProperties[0].Value <<= true;
+ conversionProperties[0].Name = "ConversionRequestOrigin";
+ conversionProperties[0].Value <<= OUString("CommandLine");
+ conversionProperties[1].Name = "Overwrite";
+ conversionProperties[1].Value <<= true;
- conversionProperties[1].Name = "FilterName";
+ conversionProperties[2].Name = "FilterName";
if( 0 < nFilterOptionsIndex )
{
- conversionProperties[1].Value <<= aFilter.copy(0, nFilterOptionsIndex);
+ OUString sFilterName = aFilter.copy(0, nFilterOptionsIndex);
+ OUString sFilterOptions = aFilter.copy(nFilterOptionsIndex + 1);
+
+ if (sFilterName == "Text - txt - csv (StarCalc)")
+ {
+ sal_Int32 nIdx(0);
+ // If the 11th token is '-1' then we export a file
+ // per sheet where the file name is based on the suggested
+ // output filename concatenated with the sheet name, so adjust
+ // the output and overwrite messages
+ // If the 11th token is not present or numeric 0 then the
+ // default sheet is exported with the output filename. If it
+ // is numeric >0 then that sheet (1-based) with the output
+ // filename concatenated with the sheet name. So even if
+ // that is a single file, the multi file target mechanism is
+ // used.
+ const OUString aTok(sFilterOptions.getToken(11, ',', nIdx));
+ // Actual validity is checked in Calc, here just check for
+ // presence of numeric value at start.
+ bMultiFileTarget = (!aTok.isEmpty() && aTok.toInt32() != 0);
+ }
+
+ conversionProperties[2].Value <<= sFilterName;
- conversionProperties[2].Name = "FilterOptions";
- conversionProperties[2].Value <<= aFilter.copy(nFilterOptionsIndex + 1);
+ conversionProperties[3].Name = "FilterOptions";
+ conversionProperties[3].Value <<= sFilterOptions;
}
else
{
- conversionProperties[1].Value <<= aFilter;
+ conversionProperties[2].Value <<= aFilter;
}
if ( !aImgOut.isEmpty() )
{
+ assert(conversionProperties[nProps-1].Name.isEmpty());
conversionProperties[nProps-1].Name = "ImageFilter";
conversionProperties[nProps-1].Value <<= aImgOut;
}
@@ -639,9 +667,11 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest
OString aTargetURL8 = OUStringToOString(aTempName, osl_getThreadTextEncoding());
if (aDispatchRequest.aRequestType != REQUEST_CAT)
{
- std::cout << "convert " << aSource8 << " -> " << aTargetURL8;
+ std::cout << "convert " << aSource8;
+ if (!bMultiFileTarget)
+ std::cout << " -> " << aTargetURL8;
std::cout << " using filter : " << OUStringToOString(aFilter, osl_getThreadTextEncoding()) << std::endl;
- if (FStatHelper::IsDocument(aOutFile))
+ if (!bMultiFileTarget && FStatHelper::IsDocument(aOutFile))
std::cout << "Overwriting: " << OUStringToOString(aTempName, osl_getThreadTextEncoding()) << std::endl ;
}
try
diff --git a/sc/source/ui/dbgui/imoptdlg.cxx b/sc/source/ui/dbgui/imoptdlg.cxx
index 071f1b0257bc..a362e4df0ee7 100644
--- a/sc/source/ui/dbgui/imoptdlg.cxx
+++ b/sc/source/ui/dbgui/imoptdlg.cxx
@@ -20,6 +20,7 @@
#include <imoptdlg.hxx>
#include <asciiopt.hxx>
#include <comphelper/string.hxx>
+#include <unotools/charclass.hxx>
#include <osl/thread.h>
#include <global.hxx>
@@ -43,6 +44,7 @@ ScImportOptions::ScImportOptions( const OUString& rStr )
bSaveNumberAsSuch = true;
bSaveFormulas = false;
bRemoveSpace = false;
+ nSheetToExport = 0;
sal_Int32 nTokenCount = comphelper::string::getTokenCount(rStr, ',');
if ( nTokenCount < 3 )
return;
@@ -77,6 +79,16 @@ ScImportOptions::ScImportOptions( const OUString& rStr )
bSaveFormulas = rStr.getToken(0, ',', nIdx) == "true";
if ( nTokenCount >= 11 )
bRemoveSpace = rStr.getToken(0, ',', nIdx) == "true";
+ if ( nTokenCount >= 12 )
+ {
+ const OUString aTok(rStr.getToken(0, ',', nIdx));
+ if (aTok == "-1")
+ nSheetToExport = -1; // all
+ else if (aTok.isEmpty() || CharClass::isAsciiNumeric(aTok))
+ nSheetToExport = aTok.toInt32();
+ else
+ nSheetToExport = -23; // invalid, force error
+ }
}
}
@@ -99,7 +111,9 @@ OUString ScImportOptions::BuildString() const
"," +
OUString::boolean( bSaveFormulas ) + // "save formulas": not in ScAsciiOptions
"," +
- OUString::boolean( bRemoveSpace ); // same as "Remove space" in ScAsciiOptions
+ OUString::boolean( bRemoveSpace ) + // same as "Remove space" in ScAsciiOptions
+ "," +
+ OUString::number(nSheetToExport) ; // Only available for command line --convert-to
return aResult;
}
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 91020db0b2e0..5fdfddd0c89b 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -44,6 +44,7 @@
#include <sfx2/objface.hxx>
#include <sfx2/viewfrm.hxx>
#include <svl/documentlockfile.hxx>
+#include <svl/fstathelper.hxx>
#include <svl/sharecontrolfile.hxx>
#include <svl/urihelper.hxx>
#include <osl/file.hxx>
@@ -119,6 +120,7 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/string.hxx>
#include <unotools/configmgr.hxx>
+#include <unotools/ucbstreamhelper.hxx>
#include <uiitems.hxx>
#include <dpobject.hxx>
#include <markdata.hxx>
@@ -1925,7 +1927,7 @@ void escapeTextSep(sal_Int32 nPos, const StrT& rStrDelim, StrT& rStr)
}
-void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt )
+void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt, SCTAB nTab )
{
sal_Unicode cDelim = rAsciiOpt.nFieldSepCode;
sal_Unicode cStrDelim = rAsciiOpt.nTextSepCode;
@@ -1971,7 +1973,6 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt
SCCOL nStartCol = 0;
SCROW nStartRow = 0;
- SCTAB nTab = GetSaveTab();
SCCOL nEndCol;
SCROW nEndRow;
m_aDocument.GetCellArea( nTab, nEndCol, nEndRow );
@@ -2389,35 +2390,129 @@ bool ScDocShell::ConvertTo( SfxMedium &rMed )
}
else if (aFltName == pFilterAscii)
{
- SvStream* pStream = rMed.GetOutStream();
- if (pStream)
+ OUString sItStr;
+ SfxItemSet* pSet = rMed.GetItemSet();
+ const SfxPoolItem* pItem;
+ if ( pSet && SfxItemState::SET ==
+ pSet->GetItemState( SID_FILE_FILTEROPTIONS, true, &pItem ) )
{
- OUString sItStr;
- SfxItemSet* pSet = rMed.GetItemSet();
- const SfxPoolItem* pItem;
- if ( pSet && SfxItemState::SET ==
- pSet->GetItemState( SID_FILE_FILTEROPTIONS, true, &pItem ) )
+ sItStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
+ }
+
+ if ( sItStr.isEmpty() )
+ {
+ // default for ascii export (from API without options):
+ // ISO8859-1/MS_1252 encoding, comma, double quotes
+
+ ScImportOptions aDefOptions( ',', '"', RTL_TEXTENCODING_MS_1252 );
+ sItStr = aDefOptions.BuildString();
+ }
+
+ weld::WaitObject aWait( GetActiveDialogParent() );
+ ScImportOptions aOptions( sItStr );
+
+ if (aOptions.nSheetToExport)
+ {
+ // Only from command line --convert-to
+ bRet = true;
+
+ // Verbose only from command line, not UI (in case we actually
+ // implement that) nor macro filter options.
+ bool bVerbose = false;
+ const css::uno::Sequence<css::beans::PropertyValue> & rArgs = rMed.GetArgs();
+ const auto pProp = std::find_if( rArgs.begin(), rArgs.end(),
+ [](const css::beans::PropertyValue& rProp) { return rProp.Name == "ConversionRequestOrigin"; });
+ if (pProp != rArgs.end())
{
- sItStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
+ OUString aOrigin;
+ pProp->Value >>= aOrigin;
+ bVerbose = (aOrigin == "CommandLine");
}
- if ( sItStr.isEmpty() )
+ SCTAB nStartTab;
+ SCTAB nCount = m_aDocument.GetTableCount();
+ if (aOptions.nSheetToExport == -1)
{
- // default for ascii export (from API without options):
- // ISO8859-1/MS_1252 encoding, comma, double quotes
-
- ScImportOptions aDefOptions( ',', '"', RTL_TEXTENCODING_MS_1252 );
- sItStr = aDefOptions.BuildString();
+ // All sheets.
+ nStartTab = 0;
+ }
+ else if (0 < aOptions.nSheetToExport && aOptions.nSheetToExport <= nCount)
+ {
+ // One sheet, 1-based.
+ nCount = aOptions.nSheetToExport;
+ nStartTab = nCount - 1;
+ }
+ else
+ {
+ // Usage error, no export but log.
+ if (bVerbose)
+ {
+ if (aOptions.nSheetToExport < 0)
+ std::cout << "Bad sheet number string given." << std::endl;
+ else
+ std::cout << "No sheet number " << aOptions.nSheetToExport
+ << ", number of sheets is " << nCount << std::endl;
+ }
+ nStartTab = 0;
+ nCount = 0;
+ SetError(SCERR_EXPORT_DATA);
+ bRet = false;
}
- weld::WaitObject aWait( GetActiveDialogParent() );
- ScImportOptions aOptions( sItStr );
- AsciiSave( *pStream, aOptions );
- bRet = true;
+ INetURLObject aURLObject(rMed.GetURLObject());
+ OUString sExt = aURLObject.CutExtension();
+ OUString sBaseName = aURLObject.GetLastName();
+ aURLObject.CutLastName();
- if (m_aDocument.GetTableCount() > 1)
- if (!rMed.GetError())
- rMed.SetError(SCWARN_EXPORT_ASCII);
+ for (SCTAB i = nStartTab; i < nCount; ++i)
+ {
+ OUString sTabName;
+ if (!m_aDocument.GetName(i, sTabName))
+ sTabName = OUString::number(i);
+ INetURLObject aSheetURLObject(aURLObject);
+ OUString sFileName = sBaseName + "-" + sTabName;
+ if (!sExt.isEmpty())
+ sFileName = sFileName + "." + sExt;
+ aSheetURLObject.Append(sFileName);
+
+ // log similar to DispatchWatcher::executeDispatchRequests
+ OUString aOutFile = aSheetURLObject.GetMainURL(INetURLObject::DecodeMechanism::NONE);
+ if (bVerbose)
+ {
+ OUString aDisplayedName;
+ if (osl::FileBase::E_None != osl::FileBase::getSystemPathFromFileURL(aOutFile, aDisplayedName))
+ aDisplayedName = aOutFile;
+ std::cout << "Writing sheet " << OUStringToOString(sTabName, osl_getThreadTextEncoding()) << " -> "
+ << OUStringToOString(aDisplayedName, osl_getThreadTextEncoding())
+ << std::endl;
+
+ if (FStatHelper::IsDocument(aOutFile))
+ std::cout << "Overwriting: " << OUStringToOString(aDisplayedName, osl_getThreadTextEncoding())
+ << std::endl ;
+ }
+
+ std::unique_ptr<SvStream> xStm = ::utl::UcbStreamHelper::CreateStream(aOutFile, StreamMode::TRUNC | StreamMode::WRITE);
+ if (!xStm)
+ {
+ SetError(ERRCODE_IO_CANTCREATE);
+ bRet = false;
+ break;
+ }
+ AsciiSave(*xStm, aOptions, i);
+ }
+ }
+ else
+ {
+ SvStream* pStream = rMed.GetOutStream();
+ if (pStream)
+ {
+ AsciiSave(*pStream, aOptions, GetSaveTab());
+ bRet = true;
+
+ if (m_aDocument.GetTableCount() > 1)
+ if (!rMed.GetError())
+ rMed.SetError(SCWARN_EXPORT_ASCII);
+ }
}
}
else if (aFltName == pFilterDBase)
diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx
index 41c0b30a42a8..3aa5f6caf311 100644
--- a/sc/source/ui/inc/docsh.hxx
+++ b/sc/source/ui/inc/docsh.hxx
@@ -227,7 +227,7 @@ public:
ScDrawLayer* MakeDrawLayer();
- void AsciiSave( SvStream& rStream, const ScImportOptions& rOpt );
+ void AsciiSave( SvStream& rStream, const ScImportOptions& rOpt, SCTAB nTab );
void Execute( SfxRequest& rReq );
void GetState( SfxItemSet &rSet );
diff --git a/sc/source/ui/inc/imoptdlg.hxx b/sc/source/ui/inc/imoptdlg.hxx
index bac941c2a377..382067d67813 100644
--- a/sc/source/ui/inc/imoptdlg.hxx
+++ b/sc/source/ui/inc/imoptdlg.hxx
@@ -32,7 +32,8 @@ public:
ScImportOptions( sal_Unicode nFieldSep, sal_Unicode nTextSep, rtl_TextEncoding nEnc )
: nFieldSepCode(nFieldSep), nTextSepCode(nTextSep),
bFixedWidth(false), bSaveAsShown(false), bQuoteAllText(false),
- bSaveNumberAsSuch(true), bSaveFormulas(false), bRemoveSpace(false)
+ bSaveNumberAsSuch(true), bSaveFormulas(false), bRemoveSpace(false),
+ nSheetToExport(0)
{ SetTextEncoding( nEnc ); }
ScImportOptions& operator=( const ScImportOptions& rCpy ) = default;
@@ -51,6 +52,9 @@ public:
bool bSaveNumberAsSuch;
bool bSaveFormulas;
bool bRemoveSpace;
+ // "0" for 'current sheet', "-1" for all sheets (each to a separate file),
+ // or 1-based specific sheet number (to a separate file).
+ sal_Int32 nSheetToExport;
};
#endif // INCLUDED_SC_SOURCE_UI_INC_IMOPTDLG_HXX
--
2.31.1

@ -0,0 +1,91 @@
From afc69ae524da5f8fad53d30e5c9ebaa458679732 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 11 Apr 2023 10:13:37 +0100
Subject: [PATCH 1/3] set Referer on loading IFrames
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
so tools, options, security, options,
"block any links from document not..."
applies to their contents.
Change-Id: I04839aea6b07a4a76ac147a85045939ccd9c3c79
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150221
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150751
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit acff9ca0579333b45d10ae5f8cd48172f563dddd)
(cherry picked from commit 04c8176fb40d2eb983aa0bd0a6ce65804d3f6ecd)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152112
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 4e2a04f66eabd2132f9c801c060828adcd20ca1a)
Conflicts:
sfx2/source/doc/iframe.cxx
---
sfx2/source/doc/iframe.cxx | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx
index 3f9036a79b04..b9495b8fd311 100644
--- a/sfx2/source/doc/iframe.cxx
+++ b/sfx2/source/doc/iframe.cxx
@@ -33,10 +33,12 @@
#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
#include <com/sun/star/embed/XEmbeddedObject.hpp>
+#include <comphelper/propertyvalue.hxx>
#include <cppuhelper/implbase.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <officecfg/Office/Common.hxx>
#include <svl/itemprop.hxx>
+#include <sfx2/docfile.hxx>
#include <sfx2/frmdescr.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/sfxdlg.hxx>
@@ -164,14 +166,19 @@ sal_Bool SAL_CALL IFrameObject::load(
uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) );
xTrans->parseStrict( aTargetURL );
+ uno::Reference<frame::XFramesSupplier> xParentFrame = xFrame->getCreator();
+ SfxObjectShell* pDoc = SfxMacroLoader::GetObjectShell(xParentFrame);
+
if (INetURLObject(aTargetURL.Complete).GetProtocol() == INetProtocol::Macro)
{
- uno::Reference<frame::XFramesSupplier> xParentFrame = xFrame->getCreator();
- SfxObjectShell* pDoc = SfxMacroLoader::GetObjectShell(xParentFrame);
if (pDoc && !pDoc->AdjustMacroMode())
return false;
}
+ OUString sReferer;
+ if (pDoc && pDoc->HasName())
+ sReferer = pDoc->GetMedium()->GetName();
+
DBG_ASSERT( !mxFrame.is(), "Frame already existing!" );
VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow( xFrame->getContainerWindow() );
VclPtr<IFrameWindow_Impl> pWin = VclPtr<IFrameWindow_Impl>::Create( pParent, maFrmDescr.IsFrameBorderOn() );
@@ -194,12 +201,11 @@ sal_Bool SAL_CALL IFrameObject::load(
if ( xFramesSupplier.is() )
mxFrame->setCreator( xFramesSupplier );
- uno::Sequence < beans::PropertyValue > aProps(2);
- aProps[0].Name = "PluginMode";
- aProps[0].Value <<= sal_Int16(2);
- aProps[1].Name = "ReadOnly";
- aProps[1].Value <<= true;
-
+ uno::Sequence < beans::PropertyValue > aProps{
+ comphelper::makePropertyValue("PluginMode", sal_Int16(2)),
+ comphelper::makePropertyValue("ReadOnly", true),
+ comphelper::makePropertyValue("Referer", sReferer)
+ };
uno::Reference < frame::XDispatch > xDisp = mxFrame->queryDispatch( aTargetURL, "_self", 0 );
if ( xDisp.is() )
xDisp->dispatch( aTargetURL, aProps );
--
2.41.0

@ -0,0 +1,72 @@
From bced744fea67d50242701ed55271d40e803ac14e Mon Sep 17 00:00:00 2001
From: Michael Stahl <michael.stahl@allotropia.de>
Date: Mon, 15 Nov 2021 17:29:59 +0100
Subject: [PATCH] tdf#121546 sw: don't use undo array's m_pOutlineNodes
It's pointless.
Change-Id: I304c123bffc16e6133d2953bc9a4f7a3afad14ef
---
sw/source/core/docnode/ndnum.cxx | 2 ++
sw/source/core/docnode/nodes.cxx | 18 ++++++++++++------
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/sw/source/core/docnode/ndnum.cxx b/sw/source/core/docnode/ndnum.cxx
index b3d66affa66e..a7b898ee5f0a 100644
--- a/sw/source/core/docnode/ndnum.cxx
+++ b/sw/source/core/docnode/ndnum.cxx
@@ -38,6 +38,8 @@ bool SwOutlineNodes::Seek_Entry(SwNode* rP, size_type* pnPos) const
void SwNodes::UpdateOutlineNode(SwNode & rNd)
{
+ assert(IsDocNodes()); // no point in m_pOutlineNodes for undo nodes
+
SwTextNode * pTextNd = rNd.GetTextNode();
if (!(pTextNd && pTextNd->IsOutlineStateChanged()))
diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx
index a7a2078b2091..ab3eb62ac9f2 100644
--- a/sw/source/core/docnode/nodes.cxx
+++ b/sw/source/core/docnode/nodes.cxx
@@ -109,6 +109,16 @@ SwNodes::~SwNodes()
m_pEndOfContent.reset();
}
+static bool IsInsertOutline(SwNodes const& rNodes, sal_uLong const nIndex)
+{
+ if (!rNodes.IsDocNodes())
+ {
+ return false;
+ }
+ return nIndex < rNodes.GetEndOfRedlines().StartOfSectionNode()->GetIndex()
+ || rNodes.GetEndOfRedlines().GetIndex() < nIndex;
+}
+
void SwNodes::ChgNode( SwNodeIndex const & rDelPos, sal_uLong nSz,
SwNodeIndex& rInsPos, bool bNewFrames )
{
@@ -124,9 +134,7 @@ void SwNodes::ChgNode( SwNodeIndex const & rDelPos, sal_uLong nSz,
// NEVER include nodes from the RedLineArea
sal_uLong nNd = rInsPos.GetIndex();
- bool bInsOutlineIdx = (
- rNds.GetEndOfRedlines().StartOfSectionNode()->GetIndex() >= nNd ||
- nNd >= rNds.GetEndOfRedlines().GetIndex() );
+ bool const bInsOutlineIdx = IsInsertOutline(rNds, nNd);
if( &rNds == this ) // if in the same node array -> move
{
@@ -478,9 +486,7 @@ bool SwNodes::MoveNodes( const SwNodeRange& aRange, SwNodes & rNodes,
// NEVER include nodes from the RedLineArea
sal_uLong nNd = aIdx.GetIndex();
- bool bInsOutlineIdx = ( rNodes.GetEndOfRedlines().
- StartOfSectionNode()->GetIndex() >= nNd ||
- nNd >= rNodes.GetEndOfRedlines().GetIndex() );
+ bool const bInsOutlineIdx = IsInsertOutline(rNodes, nNd);
if( bNewFrames )
// delete all frames
--
2.33.1

@ -0,0 +1,183 @@
From 780c42cdd8006dc60e281be2fe6566f101e909bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 21 Mar 2022 20:58:34 +0000
Subject: [PATCH 2/5] CVE-2022-26307 make hash encoding match decoding
Seeing as old versions of the hash may be in the users config, add a
StorageVersion field to the office config Passwords section which
defaults to 0 to indicate the old hash is in use.
Try the old varient when StorageVersion is 0. When a new encoded master
password it set write StorageVersion of 1 to indicate a new hash is in
use and use the new style when StorageVersion is 1.
Change-Id: I3174c37a5891bfc849984e0ec5c2c392b9c6e7b1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132080
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit e890f54dbac57f3ab5acf4fbd31222095d3e8ab6)
---
.../schema/org/openoffice/Office/Common.xcs | 6 +++
.../passwordcontainer/passwordcontainer.cxx | 45 +++++++++++++++++--
.../passwordcontainer/passwordcontainer.hxx | 6 +++
uui/source/iahndl-authentication.cxx | 5 ++-
4 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 9097c23c3c6a..922efc33cca7 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -942,6 +942,12 @@
</info>
<value>false</value>
</prop>
+ <prop oor:name="StorageVersion" oor:type="xs:int" oor:nillable="false">
+ <info>
+ <desc>Specifies what version of encoding scheme the password container uses.</desc>
+ </info>
+ <value>0</value>
+ </prop>
<prop oor:name="HasMaster" oor:type="xs:boolean" oor:nillable="false">
<info>
<desc>Specifies if there is a valid master password.</desc>
diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx b/svl/source/passwordcontainer/passwordcontainer.cxx
index 51fb129cddb1..b674844f91d3 100644
--- a/svl/source/passwordcontainer/passwordcontainer.cxx
+++ b/svl/source/passwordcontainer/passwordcontainer.cxx
@@ -17,7 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-
#include "passwordcontainer.hxx"
#include <cppuhelper/factory.hxx>
@@ -259,6 +258,23 @@ bool StorageItem::useStorage()
return aResult;
}
+sal_Int32 StorageItem::getStorageVersion()
+{
+ Sequence<OUString> aNodeNames { "StorageVersion" };
+
+ Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aNodeNames );
+
+ if( aPropertyValues.getLength() != aNodeNames.getLength() )
+ {
+ OSL_FAIL( "Problems during reading" );
+ return 0;
+ }
+
+ sal_Int32 nResult = 0;
+ aPropertyValues[0] >>= nResult;
+
+ return nResult;
+}
bool StorageItem::getEncodedMP( OUString& aResult )
{
@@ -291,15 +307,17 @@ bool StorageItem::getEncodedMP( OUString& aResult )
void StorageItem::setEncodedMP( const OUString& aEncoded, bool bAcceptEmpty )
{
- Sequence< OUString > sendNames(2);
- Sequence< uno::Any > sendVals(2);
+ Sequence< OUString > sendNames(3);
+ Sequence< uno::Any > sendVals(3);
sendNames[0] = "HasMaster";
sendNames[1] = "Master";
+ sendNames[2] = "StorageVersion";
bool bHasMaster = ( !aEncoded.isEmpty() || bAcceptEmpty );
sendVals[0] <<= bHasMaster;
sendVals[1] <<= aEncoded;
+ sendVals[2] <<= nCurrentStorageVersion;
ConfigItem::SetModified();
ConfigItem::PutProperties( sendNames, sendVals );
@@ -800,6 +818,18 @@ OUString PasswordContainer::RequestPasswordFromUser( PasswordRequestMode aRMode,
return aResult;
}
+// Mangle the key to match an old bug
+static OUString ReencodeAsOldHash(const OUString& rPass)
+{
+ OUStringBuffer aBuffer;
+ for (int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ++ind)
+ {
+ unsigned char i = static_cast<char>(rPass.copy(ind * 2, 2).toUInt32(16));
+ aBuffer.append(static_cast< sal_Unicode >('a' + (i >> 4)));
+ aBuffer.append(static_cast< sal_Unicode >('a' + (i & 15)));
+ }
+ return aBuffer.makeStringAndClear();
+}
OUString const & PasswordContainer::GetMasterPassword( const Reference< XInteractionHandler >& aHandler )
{
@@ -838,6 +868,9 @@ OUString const & PasswordContainer::GetMasterPassword( const Reference< XInterac
}
else
{
+ if (m_pStorageFile->getStorageVersion() == 0)
+ aPass = ReencodeAsOldHash(aPass);
+
std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aPass, aRMode ) );
if( aRM.empty() || aPass != aRM[0] )
{
@@ -1042,6 +1075,12 @@ sal_Bool SAL_CALL PasswordContainer::authorizateWithMasterPassword( const uno::R
do {
aPass = RequestPasswordFromUser( aRMode, xTmpHandler );
+
+ if (!aPass.isEmpty() && m_pStorageFile->getStorageVersion() == 0)
+ {
+ aPass = ReencodeAsOldHash(aPass);
+ }
+
bResult = ( !aPass.isEmpty() && aPass == m_aMasterPasswd );
aRMode = PasswordRequestMode_PASSWORD_REENTER; // further questions with error notification
} while( !bResult && !aPass.isEmpty() );
diff --git a/svl/source/passwordcontainer/passwordcontainer.hxx b/svl/source/passwordcontainer/passwordcontainer.hxx
index 46ffec888602..bf43b5903602 100644
--- a/svl/source/passwordcontainer/passwordcontainer.hxx
+++ b/svl/source/passwordcontainer/passwordcontainer.hxx
@@ -168,6 +168,10 @@ public:
typedef ::std::pair< const OUString, ::std::vector< NamePassRecord > > PairUrlRecord;
typedef ::std::map< OUString, ::std::vector< NamePassRecord > > PassMap;
+// org.openoffice.Office.Common/Passwords/StorageVersion bump if details of
+// how password details are saved changes. Enables migration from previous
+// schemes.
+constexpr sal_Int32 nCurrentStorageVersion = 1;
class PasswordContainer;
@@ -196,6 +200,8 @@ public:
void remove( const OUString& url, const OUString& rec );
void clear();
+ sal_Int32 getStorageVersion();
+
bool getEncodedMP( OUString& aResult );
void setEncodedMP( const OUString& aResult, bool bAcceptEmpty = false );
void setUseStorage( bool bUse );
diff --git a/uui/source/iahndl-authentication.cxx b/uui/source/iahndl-authentication.cxx
index ad975d3f9ae7..951f0b8a1c6b 100644
--- a/uui/source/iahndl-authentication.cxx
+++ b/uui/source/iahndl-authentication.cxx
@@ -436,8 +436,9 @@ executeMasterPasswordDialog(
OUStringBuffer aBuffer;
for (sal_uInt8 i : aKey)
{
- aBuffer.append(static_cast< sal_Unicode >('a' + (i >> 4)));
- aBuffer.append(static_cast< sal_Unicode >('a' + (i & 15)));
+ // match PasswordContainer::DecodePasswords aMasterPasswd.copy(index * 2, 2).toUInt32(16));
+ aBuffer.append(OUString::number(i >> 4, 16));
+ aBuffer.append(OUString::number(i & 15, 16));
}
rInfo.SetPassword(aBuffer.makeStringAndClear());
}
--
2.37.3

@ -0,0 +1,100 @@
From 82752ccba78ecdbf94908377ec022f68ba7d9d59 Mon Sep 17 00:00:00 2001
Message-ID: <82752ccba78ecdbf94908377ec022f68ba7d9d59.1703086328.git.erack@redhat.com>
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolan.mcnamara@collabora.com>
Date: Sat, 4 Nov 2023 19:57:51 +0000
Subject: [PATCH 1/4] warn about exotic protocols as well
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: I50dcf4f36cd20d75f5ad3876353143268740a50f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151834
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 1305f70cff8a81a58a5a6d9c96c5bb032005389e)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159034
Reviewed-by: Eike Rathke <erack@redhat.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159881
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159911
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
erAck: backported to 7.1.8.1
---
sw/source/filter/html/htmlplug.cxx | 2 +-
sw/source/filter/xml/xmltexti.cxx | 2 +-
tools/source/fsys/urlobj.cxx | 3 ++-
xmloff/source/draw/ximpshap.cxx | 2 +-
4 files changed, 5 insertions(+), 4 deletions(-)
--------------erAck-patch-parts
Content-Type: text/x-patch; name="0001-warn-about-exotic-protocols-as-well.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-warn-about-exotic-protocols-as-well.patch"
diff --git a/sw/source/filter/html/htmlplug.cxx b/sw/source/filter/html/htmlplug.cxx
index 1aec184d8a6c..1c1f5f49f13e 100644
--- a/sw/source/filter/html/htmlplug.cxx
+++ b/sw/source/filter/html/htmlplug.cxx
@@ -1092,7 +1092,7 @@ void SwHTMLParser::InsertFloatingFrame()
OUString sHRef = aFrameDesc.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE );
- if (INetURLObject(sHRef).GetProtocol() == INetProtocol::Macro)
+ if (INetURLObject(sHRef).IsExoticProtocol())
NotifyMacroEventRead();
xSet->setPropertyValue("FrameURL", uno::makeAny( sHRef ) );
diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx
index 7ec4616f76dd..4bbed6bb8ff8 100644
--- a/sw/source/filter/xml/xmltexti.cxx
+++ b/sw/source/filter/xml/xmltexti.cxx
@@ -860,7 +860,7 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertFloatingFra
OUString sHRef = URIHelper::SmartRel2Abs(
INetURLObject( GetXMLImport().GetBaseURL() ), rHRef );
- if (INetURLObject(sHRef).GetProtocol() == INetProtocol::Macro)
+ if (INetURLObject(sHRef).IsExoticProtocol())
GetXMLImport().NotifyMacroEventRead();
xSet->setPropertyValue("FrameURL",
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx
index 2a9f7bc3d7dc..36a8af31a0fb 100644
--- a/tools/source/fsys/urlobj.cxx
+++ b/tools/source/fsys/urlobj.cxx
@@ -4767,7 +4767,8 @@ bool INetURLObject::IsExoticProtocol() const
return m_eScheme == INetProtocol::Slot ||
m_eScheme == INetProtocol::Macro ||
m_eScheme == INetProtocol::Uno ||
- isSchemeEqualTo(u"vnd.sun.star.script");
+ isSchemeEqualTo(u"vnd.sun.star.script") ||
+ isSchemeEqualTo(u"service");
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx
index 113f3a3ffc2a..263b4b937608 100644
--- a/xmloff/source/draw/ximpshap.cxx
+++ b/xmloff/source/draw/ximpshap.cxx
@@ -3257,7 +3257,7 @@ void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< cs
if( !maHref.isEmpty() )
{
- if (INetURLObject(maHref).GetProtocol() == INetProtocol::Macro)
+ if (INetURLObject(maHref).IsExoticProtocol())
GetImport().NotifyMacroEventRead();
xProps->setPropertyValue("FrameURL", Any(maHref) );
--------------erAck-patch-parts--

@ -0,0 +1,72 @@
From 94b5b99c96ad80e659ffa8dbe8045b65ab4cc791 Mon Sep 17 00:00:00 2001
From: Eike Rathke <erack@redhat.com>
Date: Fri, 17 Feb 2023 12:03:54 +0100
Subject: [PATCH 2/3] Stack check safety belt before fishing in muddy waters
Have it hit hard in debug builds.
Change-Id: I9ea54844a0661fd7a75616a2876983a74b2d5bad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147205
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit 9d91fbba6f374fa1c10b38eae003da89bd4e6d4b)
---
sc/source/core/inc/interpre.hxx | 12 ++++++++++++
sc/source/core/tool/interpr1.cxx | 4 ++--
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 4e986daf8453..3bcc9ef19fc2 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -235,6 +235,7 @@ private:
inline bool MustHaveParamCount( short nAct, short nMust );
inline bool MustHaveParamCount( short nAct, short nMust, short nMax );
inline bool MustHaveParamCountMin( short nAct, short nMin );
+ inline bool MustHaveParamCountMinWithStackCheck( short nAct, short nMin );
void PushParameterExpected();
void PushIllegalParameter();
void PushIllegalArgument();
@@ -1089,6 +1090,17 @@ inline bool ScInterpreter::MustHaveParamCountMin( short nAct, short nMin )
return false;
}
+inline bool ScInterpreter::MustHaveParamCountMinWithStackCheck( short nAct, short nMin )
+{
+ assert(sp >= nAct);
+ if (sp < nAct)
+ {
+ PushParameterExpected();
+ return false;
+ }
+ return MustHaveParamCountMin( nAct, nMin);
+}
+
inline bool ScInterpreter::CheckStringPositionArgument( double & fVal )
{
if (!std::isfinite( fVal))
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 4f2789160a1c..5e2f36685024 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -7547,7 +7547,7 @@ void ScInterpreter::ScVLookup()
void ScInterpreter::ScSubTotal()
{
sal_uInt8 nParamCount = GetByte();
- if ( !MustHaveParamCountMin( nParamCount, 2 ) )
+ if ( !MustHaveParamCountMinWithStackCheck( nParamCount, 2 ) )
return;
// We must fish the 1st parameter deep from the stack! And push it on top.
@@ -7594,7 +7594,7 @@ void ScInterpreter::ScSubTotal()
void ScInterpreter::ScAggregate()
{
sal_uInt8 nParamCount = GetByte();
- if ( !MustHaveParamCountMin( nParamCount, 3 ) )
+ if ( !MustHaveParamCountMinWithStackCheck( nParamCount, 3 ) )
return;
const FormulaError nErr = nGlobalError;
--
2.41.0

@ -0,0 +1,896 @@
From ed22ee21fdeaef43d82c4a18c5274e42fe85bd35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Thu, 13 Apr 2023 11:31:17 +0100
Subject: [PATCH 2/3] put floating frames under managed links control
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
like we do for sections and ole objects that link to their content
individual commits in trunk are:
extract a OCommonEmbeddedObject::SetInplaceActiveState for reuse
no behaviour change intended
Change-Id: Ia1d12aa5c9afdc1347f6d4364bc6a0b7f41ee168
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150341
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 183e34a3f8c429c0698951e24c17844e416a3825)
use parent window as dialog parent
it makes no odds, but is more convenient for upcoming modification
Change-Id: Ibc5333b137d2da089b3b701ff615c6ddf43063d0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150342
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit f93edf343658abd489bde3639d2ffaefd50c0f99)
adjust IFrameObject so it could reuse mxFrame for a reload of content
Change-Id: I7eec3132a23faafd9a2878215a0a117a67bc9bf2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150343
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 3a727d26fd9eb6fa140bc3f5cadf3db079d42206)
query getUserAllowsLinkUpdate for the case of content in a floating frame
similarly to how it works for the more common "normal" embedded objects
Change-Id: I83e38dfa2f84907c2de9680e91f779d34864a9ad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149971
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 52aa46468531918eabfa2031dedf50377ae72cf7)
add a route to get writer Floating Frame links under 'manage links'
Change-Id: If90ff71d6a96342574799312f764badaf97980eb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150349
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 8b8a2844addbd262befb1a2d193dfb590dfa20be)
allow SvxOle2Shape::resetModifiedState to survive having no SdrObject
Change-Id: Iea059262c124e3f44249e49b4189732310d28156
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150538
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 02379929bd0e1d1676635f0ca1920422702ebb7c)
create the FloatingFrameShape in a separate step to inserting it
this is derived from the path taken by the AddShape(const OUString&)
function for this case. No change in behavior is intended.
Change-Id: Id09ae0c65a55a37743ad7c184070fb8dd97d8a7f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150526
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit bafec47847a0b9697b3bbe9358e53f8118af3024)
add a route to get calc Floating Frame links under 'manage links'
much harder than writer because the organization and ordering
of properties and object activation etc is different.
This ended up ugly, but functions.
We set FrameURL before AddShape, we have to do it again later because it
gets cleared when the SdrOle2Obj is attached to the XShape. But we want
FrameURL to exist when AddShape triggers SetPersistName which itself
triggers SdrOle2Obj::CheckFileLink_Impl and at that point we want to
know what URL will end up being used. So bodge this by setting FrameURL
to the temp pre-SdrOle2Obj attached properties and we can smuggle it
eventually into SdrOle2Obj::SetPersistName at the right point after
PersistName is set but before SdrOle2Obj::CheckFileLink_Impl is called
in order to inform the link manager that this is an IFrame that links to
a URL
Change-Id: I67fc199fef9e67fa12ca7873f0fe12137aa16d8f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150539
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 07179a5a5bd00f34acfa8a3f260dd834ae003c63)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150755
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152144
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit e3d1c8f1ad871d664886319a47bee161e673de6c)
---
.../source/commonembedding/embedobj.cxx | 60 +++++-----
.../source/commonembedding/specialobject.cxx | 9 ++
embeddedobj/source/inc/commonembobj.hxx | 3 +
embeddedobj/source/inc/specialobject.hxx | 6 +
include/svx/svdoole2.hxx | 17 ++-
include/svx/unoshape.hxx | 2 +
sc/source/ui/docshell/documentlinkmgr.cxx | 9 +-
sfx2/source/doc/iframe.cxx | 55 +++++----
svx/source/svdraw/svdoole2.cxx | 104 +++++++++++++++---
svx/source/unodraw/shapeimpl.hxx | 5 +
svx/source/unodraw/unoshap4.cxx | 23 +++-
sw/inc/ndole.hxx | 4 +-
sw/source/core/ole/ndole.cxx | 89 +++++++++++++--
xmloff/source/draw/ximpshap.cxx | 29 ++++-
xmloff/source/draw/ximpshap.hxx | 2 +
15 files changed, 331 insertions(+), 86 deletions(-)
diff --git a/embeddedobj/source/commonembedding/embedobj.cxx b/embeddedobj/source/commonembedding/embedobj.cxx
index ffa2a0789be0..3bd8d84d09e2 100644
--- a/embeddedobj/source/commonembedding/embedobj.cxx
+++ b/embeddedobj/source/commonembedding/embedobj.cxx
@@ -161,6 +161,37 @@ void OCommonEmbeddedObject::StateChangeNotification_Impl( bool bBeforeChange, sa
rGuard.reset();
}
+void OCommonEmbeddedObject::SetInplaceActiveState()
+{
+ if ( !m_xClientSite.is() )
+ throw embed::WrongStateException( "client site not set, yet", *this );
+
+ uno::Reference< embed::XInplaceClient > xInplaceClient( m_xClientSite, uno::UNO_QUERY );
+ if ( !xInplaceClient.is() || !xInplaceClient->canInplaceActivate() )
+ throw embed::WrongStateException(); //TODO: can't activate inplace
+ xInplaceClient->activatingInplace();
+
+ uno::Reference< embed::XWindowSupplier > xClientWindowSupplier( xInplaceClient, uno::UNO_QUERY_THROW );
+
+ m_xClientWindow = xClientWindowSupplier->getWindow();
+ m_aOwnRectangle = xInplaceClient->getPlacement();
+ m_aClipRectangle = xInplaceClient->getClipRectangle();
+ awt::Rectangle aRectangleToShow = GetRectangleInterception( m_aOwnRectangle, m_aClipRectangle );
+
+ // create own window based on the client window
+ // place and resize the window according to the rectangles
+ uno::Reference< awt::XWindowPeer > xClientWindowPeer( m_xClientWindow, uno::UNO_QUERY_THROW );
+
+ // dispatch provider may not be provided
+ uno::Reference< frame::XDispatchProvider > xContainerDP = xInplaceClient->getInplaceDispatchProvider();
+ bool bOk = m_xDocHolder->ShowInplace( xClientWindowPeer, aRectangleToShow, xContainerDP );
+ m_nObjectState = embed::EmbedStates::INPLACE_ACTIVE;
+ if ( !bOk )
+ {
+ SwitchStateTo_Impl( embed::EmbedStates::RUNNING );
+ throw embed::WrongStateException(); //TODO: can't activate inplace
+ }
+}
void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState )
{
@@ -234,34 +265,7 @@ void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState )
{
if ( nNextState == embed::EmbedStates::INPLACE_ACTIVE )
{
- if ( !m_xClientSite.is() )
- throw embed::WrongStateException( "client site not set, yet", *this );
-
- uno::Reference< embed::XInplaceClient > xInplaceClient( m_xClientSite, uno::UNO_QUERY );
- if ( !xInplaceClient.is() || !xInplaceClient->canInplaceActivate() )
- throw embed::WrongStateException(); //TODO: can't activate inplace
- xInplaceClient->activatingInplace();
-
- uno::Reference< embed::XWindowSupplier > xClientWindowSupplier( xInplaceClient, uno::UNO_QUERY_THROW );
-
- m_xClientWindow = xClientWindowSupplier->getWindow();
- m_aOwnRectangle = xInplaceClient->getPlacement();
- m_aClipRectangle = xInplaceClient->getClipRectangle();
- awt::Rectangle aRectangleToShow = GetRectangleInterception( m_aOwnRectangle, m_aClipRectangle );
-
- // create own window based on the client window
- // place and resize the window according to the rectangles
- uno::Reference< awt::XWindowPeer > xClientWindowPeer( m_xClientWindow, uno::UNO_QUERY_THROW );
-
- // dispatch provider may not be provided
- uno::Reference< frame::XDispatchProvider > xContainerDP = xInplaceClient->getInplaceDispatchProvider();
- bool bOk = m_xDocHolder->ShowInplace( xClientWindowPeer, aRectangleToShow, xContainerDP );
- m_nObjectState = nNextState;
- if ( !bOk )
- {
- SwitchStateTo_Impl( embed::EmbedStates::RUNNING );
- throw embed::WrongStateException(); //TODO: can't activate inplace
- }
+ SetInplaceActiveState();
}
else if ( nNextState == embed::EmbedStates::ACTIVE )
{
diff --git a/embeddedobj/source/commonembedding/specialobject.cxx b/embeddedobj/source/commonembedding/specialobject.cxx
index 683fe0aab3f2..c17a39accf2c 100644
--- a/embeddedobj/source/commonembedding/specialobject.cxx
+++ b/embeddedobj/source/commonembedding/specialobject.cxx
@@ -47,6 +47,7 @@ uno::Any SAL_CALL OSpecialEmbeddedObject::queryInterface( const uno::Type& rType
uno::Any aReturn = ::cppu::queryInterface( rType,
static_cast< embed::XEmbeddedObject* >( this ),
static_cast< embed::XInplaceObject* >( this ),
+ static_cast< embed::XCommonEmbedPersist* >( static_cast< embed::XEmbedPersist* >( this ) ),
static_cast< embed::XVisualObject* >( this ),
static_cast< embed::XClassifiedObject* >( this ),
static_cast< embed::XComponentSupplier* >( this ),
@@ -160,4 +161,12 @@ void SAL_CALL OSpecialEmbeddedObject::doVerb( sal_Int32 nVerbID )
OCommonEmbeddedObject::doVerb( nVerbID );
}
+void SAL_CALL OSpecialEmbeddedObject::reload(
+ const uno::Sequence< beans::PropertyValue >&,
+ const uno::Sequence< beans::PropertyValue >&)
+{
+ // Allow IFrames to reload their content
+ SetInplaceActiveState();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx
index 1b020f430855..dbed7c26f28c 100644
--- a/embeddedobj/source/inc/commonembobj.hxx
+++ b/embeddedobj/source/inc/commonembobj.hxx
@@ -231,6 +231,9 @@ private:
const css::uno::Sequence< css::beans::PropertyValue >& lArguments,
const css::uno::Sequence< css::beans::PropertyValue >& lObjArgs );
+protected:
+ void SetInplaceActiveState();
+
public:
OCommonEmbeddedObject(
const css::uno::Reference< css::uno::XComponentContext >& rxContext,
diff --git a/embeddedobj/source/inc/specialobject.hxx b/embeddedobj/source/inc/specialobject.hxx
index 5c467b97a379..0b5e3ca23e9f 100644
--- a/embeddedobj/source/inc/specialobject.hxx
+++ b/embeddedobj/source/inc/specialobject.hxx
@@ -47,6 +47,12 @@ public:
virtual void SAL_CALL changeState( sal_Int32 nNewState ) override;
virtual void SAL_CALL doVerb( sal_Int32 nVerbID ) override;
+
+// XCommonEmbedPersist
+
+ virtual void SAL_CALL reload(
+ const css::uno::Sequence< css::beans::PropertyValue >& lArguments,
+ const css::uno::Sequence< css::beans::PropertyValue >& lObjArgs ) override;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx
index 8c209ce7f281..342b5370c239 100644
--- a/include/svx/svdoole2.hxx
+++ b/include/svx/svdoole2.hxx
@@ -42,6 +42,7 @@ namespace frame { class XModel; }
namespace svt { class EmbeddedObjectRef; }
class SdrOle2ObjImpl;
+class SvxOle2Shape;
class SVXCORE_DLLPUBLIC SdrOle2Obj : public SdrRectObj
{
@@ -49,7 +50,7 @@ private:
std::unique_ptr<SdrOle2ObjImpl> mpImpl;
private:
- SVX_DLLPRIVATE void Connect_Impl();
+ SVX_DLLPRIVATE void Connect_Impl(SvxOle2Shape* pCreator = nullptr);
SVX_DLLPRIVATE void Disconnect_Impl();
SVX_DLLPRIVATE void AddListeners_Impl();
SVX_DLLPRIVATE void RemoveListeners_Impl();
@@ -105,7 +106,7 @@ public:
// OLE object has got a separate PersistName member now;
// !!! use ::SetPersistName( ... ) only, if you know what you do !!!
const OUString& GetPersistName() const;
- void SetPersistName( const OUString& rPersistName );
+ void SetPersistName( const OUString& rPersistName, SvxOle2Shape* pCreator = nullptr );
// One can add an application name to a SdrOle2Obj, which can be queried for
// later on (SD needs this for presentation objects).
@@ -153,7 +154,7 @@ public:
sal_Int64 nAspect );
static bool Unload( const css::uno::Reference< css::embed::XEmbeddedObject >& xObj, sal_Int64 nAspect );
bool Unload();
- void Connect();
+ void Connect(SvxOle2Shape* pCreator = nullptr);
void Disconnect();
void ObjectLoaded();
@@ -200,6 +201,16 @@ public:
void Connect() { GetRealObject(); }
};
+class SVXCORE_DLLPUBLIC SdrIFrameLink final : public sfx2::SvBaseLink
+{
+ SdrOle2Obj* m_pObject;
+
+public:
+ explicit SdrIFrameLink(SdrOle2Obj* pObject);
+ virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(
+ const OUString& rMimeType, const css::uno::Any & rValue ) override;
+};
+
#endif // INCLUDED_SVX_SVDOOLE2_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/unoshape.hxx b/include/svx/unoshape.hxx
index 1f948f50574b..5fe64331842c 100644
--- a/include/svx/unoshape.hxx
+++ b/include/svx/unoshape.hxx
@@ -607,6 +607,8 @@ public:
bool createObject( const SvGlobalName &aClassName );
void createLink( const OUString& aLinkURL );
+
+ virtual OUString GetAndClearInitialFrameURL();
};
diff --git a/sc/source/ui/docshell/documentlinkmgr.cxx b/sc/source/ui/docshell/documentlinkmgr.cxx
index 1796b02b5434..fce782935949 100644
--- a/sc/source/ui/docshell/documentlinkmgr.cxx
+++ b/sc/source/ui/docshell/documentlinkmgr.cxx
@@ -142,7 +142,7 @@ bool DocumentLinkManager::hasDdeOrOleOrWebServiceLinks(bool bDde, bool bOle, boo
sfx2::SvBaseLink* pBase = rLink.get();
if (bDde && dynamic_cast<ScDdeLink*>(pBase))
return true;
- if (bOle && dynamic_cast<SdrEmbedObjectLink*>(pBase))
+ if (bOle && (dynamic_cast<SdrEmbedObjectLink*>(pBase) || dynamic_cast<SdrIFrameLink*>(pBase)))
return true;
if (bWebService && dynamic_cast<ScWebServiceLink*>(pBase))
return true;
@@ -173,6 +173,13 @@ bool DocumentLinkManager::updateDdeOrOleOrWebServiceLinks(weld::Window* pWin)
continue;
}
+ SdrIFrameLink* pIFrameLink = dynamic_cast<SdrIFrameLink*>(pBase);
+ if (pIFrameLink)
+ {
+ pIFrameLink->Update();
+ continue;
+ }
+
ScWebServiceLink* pWebserviceLink = dynamic_cast<ScWebServiceLink*>(pBase);
if (pWebserviceLink)
{
diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx
index b9495b8fd311..73030f151359 100644
--- a/sfx2/source/doc/iframe.cxx
+++ b/sfx2/source/doc/iframe.cxx
@@ -175,31 +175,46 @@ sal_Bool SAL_CALL IFrameObject::load(
return false;
}
+ bool bUpdateAllowed(true);
+ if (pDoc)
+ {
+ // perhaps should only check for file targets, but lets default to making it strong
+ // unless there is a known need to distinguish
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = pDoc->getEmbeddedObjectContainer();
+ bUpdateAllowed = rEmbeddedObjectContainer.getUserAllowsLinkUpdate();
+ }
+ if (!bUpdateAllowed)
+ return false;
+
OUString sReferer;
if (pDoc && pDoc->HasName())
sReferer = pDoc->GetMedium()->GetName();
- DBG_ASSERT( !mxFrame.is(), "Frame already existing!" );
- VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow( xFrame->getContainerWindow() );
- VclPtr<IFrameWindow_Impl> pWin = VclPtr<IFrameWindow_Impl>::Create( pParent, maFrmDescr.IsFrameBorderOn() );
- pWin->SetSizePixel( pParent->GetOutputSizePixel() );
- pWin->SetBackground();
- pWin->Show();
-
- uno::Reference < awt::XWindow > xWindow( pWin->GetComponentInterface(), uno::UNO_QUERY );
- xFrame->setComponent( xWindow, uno::Reference < frame::XController >() );
+ uno::Reference<css::awt::XWindow> xParentWindow(xFrame->getContainerWindow());
- // we must destroy the IFrame before the parent is destroyed
- xWindow->addEventListener( this );
-
- mxFrame = frame::Frame::create( mxContext );
- uno::Reference < awt::XWindow > xWin( pWin->GetComponentInterface(), uno::UNO_QUERY );
- mxFrame->initialize( xWin );
- mxFrame->setName( maFrmDescr.GetName() );
-
- uno::Reference < frame::XFramesSupplier > xFramesSupplier( xFrame, uno::UNO_QUERY );
- if ( xFramesSupplier.is() )
- mxFrame->setCreator( xFramesSupplier );
+ if (!mxFrame.is())
+ {
+ VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow(xParentWindow);
+ VclPtr<IFrameWindow_Impl> pWin = VclPtr<IFrameWindow_Impl>::Create( pParent, maFrmDescr.IsFrameBorderOn() );
+ pWin->SetSizePixel( pParent->GetOutputSizePixel() );
+ pWin->SetBackground();
+ pWin->Show();
+
+ uno::Reference < awt::XWindow > xWindow( pWin->GetComponentInterface(), uno::UNO_QUERY );
+ xFrame->setComponent( xWindow, uno::Reference < frame::XController >() );
+
+ // we must destroy the IFrame before the parent is destroyed
+ xWindow->addEventListener( this );
+
+ mxFrame = frame::Frame::create( mxContext );
+ uno::Reference < awt::XWindow > xWin( pWin->GetComponentInterface(), uno::UNO_QUERY );
+ mxFrame->initialize( xWin );
+ mxFrame->setName( maFrmDescr.GetName() );
+
+ uno::Reference < frame::XFramesSupplier > xFramesSupplier( xFrame, uno::UNO_QUERY );
+ if ( xFramesSupplier.is() )
+ mxFrame->setCreator( xFramesSupplier );
+ }
uno::Sequence < beans::PropertyValue > aProps{
comphelper::makePropertyValue("PluginMode", sal_Int16(2)),
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index 23eb06465e87..de1ac41beb13 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -67,6 +67,7 @@
#include <sdr/contact/viewcontactofsdrole2obj.hxx>
#include <svx/svdograf.hxx>
#include <sdr/properties/oleproperties.hxx>
+#include <svx/unoshape.hxx>
#include <svx/xlineit0.hxx>
#include <svx/xlnclit.hxx>
#include <svx/xbtmpit.hxx>
@@ -591,6 +592,35 @@ void SdrEmbedObjectLink::Closed()
SvBaseLink::Closed();
}
+SdrIFrameLink::SdrIFrameLink(SdrOle2Obj* pObject)
+ : ::sfx2::SvBaseLink(::SfxLinkUpdateMode::ONCALL, SotClipboardFormatId::SVXB)
+ , m_pObject(pObject)
+{
+ SetSynchron( false );
+}
+
+::sfx2::SvBaseLink::UpdateResult SdrIFrameLink::DataChanged(
+ const OUString&, const uno::Any& )
+{
+ uno::Reference<embed::XEmbeddedObject> xObject = m_pObject->GetObjRef();
+ uno::Reference<embed::XCommonEmbedPersist> xPersObj(xObject, uno::UNO_QUERY);
+ if (xPersObj.is())
+ {
+ // let the IFrameObject reload the link
+ try
+ {
+ xPersObj->reload(uno::Sequence<beans::PropertyValue>(), uno::Sequence<beans::PropertyValue>());
+ }
+ catch (const uno::Exception&)
+ {
+ }
+
+ m_pObject->SetChanged();
+ }
+
+ return SUCCESS;
+}
+
class SdrOle2ObjImpl
{
public:
@@ -608,7 +638,7 @@ public:
bool mbLoadingOLEObjectFailed:1; // New local var to avoid repeated loading if load of OLE2 fails
bool mbConnected:1;
- SdrEmbedObjectLink* mpObjectLink;
+ sfx2::SvBaseLink* mpObjectLink;
OUString maLinkURL;
rtl::Reference<SvxUnoShapeModifyListener> mxModifyListener;
@@ -808,7 +838,7 @@ bool SdrOle2Obj::IsEmpty() const
return !mpImpl->mxObjRef.is();
}
-void SdrOle2Obj::Connect()
+void SdrOle2Obj::Connect(SvxOle2Shape* pCreator)
{
if( IsEmptyPresObj() )
return;
@@ -821,7 +851,7 @@ void SdrOle2Obj::Connect()
return;
}
- Connect_Impl();
+ Connect_Impl(pCreator);
AddListeners_Impl();
}
@@ -921,24 +951,51 @@ void SdrOle2Obj::CheckFileLink_Impl()
try
{
- uno::Reference< embed::XLinkageSupport > xLinkSupport( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
+ uno::Reference<embed::XEmbeddedObject> xObject = mpImpl->mxObjRef.GetObject();
+ if (!xObject)
+ return;
- if ( xLinkSupport.is() && xLinkSupport->isLink() )
- {
- OUString aLinkURL = xLinkSupport->getLinkURL();
+ bool bIFrame = false;
- if ( !aLinkURL.isEmpty() )
+ OUString aLinkURL;
+ uno::Reference<embed::XLinkageSupport> xLinkSupport(xObject, uno::UNO_QUERY);
+ if (xLinkSupport)
+ {
+ if (xLinkSupport->isLink())
+ aLinkURL = xLinkSupport->getLinkURL();
+ }
+ else
+ {
+ // get IFrame (Floating Frames) listed and updatable from the
+ // manage links dialog
+ SvGlobalName aClassId(xObject->getClassID());
+ if (aClassId == SvGlobalName(SO3_IFRAME_CLASSID))
{
- // this is a file link so the model link manager should handle it
- sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
+ uno::Reference<beans::XPropertySet> xSet(xObject->getComponent(), uno::UNO_QUERY);
+ if (xSet.is())
+ xSet->getPropertyValue("FrameURL") >>= aLinkURL;
+ bIFrame = true;
+ }
+ }
+
+ if (!aLinkURL.isEmpty()) // this is a file link so the model link manager should handle it
+ {
+ sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
- if ( pLinkManager )
+ if ( pLinkManager )
+ {
+ SdrEmbedObjectLink* pEmbedObjectLink = nullptr;
+ if (!bIFrame)
{
- mpImpl->mpObjectLink = new SdrEmbedObjectLink( this );
- mpImpl->maLinkURL = aLinkURL;
- pLinkManager->InsertFileLink( *mpImpl->mpObjectLink, sfx2::SvBaseLinkObjectType::ClientOle, aLinkURL );
- mpImpl->mpObjectLink->Connect();
+ pEmbedObjectLink = new SdrEmbedObjectLink(this);
+ mpImpl->mpObjectLink = pEmbedObjectLink;
}
+ else
+ mpImpl->mpObjectLink = new SdrIFrameLink(this);
+ mpImpl->maLinkURL = aLinkURL;
+ pLinkManager->InsertFileLink( *mpImpl->mpObjectLink, sfx2::SvBaseLinkObjectType::ClientOle, aLinkURL );
+ if (pEmbedObjectLink)
+ pEmbedObjectLink->Connect();
}
}
}
@@ -948,7 +1005,7 @@ void SdrOle2Obj::CheckFileLink_Impl()
}
}
-void SdrOle2Obj::Connect_Impl()
+void SdrOle2Obj::Connect_Impl(SvxOle2Shape* pCreator)
{
if(mpImpl->aPersistName.isEmpty() )
return;
@@ -989,6 +1046,17 @@ void SdrOle2Obj::Connect_Impl()
}
}
+ if (pCreator)
+ {
+ OUString sFrameURL(pCreator->GetAndClearInitialFrameURL());
+ if (!sFrameURL.isEmpty() && svt::EmbeddedObjectRef::TryRunningState(mpImpl->mxObjRef.GetObject()))
+ {
+ uno::Reference<beans::XPropertySet> xSet(mpImpl->mxObjRef->getComponent(), uno::UNO_QUERY);
+ if (xSet.is())
+ xSet->setPropertyValue("FrameURL", uno::Any(sFrameURL));
+ }
+ }
+
if ( mpImpl->mxObjRef.is() )
{
if ( !mpImpl->mxLightClient.is() )
@@ -1301,14 +1369,14 @@ SdrObjectUniquePtr SdrOle2Obj::getFullDragClone() const
return createSdrGrafObjReplacement(false);
}
-void SdrOle2Obj::SetPersistName( const OUString& rPersistName )
+void SdrOle2Obj::SetPersistName( const OUString& rPersistName, SvxOle2Shape* pCreator )
{
DBG_ASSERT( mpImpl->aPersistName.isEmpty(), "Persist name changed!");
mpImpl->aPersistName = rPersistName;
mpImpl->mbLoadingOLEObjectFailed = false;
- Connect();
+ Connect(pCreator);
SetChanged();
}
diff --git a/svx/source/unodraw/shapeimpl.hxx b/svx/source/unodraw/shapeimpl.hxx
index a1a4e6963020..4381094d380a 100644
--- a/svx/source/unodraw/shapeimpl.hxx
+++ b/svx/source/unodraw/shapeimpl.hxx
@@ -64,8 +64,11 @@ public:
virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage ) override;
};
+
class SvxFrameShape : public SvxOle2Shape
{
+private:
+ OUString m_sInitialFrameURL;
protected:
// override these for special property handling in subcasses. Return true if property is handled
virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const css::uno::Any& rValue ) override;
@@ -82,6 +85,8 @@ public:
virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues ) override;
virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage ) override;
+
+ virtual OUString GetAndClearInitialFrameURL() override;
};
diff --git a/svx/source/unodraw/unoshap4.cxx b/svx/source/unodraw/unoshap4.cxx
index 658cb2c8fd6c..e6bbe51ee1e0 100644
--- a/svx/source/unodraw/unoshap4.cxx
+++ b/svx/source/unodraw/unoshap4.cxx
@@ -174,7 +174,7 @@ bool SvxOle2Shape::setPropertyValueImpl( const OUString& rName, const SfxItemPro
#else
pOle = static_cast<SdrOle2Obj*>(GetSdrObject());
#endif
- pOle->SetPersistName( aPersistName );
+ pOle->SetPersistName( aPersistName, this );
return true;
}
break;
@@ -495,10 +495,11 @@ void SvxOle2Shape::createLink( const OUString& aLinkURL )
void SvxOle2Shape::resetModifiedState()
{
- ::comphelper::IEmbeddedHelper* pPersist = GetSdrObject()->getSdrModelFromSdrObject().GetPersist();
+ SdrObject* pObject = GetSdrObject();
+ ::comphelper::IEmbeddedHelper* pPersist = pObject ? pObject->getSdrModelFromSdrObject().GetPersist() : nullptr;
if( pPersist && !pPersist->isEnableSetModified() )
{
- SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
+ SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >(pObject);
if( pOle && !pOle->IsEmpty() )
{
uno::Reference < util::XModifiable > xMod( pOle->GetObjRef(), uno::UNO_QUERY );
@@ -548,6 +549,11 @@ SvGlobalName SvxOle2Shape::GetClassName_Impl(OUString& rHexCLSID)
return aClassName;
}
+OUString SvxOle2Shape::GetAndClearInitialFrameURL()
+{
+ return OUString();
+}
+
SvxAppletShape::SvxAppletShape(SdrObject* pObject)
: SvxOle2Shape( pObject, getSvxMapProvider().GetMap(SVXMAP_APPLET), getSvxMapProvider().GetPropertySet(SVXMAP_APPLET, SdrObject::GetGlobalDrawObjectItemPool()) )
{
@@ -701,8 +707,19 @@ SvxFrameShape::~SvxFrameShape() throw()
{
}
+OUString SvxFrameShape::GetAndClearInitialFrameURL()
+{
+ OUString sRet(m_sInitialFrameURL);
+ m_sInitialFrameURL.clear();
+ return sRet;
+}
+
void SvxFrameShape::Create( SdrObject* pNewObj, SvxDrawPage* pNewPage )
{
+ uno::Reference<beans::XPropertySet> xSet(static_cast<OWeakObject *>(this), uno::UNO_QUERY);
+ if (xSet)
+ xSet->getPropertyValue("FrameURL") >>= m_sInitialFrameURL;
+
SvxShape::Create( pNewObj, pNewPage );
const SvGlobalName aIFrameClassId( SO3_IFRAME_CLASSID );
createObject(aIFrameClassId);
diff --git a/sw/inc/ndole.hxx b/sw/inc/ndole.hxx
index 7c07c2656b44..649b300e9be8 100644
--- a/sw/inc/ndole.hxx
+++ b/sw/inc/ndole.hxx
@@ -28,7 +28,7 @@ class SwGrfFormatColl;
class SwDoc;
class SwOLENode;
class SwOLEListener_Impl;
-class SwEmbedObjectLink;
+namespace sfx2 { class SvBaseLink; }
class DeflateData;
class SW_DLLPUBLIC SwOLEObj
@@ -90,7 +90,7 @@ class SW_DLLPUBLIC SwOLENode: public SwNoTextNode
bool mbOLESizeInvalid; /**< Should be considered at SwDoc::PrtOLENotify
(e.g. copied). Is not persistent. */
- SwEmbedObjectLink* mpObjectLink;
+ sfx2::SvBaseLink* mpObjectLink;
OUString maLinkURL;
SwOLENode( const SwNodeIndex &rWhere,
diff --git a/sw/source/core/ole/ndole.cxx b/sw/source/core/ole/ndole.cxx
index 74ceed65d2e0..02fc31daf550 100644
--- a/sw/source/core/ole/ndole.cxx
+++ b/sw/source/core/ole/ndole.cxx
@@ -147,6 +147,8 @@ void SAL_CALL SwOLEListener_Impl::disposing( const lang::EventObject& )
// TODO/LATER: actually SwEmbedObjectLink should be used here, but because different objects are used to control
// embedded object different link objects with the same functionality had to be implemented
+namespace {
+
class SwEmbedObjectLink : public sfx2::SvBaseLink
{
SwOLENode* pOleNode;
@@ -209,6 +211,44 @@ void SwEmbedObjectLink::Closed()
SvBaseLink::Closed();
}
+class SwIFrameLink : public sfx2::SvBaseLink
+{
+ SwOLENode* m_pOleNode;
+
+public:
+ explicit SwIFrameLink(SwOLENode* pNode)
+ : ::sfx2::SvBaseLink(::SfxLinkUpdateMode::ONCALL, SotClipboardFormatId::SVXB)
+ , m_pOleNode(pNode)
+ {
+ SetSynchron( false );
+ }
+
+ ::sfx2::SvBaseLink::UpdateResult DataChanged(
+ const OUString&, const uno::Any& )
+ {
+ uno::Reference<embed::XEmbeddedObject> xObject = m_pOleNode->GetOLEObj().GetOleRef();
+ uno::Reference<embed::XCommonEmbedPersist> xPersObj(xObject, uno::UNO_QUERY);
+ if (xPersObj.is())
+ {
+ // let the IFrameObject reload the link
+ try
+ {
+ xPersObj->reload(uno::Sequence<beans::PropertyValue>(), uno::Sequence<beans::PropertyValue>());
+ }
+ catch (const uno::Exception&)
+ {
+ }
+
+ m_pOleNode->SetChanged();
+ }
+
+ return SUCCESS;
+ }
+
+};
+
+}
+
SwOLENode::SwOLENode( const SwNodeIndex &rWhere,
const svt::EmbeddedObjectRef& xObj,
SwGrfFormatColl *pGrfColl,
@@ -607,18 +647,49 @@ void SwOLENode::CheckFileLink_Impl()
try
{
- uno::Reference< embed::XLinkageSupport > xLinkSupport( maOLEObj.m_xOLERef.GetObject(), uno::UNO_QUERY_THROW );
- if ( xLinkSupport->isLink() )
+ uno::Reference<embed::XEmbeddedObject> xObject = maOLEObj.m_xOLERef.GetObject();
+ if (!xObject)
+ return;
+
+ bool bIFrame = false;
+
+ OUString aLinkURL;
+ uno::Reference<embed::XLinkageSupport> xLinkSupport(xObject, uno::UNO_QUERY);
+ if (xLinkSupport)
{
- const OUString aLinkURL = xLinkSupport->getLinkURL();
- if ( !aLinkURL.isEmpty() )
+ if (xLinkSupport->isLink())
+ aLinkURL = xLinkSupport->getLinkURL();
+ }
+ else
+ {
+ // get IFrame (Floating Frames) listed and updatable from the
+ // manage links dialog
+ SvGlobalName aClassId(xObject->getClassID());
+ if (aClassId == SvGlobalName(SO3_IFRAME_CLASSID))
+ {
+ uno::Reference<beans::XPropertySet> xSet(xObject->getComponent(), uno::UNO_QUERY);
+ if (xSet.is())
+ xSet->getPropertyValue("FrameURL") >>= aLinkURL;
+ bIFrame = true;
+ }
+ }
+
+ if (!aLinkURL.isEmpty()) // this is a file link so the model link manager should handle it
+ {
+ SwEmbedObjectLink* pEmbedObjectLink = nullptr;
+ if (!bIFrame)
+ {
+ pEmbedObjectLink = new SwEmbedObjectLink(this);
+ mpObjectLink = pEmbedObjectLink;
+ }
+ else
{
- // this is a file link so the model link manager should handle it
- mpObjectLink = new SwEmbedObjectLink( this );
- maLinkURL = aLinkURL;
- GetDoc().getIDocumentLinksAdministration().GetLinkManager().InsertFileLink( *mpObjectLink, sfx2::SvBaseLinkObjectType::ClientOle, aLinkURL );
- mpObjectLink->Connect();
+ mpObjectLink = new SwIFrameLink(this);
}
+ maLinkURL = aLinkURL;
+ GetDoc().getIDocumentLinksAdministration().GetLinkManager().InsertFileLink( *mpObjectLink, sfx2::SvBaseLinkObjectType::ClientOle, aLinkURL );
+ if (pEmbedObjectLink)
+ pEmbedObjectLink->Connect();
}
}
catch( uno::Exception& )
diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx
index 4afa4e039776..3885f3b9219f 100644
--- a/xmloff/source/draw/ximpshap.cxx
+++ b/xmloff/source/draw/ximpshap.cxx
@@ -3210,9 +3210,35 @@ SdXMLFloatingFrameShapeContext::~SdXMLFloatingFrameShapeContext()
{
}
+uno::Reference<drawing::XShape> SdXMLFloatingFrameShapeContext::CreateFloatingFrameShape() const
+{
+ uno::Reference<lang::XMultiServiceFactory> xServiceFact(GetImport().GetModel(), uno::UNO_QUERY);
+ if (!xServiceFact.is())
+ return nullptr;
+ uno::Reference<drawing::XShape> xShape(
+ xServiceFact->createInstance("com.sun.star.drawing.FrameShape"), uno::UNO_QUERY);
+ return xShape;
+}
+
void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< css::xml::sax::XAttributeList >& )
{
- AddShape("com.sun.star.drawing.FrameShape");
+ uno::Reference<drawing::XShape> xShape(SdXMLFloatingFrameShapeContext::CreateFloatingFrameShape());
+
+ uno::Reference< beans::XPropertySet > xProps(xShape, uno::UNO_QUERY);
+ // set FrameURL before AddShape, we have to do it again later because it
+ // gets cleared when the SdrOle2Obj is attached to the XShape. But we want
+ // FrameURL to exist when AddShape triggers SetPersistName which itself
+ // triggers SdrOle2Obj::CheckFileLink_Impl and at that point we want to
+ // know what URL will end up being used. So bodge this by setting FrameURL
+ // to the temp pre-SdrOle2Obj attached properties and we can smuggle it
+ // eventually into SdrOle2Obj::SetPersistName at the right point after
+ // PersistName is set but before SdrOle2Obj::CheckFileLink_Impl is called
+ // in order to inform the link manager that this is an IFrame that links to
+ // a URL
+ if (xProps && !maHref.isEmpty())
+ xProps->setPropertyValue("FrameURL", Any(maHref));
+
+ AddShape(xShape);
if( !mxShape.is() )
return;
@@ -3222,7 +3248,6 @@ void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< cs
// set pos, size, shear and rotate
SetTransformation();
- uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
if( xProps.is() )
{
if( !maFrameName.isEmpty() )
diff --git a/xmloff/source/draw/ximpshap.hxx b/xmloff/source/draw/ximpshap.hxx
index 8a29b037229a..3931b3cdbb72 100644
--- a/xmloff/source/draw/ximpshap.hxx
+++ b/xmloff/source/draw/ximpshap.hxx
@@ -495,6 +495,8 @@ private:
OUString maFrameName;
OUString maHref;
+ css::uno::Reference<css::drawing::XShape> CreateFloatingFrameShape() const;
+
public:
SdXMLFloatingFrameShapeContext( SvXMLImport& rImport,
--
2.41.0

@ -0,0 +1,50 @@
From 0caab4f6da81346e54a2d4881ad52752071347ba Mon Sep 17 00:00:00 2001
From: Eike Rathke <erack@redhat.com>
Date: Mon, 27 Feb 2023 16:10:06 +0100
Subject: [PATCH 3/3] Always push a result, even if it's only an error
PERCENTILE() and QUARTILE() if an error was passed as argument (or
an error encountered during obtaining arguments) omitted to push
an error result, only setting the error.
Fallout from
commit f336f63da900d76c2bf6e5690f1c8a7bd15a0aa2
CommitDate: Thu Mar 3 16:28:59 2016 +0000
tdf#94635 Add FORECAST.ETS functions to Calc
Change-Id: I23e276fb0ce735cfd6383cc963446499dcf819f4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147922
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit 64914560e279c71ff1233f4bab851e2a292797e6)
---
sc/source/core/tool/interpr3.cxx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index 29c72f6f7280..cdbb4823a0e1 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -3481,7 +3481,7 @@ void ScInterpreter::ScPercentile( bool bInclusive )
GetNumberSequenceArray( 1, aArray, false );
if ( aArray.empty() || nGlobalError != FormulaError::NONE )
{
- SetError( FormulaError::NoValue );
+ PushNoValue();
return;
}
if ( bInclusive )
@@ -3504,7 +3504,7 @@ void ScInterpreter::ScQuartile( bool bInclusive )
GetNumberSequenceArray( 1, aArray, false );
if ( aArray.empty() || nGlobalError != FormulaError::NONE )
{
- SetError( FormulaError::NoValue );
+ PushNoValue();
return;
}
if ( bInclusive )
--
2.41.0

@ -0,0 +1,583 @@
From e809625c2ca9f0c026aab9b5c2d13ced628c13e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 22 Mar 2022 17:22:22 +0000
Subject: [PATCH 3/5] CVE-2022-26306 add Initialization Vectors to password
storage
old ones default to the current all zero case and continue to work
as before
Change-Id: I6fe3b02fafcce1b5e7133e77e76a5118177d77af
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131974
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit 192fa1e3bfc6269f2ebb91716471485a56074aea)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132306
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
(cherry picked from commit ab77587ec300f5c30084471000663c46ddf25dad)
---
.../schema/org/openoffice/Office/Common.xcs | 10 ++
.../passwordcontainer/passwordcontainer.cxx | 127 ++++++++++++------
.../passwordcontainer/passwordcontainer.hxx | 63 +++++++--
3 files changed, 151 insertions(+), 49 deletions(-)
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 922efc33cca7..8d87d00d5369 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -27,6 +27,11 @@
<info>
<desc>Contains a container for passwords.</desc>
</info>
+ <prop oor:name="InitializationVector" oor:type="xs:string">
+ <info>
+ <desc>Contains an initialization vector for the password encryption.</desc>
+ </info>
+ </prop>
<prop oor:name="Password" oor:type="xs:string" oor:localized="false">
<info>
<desc>Contains a password encoded with the master password.</desc>
@@ -954,6 +959,11 @@
</info>
<value>false</value>
</prop>
+ <prop oor:name="MasterInitializationVector" oor:type="xs:string">
+ <info>
+ <desc>Contains an initialization vector for the master password encryption.</desc>
+ </info>
+ </prop>
<prop oor:name="Master" oor:type="xs:string" oor:nillable="false">
<info>
<desc>Contains the master password encrypted by itself.</desc>
diff --git a/svl/source/passwordcontainer/passwordcontainer.cxx b/svl/source/passwordcontainer/passwordcontainer.cxx
index b674844f91d3..ef79470a2cb6 100644
--- a/svl/source/passwordcontainer/passwordcontainer.cxx
+++ b/svl/source/passwordcontainer/passwordcontainer.cxx
@@ -181,15 +181,18 @@ PassMap StorageItem::getInfo()
Sequence< OUString > aNodeNames = ConfigItem::GetNodeNames( "Store" );
sal_Int32 aNodeCount = aNodeNames.getLength();
- Sequence< OUString > aPropNames( aNodeCount );
+ Sequence< OUString > aPropNames( aNodeCount * 2);
std::transform(aNodeNames.begin(), aNodeNames.end(), aPropNames.begin(),
[](const OUString& rName) -> OUString {
return "Store/Passwordstorage['" + rName + "']/Password"; });
+ std::transform(aNodeNames.begin(), aNodeNames.end(), aPropNames.getArray() + aNodeCount,
+ [](const OUString& rName) -> OUString {
+ return "Store/Passwordstorage['" + rName + "']/InitializationVector"; });
Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aPropNames );
- if( aPropertyValues.getLength() != aNodeCount )
+ if( aPropertyValues.getLength() != aNodeCount * 2)
{
OSL_FAIL( "Problems during reading" );
return aResult;
@@ -205,14 +208,16 @@ PassMap StorageItem::getInfo()
OUString aName = aUrlUsr[1];
OUString aEPasswd;
+ OUString aIV;
aPropertyValues[aNodeInd] >>= aEPasswd;
+ aPropertyValues[aNodeInd + aNodeCount] >>= aIV;
PassMap::iterator aIter = aResult.find( aUrl );
if( aIter != aResult.end() )
- aIter->second.emplace_back( aName, aEPasswd );
+ aIter->second.emplace_back( aName, aEPasswd, aIV );
else
{
- NamePassRecord aNewRecord( aName, aEPasswd );
+ NamePassRecord aNewRecord( aName, aEPasswd, aIV );
std::vector< NamePassRecord > listToAdd( 1, aNewRecord );
aResult.insert( PairUrlRecord( aUrl, listToAdd ) );
@@ -276,17 +281,19 @@ sal_Int32 StorageItem::getStorageVersion()
return nResult;
}
-bool StorageItem::getEncodedMP( OUString& aResult )
+bool StorageItem::getEncodedMP( OUString& aResult, OUString& aResultIV )
{
if( hasEncoded )
{
aResult = mEncoded;
+ aResultIV = mEncodedIV;
return true;
}
- Sequence< OUString > aNodeNames( 2 );
+ Sequence< OUString > aNodeNames( 3 );
aNodeNames[0] = "HasMaster";
aNodeNames[1] = "Master";
+ aNodeNames[2] = "MasterInitializationVector";
Sequence< Any > aPropertyValues = ConfigItem::GetProperties( aNodeNames );
@@ -298,32 +305,37 @@ bool StorageItem::getEncodedMP( OUString& aResult )
aPropertyValues[0] >>= hasEncoded;
aPropertyValues[1] >>= mEncoded;
+ aPropertyValues[2] >>= mEncodedIV;
aResult = mEncoded;
+ aResultIV = mEncodedIV;
return hasEncoded;
}
-void StorageItem::setEncodedMP( const OUString& aEncoded, bool bAcceptEmpty )
+void StorageItem::setEncodedMP( const OUString& aEncoded, const OUString& aEncodedIV, bool bAcceptEmpty )
{
- Sequence< OUString > sendNames(3);
- Sequence< uno::Any > sendVals(3);
+ Sequence< OUString > sendNames(4);
+ Sequence< uno::Any > sendVals(4);
sendNames[0] = "HasMaster";
sendNames[1] = "Master";
- sendNames[2] = "StorageVersion";
+ sendNames[2] = "MasterInitializationVector";
+ sendNames[3] = "StorageVersion";
bool bHasMaster = ( !aEncoded.isEmpty() || bAcceptEmpty );
sendVals[0] <<= bHasMaster;
sendVals[1] <<= aEncoded;
- sendVals[2] <<= nCurrentStorageVersion;
+ sendVals[2] <<= aEncodedIV;
+ sendVals[3] <<= nCurrentStorageVersion;
ConfigItem::SetModified();
ConfigItem::PutProperties( sendNames, sendVals );
hasEncoded = bHasMaster;
mEncoded = aEncoded;
+ mEncodedIV = aEncodedIV;
}
@@ -359,11 +371,13 @@ void StorageItem::update( const OUString& aURL, const NamePassRecord& aRecord )
forIndex.push_back( aURL );
forIndex.push_back( aRecord.GetUserName() );
- Sequence< beans::PropertyValue > sendSeq(1);
+ Sequence< beans::PropertyValue > sendSeq(2);
- sendSeq[0].Name = "Store/Passwordstorage['" + createIndex( forIndex ) + "']/Password";
+ sendSeq[0].Name = "Store/Passwordstorage['" + createIndex( forIndex ) + "']/InitializationVector";
+ sendSeq[0].Value <<= aRecord.GetPersistentIV();
- sendSeq[0].Value <<= aRecord.GetPersPasswords();
+ sendSeq[1].Name = "Store/Passwordstorage['" + createIndex( forIndex ) + "']/Password";
+ sendSeq[1].Value <<= aRecord.GetPersPasswords();
ConfigItem::SetModified();
ConfigItem::SetSetProperties( "Store", sendSeq );
@@ -424,7 +438,7 @@ void SAL_CALL PasswordContainer::disposing( const EventObject& )
}
}
-std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLine, const OUString& aMasterPasswd, css::task::PasswordRequestMode mode )
+std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLine, const OUString& aIV, const OUString& aMasterPasswd, css::task::PasswordRequestMode mode )
{
if( !aMasterPasswd.isEmpty() )
{
@@ -439,9 +453,16 @@ std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLin
for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
code[ ind ] = static_cast<char>(aMasterPasswd.copy( ind*2, 2 ).toUInt32(16));
+ unsigned char iv[RTL_DIGEST_LENGTH_MD5] = {0};
+ if (!aIV.isEmpty())
+ {
+ for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
+ iv[ ind ] = static_cast<char>(aIV.copy( ind*2, 2 ).toUInt32(16));
+ }
+
rtlCipherError result = rtl_cipher_init (
aDecoder, rtl_Cipher_DirectionDecode,
- code, RTL_DIGEST_LENGTH_MD5, nullptr, 0 );
+ code, RTL_DIGEST_LENGTH_MD5, iv, RTL_DIGEST_LENGTH_MD5 );
if( result == rtl_Cipher_E_None )
{
@@ -474,7 +495,7 @@ std::vector< OUString > PasswordContainer::DecodePasswords( const OUString& aLin
"Can't decode!", css::uno::Reference<css::uno::XInterface>(), mode);
}
-OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& lines, const OUString& aMasterPasswd )
+OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& lines, const OUString& aIV, const OUString& aMasterPasswd)
{
if( !aMasterPasswd.isEmpty() )
{
@@ -491,9 +512,16 @@ OUString PasswordContainer::EncodePasswords(const std::vector< OUString >& lines
for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
code[ ind ] = static_cast<char>(aMasterPasswd.copy( ind*2, 2 ).toUInt32(16));
+ unsigned char iv[RTL_DIGEST_LENGTH_MD5] = {0};
+ if (!aIV.isEmpty())
+ {
+ for( int ind = 0; ind < RTL_DIGEST_LENGTH_MD5; ind++ )
+ iv[ ind ] = static_cast<char>(aIV.copy( ind*2, 2 ).toUInt32(16));
+ }
+
rtlCipherError result = rtl_cipher_init (
aEncoder, rtl_Cipher_DirectionEncode,
- code, RTL_DIGEST_LENGTH_MD5, nullptr, 0 );
+ code, RTL_DIGEST_LENGTH_MD5, iv, RTL_DIGEST_LENGTH_MD5 );
if( result == rtl_Cipher_E_None )
{
@@ -561,7 +589,7 @@ void PasswordContainer::UpdateVector( const OUString& aURL, std::vector< NamePas
if( aRecord.HasPasswords( PERSISTENT_RECORD ) )
{
- aNPIter.SetPersPasswords( aRecord.GetPersPasswords() );
+ aNPIter.SetPersPasswords( aRecord.GetPersPasswords(), aRecord.GetPersistentIV() );
if( writeFile )
{
@@ -594,7 +622,8 @@ UserRecord PasswordContainer::CopyToUserRecord( const NamePassRecord& aRecord, b
{
try
{
- ::std::vector< OUString > aDecodedPasswords = DecodePasswords( aRecord.GetPersPasswords(), GetMasterPassword( aHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER );
+ ::std::vector< OUString > aDecodedPasswords = DecodePasswords( aRecord.GetPersPasswords(), aRecord.GetPersistentIV(),
+ GetMasterPassword( aHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER );
aPasswords.insert( aPasswords.end(), aDecodedPasswords.begin(), aDecodedPasswords.end() );
}
catch( NoMasterException& )
@@ -639,6 +668,19 @@ void SAL_CALL PasswordContainer::addPersistent( const OUString& Url, const OUStr
PrivateAdd( Url, UserName, Passwords, PERSISTENT_RECORD, aHandler );
}
+OUString PasswordContainer::createIV()
+{
+ rtlRandomPool randomPool = mRandomPool.get();
+ unsigned char iv[RTL_DIGEST_LENGTH_MD5];
+ rtl_random_getBytes(randomPool, iv, RTL_DIGEST_LENGTH_MD5);
+ OUStringBuffer aBuffer;
+ for (sal_uInt8 i : iv)
+ {
+ aBuffer.append(OUString::number(i >> 4, 16));
+ aBuffer.append(OUString::number(i & 15, 16));
+ }
+ return aBuffer.makeStringAndClear();
+}
void PasswordContainer::PrivateAdd( const OUString& Url, const OUString& UserName, const Sequence< OUString >& Passwords, char Mode, const Reference< XInteractionHandler >& aHandler )
{
@@ -646,7 +688,11 @@ void PasswordContainer::PrivateAdd( const OUString& Url, const OUString& UserNam
::std::vector< OUString > aStorePass = comphelper::sequenceToContainer< std::vector<OUString> >( Passwords );
if( Mode == PERSISTENT_RECORD )
- aRecord.SetPersPasswords( EncodePasswords( aStorePass, GetMasterPassword( aHandler ) ) );
+ {
+ OUString sIV = createIV();
+ OUString sEncodedPasswords = EncodePasswords( aStorePass, sIV, GetMasterPassword( aHandler ) );
+ aRecord.SetPersPasswords( sEncodedPasswords, sIV );
+ }
else if( Mode == MEMORY_RECORD )
aRecord.SetMemPasswords( aStorePass );
else
@@ -839,10 +885,10 @@ OUString const & PasswordContainer::GetMasterPassword( const Reference< XInterac
if( m_aMasterPasswd.isEmpty() && aHandler.is() )
{
- OUString aEncodedMP;
+ OUString aEncodedMP, aEncodedMPIV;
bool bDefaultPassword = false;
- if( !m_pStorageFile->getEncodedMP( aEncodedMP ) )
+ if( !m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) )
aRMode = PasswordRequestMode_PASSWORD_CREATE;
else if ( aEncodedMP.isEmpty() )
{
@@ -864,14 +910,15 @@ OUString const & PasswordContainer::GetMasterPassword( const Reference< XInterac
m_aMasterPasswd = aPass;
std::vector< OUString > aMaster( 1, m_aMasterPasswd );
- m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, m_aMasterPasswd ) );
+ OUString sIV = createIV();
+ m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, sIV, m_aMasterPasswd ), sIV );
}
else
{
if (m_pStorageFile->getStorageVersion() == 0)
aPass = ReencodeAsOldHash(aPass);
- std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aPass, aRMode ) );
+ std::vector< OUString > aRM( DecodePasswords( aEncodedMP, aEncodedMPIV, aPass, aRMode ) );
if( aRM.empty() || aPass != aRM[0] )
{
bAskAgain = true;
@@ -1028,7 +1075,8 @@ 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 ), css::task::PasswordRequestMode_PASSWORD_ENTER ) ) );
+ aUsers[ oldLen ] = UserRecord( aNP.GetUserName(), comphelper::containerToSequence( DecodePasswords( aNP.GetPersPasswords(), aNP.GetPersistentIV(),
+ GetMasterPassword( xHandler ), css::task::PasswordRequestMode_PASSWORD_ENTER ) ) );
}
if( aUsers.hasElements() )
@@ -1045,12 +1093,12 @@ Sequence< UrlRecord > SAL_CALL PasswordContainer::getAllPersistent( const Refere
sal_Bool SAL_CALL PasswordContainer::authorizateWithMasterPassword( const uno::Reference< task::XInteractionHandler >& xHandler )
{
bool bResult = false;
- OUString aEncodedMP;
+ OUString aEncodedMP, aEncodedMPIV;
uno::Reference< task::XInteractionHandler > xTmpHandler = xHandler;
::osl::MutexGuard aGuard( mMutex );
// the method should fail if there is no master password
- if( m_pStorageFile && m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP ) )
+ if( m_pStorageFile && m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) )
{
if ( aEncodedMP.isEmpty() )
{
@@ -1118,8 +1166,8 @@ sal_Bool SAL_CALL PasswordContainer::changeMasterPassword( const uno::Reference<
bool bCanChangePassword = true;
// if there is already a stored master password it should be entered by the user before the change happen
- OUString aEncodedMP;
- if( !m_aMasterPasswd.isEmpty() || m_pStorageFile->getEncodedMP( aEncodedMP ) )
+ OUString aEncodedMP, aEncodedMPIV;
+ if( !m_aMasterPasswd.isEmpty() || m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) )
bCanChangePassword = authorizateWithMasterPassword( xTmpHandler );
if ( bCanChangePassword )
@@ -1138,7 +1186,8 @@ sal_Bool SAL_CALL PasswordContainer::changeMasterPassword( const uno::Reference<
// store the new master password
m_aMasterPasswd = aPass;
std::vector< OUString > aMaster( 1, m_aMasterPasswd );
- m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, m_aMasterPasswd ) );
+ OUString aIV = createIV();
+ m_pStorageFile->setEncodedMP( EncodePasswords( aMaster, aIV, m_aMasterPasswd ), aIV );
// store all the entries with the new password
for ( const auto& rURL : aPersistent )
@@ -1163,7 +1212,7 @@ void SAL_CALL PasswordContainer::removeMasterPassword()
if ( m_pStorageFile )
{
m_aMasterPasswd.clear();
- m_pStorageFile->setEncodedMP( OUString() ); // let the master password be removed from configuration
+ m_pStorageFile->setEncodedMP( OUString(), OUString() ); // let the master password be removed from configuration
}
}
@@ -1174,8 +1223,8 @@ sal_Bool SAL_CALL PasswordContainer::hasMasterPassword( )
if ( !m_pStorageFile )
throw uno::RuntimeException();
- OUString aEncodedMP;
- return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP ) );
+ OUString aEncodedMP, aEncodedMPIV;
+ return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) );
}
sal_Bool SAL_CALL PasswordContainer::allowPersistentStoring( sal_Bool bAllow )
@@ -1222,8 +1271,8 @@ sal_Bool SAL_CALL PasswordContainer::useDefaultMasterPassword( const uno::Refere
bool bCanChangePassword = true;
// if there is already a stored nondefault master password it should be entered by the user before the change happen
- OUString aEncodedMP;
- if( m_pStorageFile->getEncodedMP( aEncodedMP ) && !aEncodedMP.isEmpty() )
+ OUString aEncodedMP, aEncodedMPIV;
+ if( m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) && !aEncodedMP.isEmpty() )
bCanChangePassword = authorizateWithMasterPassword( xTmpHandler );
if ( bCanChangePassword )
@@ -1240,7 +1289,7 @@ sal_Bool SAL_CALL PasswordContainer::useDefaultMasterPassword( const uno::Refere
// store the empty string to flag the default master password
m_aMasterPasswd = aPass;
- m_pStorageFile->setEncodedMP( OUString(), true );
+ m_pStorageFile->setEncodedMP( OUString(), OUString(), true );
// store all the entries with the new password
for ( const auto& rURL : aPersistent )
@@ -1264,8 +1313,8 @@ sal_Bool SAL_CALL PasswordContainer::isDefaultMasterPasswordUsed()
if ( !m_pStorageFile )
throw uno::RuntimeException();
- OUString aEncodedMP;
- return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP ) && aEncodedMP.isEmpty() );
+ OUString aEncodedMP, aEncodedMPIV;
+ return ( m_pStorageFile->useStorage() && m_pStorageFile->getEncodedMP( aEncodedMP, aEncodedMPIV ) && aEncodedMP.isEmpty() );
}
diff --git a/svl/source/passwordcontainer/passwordcontainer.hxx b/svl/source/passwordcontainer/passwordcontainer.hxx
index bf43b5903602..0454437b9dc2 100644
--- a/svl/source/passwordcontainer/passwordcontainer.hxx
+++ b/svl/source/passwordcontainer/passwordcontainer.hxx
@@ -34,6 +34,7 @@
#include <unotools/configitem.hxx>
#include <ucbhelper/interactionrequest.hxx>
+#include <rtl/random.h>
#include <rtl/ref.hxx>
#include <osl/mutex.hxx>
@@ -52,11 +53,12 @@ class NamePassRecord
::std::vector< OUString > m_aMemPass;
// persistent passwords are encrypted in one string
- bool m_bHasPersPass;
+ bool m_bHasPersPass;
OUString m_aPersPass;
+ OUString m_aPersistentIV;
void InitArrays( bool bHasMemoryList, const ::std::vector< OUString >& aMemoryList,
- bool bHasPersistentList, const OUString& aPersistentList )
+ bool bHasPersistentList, const OUString& aPersistentList, const OUString& aPersistentIV )
{
m_bHasMemPass = bHasMemoryList;
if ( bHasMemoryList )
@@ -64,7 +66,10 @@ class NamePassRecord
m_bHasPersPass = bHasPersistentList;
if ( bHasPersistentList )
+ {
m_aPersPass = aPersistentList;
+ m_aPersistentIV = aPersistentIV;
+ }
}
public:
@@ -76,11 +81,12 @@ public:
{
}
- NamePassRecord( const OUString& aName, const OUString& aPersistentList )
+ NamePassRecord( const OUString& aName, const OUString& aPersistentList, const OUString& aPersistentIV )
: m_aName( aName )
, m_bHasMemPass( false )
, m_bHasPersPass( true )
, m_aPersPass( aPersistentList )
+ , m_aPersistentIV( aPersistentIV )
{
}
@@ -89,7 +95,8 @@ public:
, m_bHasMemPass( false )
, m_bHasPersPass( false )
{
- InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, aRecord.m_bHasPersPass, aRecord.m_aPersPass );
+ InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass,
+ aRecord.m_bHasPersPass, aRecord.m_aPersPass, aRecord.m_aPersistentIV );
}
NamePassRecord& operator=( const NamePassRecord& aRecord )
@@ -100,7 +107,9 @@ public:
m_aMemPass.clear();
m_aPersPass.clear();
- InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass, aRecord.m_bHasPersPass, aRecord.m_aPersPass );
+ m_aPersistentIV.clear();
+ InitArrays( aRecord.m_bHasMemPass, aRecord.m_aMemPass,
+ aRecord.m_bHasPersPass, aRecord.m_aPersPass, aRecord.m_aPersistentIV );
}
return *this;
}
@@ -136,15 +145,24 @@ public:
return OUString();
}
+ OUString GetPersistentIV() const
+ {
+ if ( m_bHasPersPass )
+ return m_aPersistentIV;
+
+ return OUString();
+ }
+
void SetMemPasswords( const ::std::vector< OUString >& aMemList )
{
m_aMemPass = aMemList;
m_bHasMemPass = true;
}
- void SetPersPasswords( const OUString& aPersList )
+ void SetPersPasswords( const OUString& aPersList, const OUString& aPersIV )
{
m_aPersPass = aPersList;
+ m_aPersistentIV = aPersIV;
m_bHasPersPass = true;
}
@@ -159,6 +177,7 @@ public:
{
m_bHasPersPass = false;
m_aPersPass.clear();
+ m_aPersistentIV.clear();
}
}
@@ -182,6 +201,7 @@ private:
PasswordContainer* mainCont;
bool hasEncoded;
OUString mEncoded;
+ OUString mEncodedIV;
virtual void ImplCommit() override;
@@ -202,8 +222,8 @@ public:
sal_Int32 getStorageVersion();
- bool getEncodedMP( OUString& aResult );
- void setEncodedMP( const OUString& aResult, bool bAcceptEmpty = false );
+ bool getEncodedMP( OUString& aResult, OUString& aResultIV );
+ void setEncodedMP( const OUString& aResult, const OUString& aResultIV, bool bAcceptEmpty = false );
void setUseStorage( bool bUse );
bool useStorage();
@@ -224,6 +244,29 @@ private:
css::uno::Reference< css::lang::XComponent > mComponent;
SysCredentialsConfig mUrlContainer;
+ class RandomPool
+ {
+ private:
+ rtlRandomPool m_aRandomPool;
+ public:
+ RandomPool() : m_aRandomPool(rtl_random_createPool())
+ {
+ }
+ rtlRandomPool get()
+ {
+ return m_aRandomPool;
+ }
+ ~RandomPool()
+ {
+ // Clean up random pool memory
+ rtl_random_destroyPool(m_aRandomPool);
+ }
+ };
+
+ RandomPool mRandomPool;
+
+ OUString createIV();
+
/// @throws css::uno::RuntimeException
css::uno::Sequence< css::task::UserRecord > CopyToUserRecordSequence(
const ::std::vector< NamePassRecord >& original,
@@ -274,10 +317,10 @@ 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, css::task::PasswordRequestMode mode );
+ static ::std::vector< OUString > DecodePasswords( const OUString& aLine, const OUString& aIV, const OUString& aMasterPassword, css::task::PasswordRequestMode mode );
/// @throws css::uno::RuntimeException
- static OUString EncodePasswords(const std::vector< OUString >& lines, const OUString& aMasterPassword );
+ static OUString EncodePasswords(const std::vector< OUString >& lines, const OUString& aIV, const OUString& aMasterPassword );
public:
PasswordContainer( const css::uno::Reference< css::uno::XComponentContext >& );
--
2.37.3

@ -0,0 +1,239 @@
From b74078dd27a8d9e7151bc0466ca231a06f555459 Mon Sep 17 00:00:00 2001
Message-ID: <b74078dd27a8d9e7151bc0466ca231a06f555459.1703086328.git.erack@redhat.com>
In-Reply-To: <82752ccba78ecdbf94908377ec022f68ba7d9d59.1703086328.git.erack@redhat.com>
References: <82752ccba78ecdbf94908377ec022f68ba7d9d59.1703086328.git.erack@redhat.com>
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolan.mcnamara@collabora.com>
Date: Fri, 3 Nov 2023 17:26:25 +0000
Subject: [PATCH 2/4] default to ignoring libreoffice special-purpose protocols
in calc hyperlink
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: Ib9f62be3acc05f24ca234dec0fec21e24579e9de
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158911
Tested-by: Jenkins
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit b6062623b4d69c79e90e9365ac7c5e7f11986793)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159045
Reviewed-by: Eike Rathke <erack@redhat.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159882
Tested-by: Miklos Vajna <vmiklos@collabora.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159912
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
erAck: backported to 7.1.8.1
---
dbaccess/source/core/dataaccess/ModelImpl.cxx | 3 +-
include/sfx2/docmacromode.hxx | 4 ++-
include/sfx2/objsh.hxx | 3 ++
sc/source/core/data/global.cxx | 33 ++++++++++++++++++-
sfx2/source/doc/docmacromode.cxx | 8 +++--
sfx2/source/doc/objmisc.cxx | 8 ++++-
sfx2/source/doc/objxtor.cxx | 1 +
sfx2/source/inc/objshimp.hxx | 3 +-
8 files changed, 56 insertions(+), 7 deletions(-)
--------------erAck-patch-parts
Content-Type: text/x-patch; name="0002-default-to-ignoring-libreoffice-special-purpose-prot.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0002-default-to-ignoring-libreoffice-special-purpose-prot.patch"
diff --git a/dbaccess/source/core/dataaccess/ModelImpl.cxx b/dbaccess/source/core/dataaccess/ModelImpl.cxx
index 3e21289dbe9a..e399d5da7067 100644
--- a/dbaccess/source/core/dataaccess/ModelImpl.cxx
+++ b/dbaccess/source/core/dataaccess/ModelImpl.cxx
@@ -1133,7 +1133,8 @@ bool ODatabaseModelImpl::checkMacrosOnLoading()
{
Reference< XInteractionHandler > xInteraction;
xInteraction = m_aMediaDescriptor.getOrDefault( "InteractionHandler", xInteraction );
- return m_aMacroMode.checkMacrosOnLoading( xInteraction );
+ const bool bHasMacros = m_aMacroMode.hasMacros();
+ return m_aMacroMode.checkMacrosOnLoading(xInteraction, false /*HasValidContentSignature*/, bHasMacros);
}
void ODatabaseModelImpl::resetMacroExecutionMode()
diff --git a/include/sfx2/docmacromode.hxx b/include/sfx2/docmacromode.hxx
index 7ed42f6a14dd..0acb44cbfbb1 100644
--- a/include/sfx2/docmacromode.hxx
+++ b/include/sfx2/docmacromode.hxx
@@ -261,6 +261,8 @@ namespace sfx2
*/
static bool storageHasMacros( const css::uno::Reference< css::embed::XStorage >& _rxStorage );
+ bool hasMacros() const;
+
static bool containerHasBasicMacros( const css::uno::Reference< css::script::XLibraryContainer >& xContainer );
/** checks the macro execution mode while loading the document.
@@ -288,7 +290,7 @@ namespace sfx2
bool
checkMacrosOnLoading(
const css::uno::Reference< css::task::XInteractionHandler >& _rxInteraction,
- bool bHasValidContentSignature = false
+ bool bHasValidContentSignature, bool bHasMacros
);
private:
diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index ef1a0a33e1dc..fde0dba3d7c9 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -433,6 +433,9 @@ public:
void SetMacroCallsSeenWhileLoading();
bool GetMacroCallsSeenWhileLoading() const;
+ // true if the document had macros (or similar) on load to trigger warning user
+ bool GetHadCheckedMacrosOnLoad() const;
+
const css::uno::Sequence< css::beans::PropertyValue >& GetModifyPasswordInfo() const;
bool SetModifyPasswordInfo( const css::uno::Sequence< css::beans::PropertyValue >& aInfo );
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index b0a91cb397d8..92caea1ea459 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -26,7 +26,9 @@
#include <sfx2/docfile.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/objsh.hxx>
+#include <sfx2/sfxresid.hxx>
#include <sfx2/sfxsids.hrc>
+#include <sfx2/strings.hrc>
#include <sfx2/viewfrm.hxx>
#include <sfx2/viewsh.hxx>
#include <svl/intitem.hxx>
@@ -772,7 +774,7 @@ void ScGlobal::OpenURL(const OUString& rURL, const OUString& rTarget, bool bIgno
OUString aUrlName( rURL );
SfxViewFrame* pFrame = nullptr;
- const SfxObjectShell* pObjShell = nullptr;
+ SfxObjectShell* pObjShell = nullptr;
OUString aReferName;
if ( pScActiveViewShell )
{
@@ -806,6 +808,35 @@ void ScGlobal::OpenURL(const OUString& rURL, const OUString& rTarget, bool bIgno
aUrlName = aNewUrlName;
}
+ if (INetURLObject(aUrlName).IsExoticProtocol())
+ {
+ // Default to ignoring exotic protocols
+ bool bAllow = false;
+ if (pObjShell)
+ {
+ // If the document had macros when loaded then follow the allowed macro-mode
+ if (pObjShell->GetHadCheckedMacrosOnLoad())
+ bAllow = pObjShell->AdjustMacroMode();
+ else // otherwise ask the user, defaulting to cancel
+ {
+ assert(pFrame && "if we have pObjShell we have pFrame");
+ //Reuse URITools::onOpenURI warning string
+ std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(pFrame->GetFrameWeld(),
+ VclMessageType::Warning, VclButtonsType::YesNo,
+ SfxResId(STR_DANGEROUS_TO_OPEN)));
+ xQueryBox->set_primary_text(xQueryBox->get_primary_text().replaceFirst("$(ARG1)",
+ INetURLObject::decode(aUrlName, INetURLObject::DecodeMechanism::Unambiguous)));
+ xQueryBox->set_default_response(RET_NO);
+ bAllow = xQueryBox->run() == RET_YES;
+ }
+ }
+ if (!bAllow)
+ {
+ SAL_WARN("sc", "ScGlobal::OpenURL ignoring: " << aUrlName);
+ return;
+ }
+ }
+
SfxStringItem aUrl( SID_FILE_NAME, aUrlName );
SfxStringItem aTarget( SID_TARGETNAME, rTarget );
if ( nScClickMouseModifier & KEY_SHIFT ) // control-click -> into new window
diff --git a/sfx2/source/doc/docmacromode.cxx b/sfx2/source/doc/docmacromode.cxx
index bdae350b22f5..d8757c7a505d 100644
--- a/sfx2/source/doc/docmacromode.cxx
+++ b/sfx2/source/doc/docmacromode.cxx
@@ -403,8 +403,12 @@ namespace sfx2
return bHasMacros;
}
+ bool DocumentMacroMode::hasMacros() const
+ {
+ return m_xData->m_rDocumentAccess.documentStorageHasMacros() || hasMacroLibrary() || m_xData->m_rDocumentAccess.macroCallsSeenWhileLoading();
+ }
- bool DocumentMacroMode::checkMacrosOnLoading( const Reference< XInteractionHandler >& rxInteraction, bool bHasValidContentSignature )
+ bool DocumentMacroMode::checkMacrosOnLoading( const Reference< XInteractionHandler >& rxInteraction, bool bHasValidContentSignature, bool bHasMacros )
{
bool bAllow = false;
if ( SvtSecurityOptions().IsMacroDisabled() )
@@ -414,7 +418,7 @@ namespace sfx2
}
else
{
- if (m_xData->m_rDocumentAccess.documentStorageHasMacros() || hasMacroLibrary() || m_xData->m_rDocumentAccess.macroCallsSeenWhileLoading())
+ if (bHasMacros)
{
if (m_xData->m_rDocumentAccess.macroCallsSeenWhileLoading())
m_bNeedsContentSigned = true;
diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx
index 6b86e2163ccb..ddf95eeafe5e 100644
--- a/sfx2/source/doc/objmisc.cxx
+++ b/sfx2/source/doc/objmisc.cxx
@@ -944,9 +944,15 @@ void SfxObjectShell::CheckSecurityOnLoading_Impl()
// check macro security
const bool bHasValidContentSignature = HasValidSignatures();
- pImpl->aMacroMode.checkMacrosOnLoading( xInteraction, bHasValidContentSignature );
+ const bool bHasMacros = pImpl->aMacroMode.hasMacros();
+ pImpl->aMacroMode.checkMacrosOnLoading( xInteraction, bHasValidContentSignature, bHasMacros );
+ pImpl->m_bHadCheckedMacrosOnLoad = bHasMacros;
}
+bool SfxObjectShell::GetHadCheckedMacrosOnLoad() const
+{
+ return pImpl->m_bHadCheckedMacrosOnLoad;
+}
void SfxObjectShell::CheckEncryption_Impl( const uno::Reference< task::XInteractionHandler >& xHandler )
{
diff --git a/sfx2/source/doc/objxtor.cxx b/sfx2/source/doc/objxtor.cxx
index c7f34aeadc31..ae6f713251ea 100644
--- a/sfx2/source/doc/objxtor.cxx
+++ b/sfx2/source/doc/objxtor.cxx
@@ -211,6 +211,7 @@ SfxObjectShell_Impl::SfxObjectShell_Impl( SfxObjectShell& _rDocShell )
,m_bAllowShareControlFileClean( true )
,m_bConfigOptionsChecked( false )
,m_bMacroCallsSeenWhileLoading( false )
+ ,m_bHadCheckedMacrosOnLoad( false )
,lErr(ERRCODE_NONE)
,nEventId ( SfxEventHintId::NONE )
,nLoadedFlags ( SfxLoadedFlags::ALL )
diff --git a/sfx2/source/inc/objshimp.hxx b/sfx2/source/inc/objshimp.hxx
index 192470e5542d..b011b3737d66 100644
--- a/sfx2/source/inc/objshimp.hxx
+++ b/sfx2/source/inc/objshimp.hxx
@@ -90,7 +90,8 @@ struct SfxObjectShell_Impl : public ::sfx2::IMacroDocumentAccess
m_bSharedXMLFlag:1, // whether the document should be edited in shared mode
m_bAllowShareControlFileClean:1, // whether the flag should be stored in xml file
m_bConfigOptionsChecked:1, // whether or not the user options are checked after the Options dialog is closed.
- m_bMacroCallsSeenWhileLoading:1; // whether or not the user options are checked after the Options dialog is closed.
+ m_bMacroCallsSeenWhileLoading:1, // whether or not macro calls were seen when loading document.
+ m_bHadCheckedMacrosOnLoad:1; // if document contained macros (or calls) when loaded
IndexBitSet aBitSet;
ErrCode lErr;
--------------erAck-patch-parts--

@ -0,0 +1,53 @@
From 71c3a616c4ebd9705827382d3cddc6b93c1dbdfa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Thu, 20 Apr 2023 20:58:21 +0100
Subject: [PATCH 3/3] assume IFrame script/macro support isn't needed
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
seems undocumented at least
Change-Id: I316e4f4f25ddb7cf6b7bac4d856a721b987207a3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151020
Tested-by: Jenkins
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152154
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 797d92b5d1c33e8ca22450768533e9d5dc05f82f)
---
sfx2/source/doc/iframe.cxx | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx
index 73030f151359..e73fb1f1f2d1 100644
--- a/sfx2/source/doc/iframe.cxx
+++ b/sfx2/source/doc/iframe.cxx
@@ -166,20 +166,16 @@ sal_Bool SAL_CALL IFrameObject::load(
uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) );
xTrans->parseStrict( aTargetURL );
+ INetURLObject aURLObject(aTargetURL.Complete);
+ if (aURLObject.GetProtocol() == INetProtocol::Macro || aURLObject.isSchemeEqualTo(u"vnd.sun.star.script"))
+ return false;
+
uno::Reference<frame::XFramesSupplier> xParentFrame = xFrame->getCreator();
SfxObjectShell* pDoc = SfxMacroLoader::GetObjectShell(xParentFrame);
- if (INetURLObject(aTargetURL.Complete).GetProtocol() == INetProtocol::Macro)
- {
- if (pDoc && !pDoc->AdjustMacroMode())
- return false;
- }
-
bool bUpdateAllowed(true);
if (pDoc)
{
- // perhaps should only check for file targets, but lets default to making it strong
- // unless there is a known need to distinguish
comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = pDoc->getEmbeddedObjectContainer();
bUpdateAllowed = rEmbeddedObjectContainer.getUserAllowsLinkUpdate();
}
--
2.41.0

@ -0,0 +1,113 @@
From 0aac66b96fcfa7f8c2c265afec59eb4b3f51c131 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Wed, 23 Mar 2022 13:03:30 +0000
Subject: [PATCH 4/5] CVE-2022-2630[6|7] add infobar to prompt to refresh to
replace old format
Change-Id: Id99cbf2b50a4ebf289dae6fc67e22e20afcda35b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131976
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit bbd196ff82bda9f66b4ba32a412f10cefe6da60e)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132307
Reviewed-by: Sophie Gautier <sophi@libreoffice.org>
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
(cherry picked from commit c5d01b11db3c83cb4a89d3b388d78e20dd3990b5)
---
include/sfx2/strings.hrc | 2 ++
include/sfx2/viewfrm.hxx | 1 +
sfx2/source/view/viewfrm.cxx | 39 +++++++++++++++++++++++++++++++++++-
3 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index cb627807d8c8..317dd88061df 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -292,6 +292,8 @@
#define STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK NC_("STR_SIGNATURE_NOTVALIDATED_PARTIAL_OK", "The certificate could not be validated and the document is only partially signed.")
#define STR_SIGNATURE_OK NC_("STR_SIGNATURE_OK", "This document is digitally signed and the signature is valid.")
#define STR_SIGNATURE_SHOW NC_("STR_SIGNATURE_SHOW", "Show Signatures")
+#define STR_REFRESH_MASTER_PASSWORD NC_("STR_REFRESH_MASTER_PASSWORD", "The master password is stored in an outdated format, you should refresh it")
+#define STR_REFRESH_PASSWORD NC_("STR_REFRESH_PASSWORD", "Refresh Password")
#define STR_CLOSE_PANE NC_("STR_CLOSE_PANE", "Close Pane")
diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx
index aedd362f8781..dc01c088f1f7 100644
--- a/include/sfx2/viewfrm.hxx
+++ b/include/sfx2/viewfrm.hxx
@@ -64,6 +64,7 @@ protected:
DECL_LINK(WhatsNewHandler, weld::Button&, void);
DECL_LINK(SwitchReadOnlyHandler, weld::Button&, void);
DECL_LINK(SignDocumentHandler, weld::Button&, void);
+ DECL_DLLPRIVATE_LINK(RefreshMasterPasswordHdl, weld::Button&, void);
SAL_DLLPRIVATE void KillDispatcher_Impl();
virtual ~SfxViewFrame() override;
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 46a7c4d9dc42..0f90af8bfb34 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -32,7 +32,7 @@
#include <com/sun/star/frame/XLoadable.hpp>
#include <com/sun/star/frame/XLayoutManager.hpp>
#include <com/sun/star/frame/XComponentLoader.hpp>
-#include <com/sun/star/drawing/XShapes.hpp>
+#include <com/sun/star/task/PasswordContainer.hpp>
#include <officecfg/Office/Common.hxx>
#include <officecfg/Setup.hxx>
#include <toolkit/helper/vclunohelper.hxx>
@@ -1413,6 +1413,22 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
batch->commit();
}
+ if (officecfg::Office::Common::Passwords::HasMaster::get() &&
+ officecfg::Office::Common::Passwords::StorageVersion::get() == 0)
+ {
+ // master password stored in deprecated format
+ VclPtr<SfxInfoBarWindow> pOldMasterPasswordInfoBar =
+ AppendInfoBar("oldmasterpassword", "",
+ SfxResId(STR_REFRESH_MASTER_PASSWORD), InfobarType::DANGER, false);
+ if (pOldMasterPasswordInfoBar)
+ {
+ weld::Button& rButton = pOldMasterPasswordInfoBar->addButton();
+ rButton.set_label(SfxResId(STR_REFRESH_PASSWORD));
+ rButton.connect_clicked(LINK(this,
+ SfxViewFrame, RefreshMasterPasswordHdl));
+ }
+ }
+
// read-only infobar if necessary
const SfxViewShell *pVSh;
const SfxShell *pFSh;
@@ -1561,6 +1577,27 @@ IMPL_LINK_NOARG(SfxViewFrame, SignDocumentHandler, weld::Button&, void)
GetDispatcher()->Execute(SID_SIGNATURE);
}
+IMPL_LINK_NOARG(SfxViewFrame, RefreshMasterPasswordHdl, weld::Button&, void)
+{
+ bool bChanged = false;
+ try
+ {
+ Reference< task::XPasswordContainer2 > xMasterPasswd(
+ task::PasswordContainer::create(comphelper::getProcessComponentContext()));
+
+ css::uno::Reference<css::frame::XFrame> xFrame = GetFrame().GetFrameInterface();
+ css::uno::Reference<css::awt::XWindow> xContainerWindow = xFrame->getContainerWindow();
+
+ uno::Reference<task::XInteractionHandler> xTmpHandler(task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(),
+ xContainerWindow));
+ bChanged = xMasterPasswd->changeMasterPassword(xTmpHandler);
+ }
+ catch (const Exception&)
+ {}
+ if (bChanged)
+ RemoveInfoBar(u"oldmasterpassword");
+}
+
void SfxViewFrame::Construct_Impl( SfxObjectShell *pObjSh )
{
m_pImpl->bResizeInToOut = true;
--
2.37.3

@ -0,0 +1,281 @@
From 6a69b533227ae22d97824317f14dfa6991959101 Mon Sep 17 00:00:00 2001
Message-ID: <6a69b533227ae22d97824317f14dfa6991959101.1703086328.git.erack@redhat.com>
In-Reply-To: <82752ccba78ecdbf94908377ec022f68ba7d9d59.1703086328.git.erack@redhat.com>
References: <82752ccba78ecdbf94908377ec022f68ba7d9d59.1703086328.git.erack@redhat.com>
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolan.mcnamara@collabora.com>
Date: Wed, 15 Nov 2023 11:39:24 +0000
Subject: [PATCH 3/4] reuse AllowedLinkProtocolFromDocument in writer
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
reorg calc hyperlink check to reuse elsewhere
Change-Id: I20ae3c5df15502c3a0a366fb4a2924c06ffac3d0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159487
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit e6a7537762e19fde446441edd10d301f9b37ce75)
reuse AllowedLinkProtocolFromDocument in writer
Change-Id: Iacf5e313fc6ca5f7d69ca6986a036f0e1ab1f2a0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159488
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 32535dfa82200b54296838b52285c054fbe5e51d)
combine these hyperlink dispatchers into one call
Change-Id: Icb7822e811013de648ccf2fbb23a5f0be9e29bb0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159489
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 0df175ccc6ea542bc5801f631ff72bed187042eb)
we can have just one LoadURL for writer
Change-Id: Ia0162ee1c275292fcf200bad4662e4c2c6b7b972
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159557
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit 521ca9cf6acbae96cf95d9740859c9682212013d)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159858
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit e32b8601dbd63cf01497889601d6c9c1241106d6)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159883
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159913
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Reviewed-by: Eike Rathke <erack@redhat.com>
---
include/sfx2/objsh.hxx | 7 +++--
sc/source/core/data/global.cxx | 32 ++---------------------
sfx2/source/doc/objmisc.cxx | 27 ++++++++++++++++++++
sw/source/uibase/shells/drwtxtex.cxx | 8 ++----
sw/source/uibase/wrtsh/wrtsh2.cxx | 38 ++++++++++++++++++----------
5 files changed, 60 insertions(+), 52 deletions(-)
--------------erAck-patch-parts
Content-Type: text/x-patch; name="0003-reuse-AllowedLinkProtocolFromDocument-in-writer.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0003-reuse-AllowedLinkProtocolFromDocument-in-writer.patch"
diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index fde0dba3d7c9..79f22c978dcb 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -200,6 +200,9 @@ private:
SAL_DLLPRIVATE bool SaveTo_Impl(SfxMedium &rMedium, const SfxItemSet* pSet );
+ // true if the document had macros (or similar) on load to trigger warning user
+ SAL_DLLPRIVATE bool GetHadCheckedMacrosOnLoad() const;
+
protected:
SfxObjectShell(SfxObjectCreateMode);
SfxObjectShell(SfxModelFlags); // see sfxmodelfactory.hxx
@@ -427,8 +430,8 @@ public:
void SetMacroCallsSeenWhileLoading();
bool GetMacroCallsSeenWhileLoading() const;
- // true if the document had macros (or similar) on load to trigger warning user
- bool GetHadCheckedMacrosOnLoad() const;
+ // true if this type of link, from a document, is allowed by the user to be passed to uno:OpenDoc
+ static bool AllowedLinkProtocolFromDocument(const OUString& rUrl, SfxObjectShell* pObjShell, weld::Window* pDialogParent);
const css::uno::Sequence< css::beans::PropertyValue >& GetModifyPasswordInfo() const;
bool SetModifyPasswordInfo( const css::uno::Sequence< css::beans::PropertyValue >& aInfo );
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index 92caea1ea459..27c5a51a46c1 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -29,9 +29,7 @@
#include <sfx2/docfile.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/objsh.hxx>
-#include <sfx2/sfxresid.hxx>
#include <sfx2/sfxsids.hrc>
-#include <sfx2/strings.hrc>
#include <sfx2/viewfrm.hxx>
#include <sfx2/viewsh.hxx>
#include <svl/intitem.hxx>
@@ -856,34 +854,8 @@ void ScGlobal::OpenURL(const OUString& rURL, const OUString& rTarget, bool bIgno
aUrlName = aNewUrlName;
}
- if (INetURLObject(aUrlName).IsExoticProtocol())
- {
- // Default to ignoring exotic protocols
- bool bAllow = false;
- if (pObjShell)
- {
- // If the document had macros when loaded then follow the allowed macro-mode
- if (pObjShell->GetHadCheckedMacrosOnLoad())
- bAllow = pObjShell->AdjustMacroMode();
- else // otherwise ask the user, defaulting to cancel
- {
- assert(pFrame && "if we have pObjShell we have pFrame");
- //Reuse URITools::onOpenURI warning string
- std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(pFrame->GetFrameWeld(),
- VclMessageType::Warning, VclButtonsType::YesNo,
- SfxResId(STR_DANGEROUS_TO_OPEN)));
- xQueryBox->set_primary_text(xQueryBox->get_primary_text().replaceFirst("$(ARG1)",
- INetURLObject::decode(aUrlName, INetURLObject::DecodeMechanism::Unambiguous)));
- xQueryBox->set_default_response(RET_NO);
- bAllow = xQueryBox->run() == RET_YES;
- }
- }
- if (!bAllow)
- {
- SAL_WARN("sc", "ScGlobal::OpenURL ignoring: " << aUrlName);
- return;
- }
- }
+ if (!SfxObjectShell::AllowedLinkProtocolFromDocument(aUrlName, pObjShell, pFrame ? pFrame->GetFrameWeld() : nullptr))
+ return;
SfxStringItem aUrl( SID_FILE_NAME, aUrlName );
SfxStringItem aTarget( SID_TARGETNAME, rTarget );
diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx
index ddf95eeafe5e..8c76c3f0f4d6 100644
--- a/sfx2/source/doc/objmisc.cxx
+++ b/sfx2/source/doc/objmisc.cxx
@@ -962,6 +962,33 @@ bool SfxObjectShell::GetHadCheckedMacrosOnLoad() const
return pImpl->m_bHadCheckedMacrosOnLoad;
}
+bool SfxObjectShell::AllowedLinkProtocolFromDocument(const OUString& rUrl, SfxObjectShell* pObjShell, weld::Window* pDialogParent)
+{
+ if (!INetURLObject(rUrl).IsExoticProtocol())
+ return true;
+ // Default to ignoring exotic protocols
+ bool bAllow = false;
+ if (pObjShell)
+ {
+ // If the document had macros when loaded then follow the allowed macro-mode
+ if (pObjShell->GetHadCheckedMacrosOnLoad())
+ bAllow = pObjShell->AdjustMacroMode();
+ else // otherwise ask the user, defaulting to cancel
+ {
+ //Reuse URITools::onOpenURI warning string
+ std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(pDialogParent,
+ VclMessageType::Warning, VclButtonsType::YesNo,
+ SfxResId(STR_DANGEROUS_TO_OPEN)));
+ xQueryBox->set_primary_text(xQueryBox->get_primary_text().replaceFirst("$(ARG1)",
+ INetURLObject::decode(rUrl, INetURLObject::DecodeMechanism::Unambiguous)));
+ xQueryBox->set_default_response(RET_NO);
+ bAllow = xQueryBox->run() == RET_YES;
+ }
+ }
+ SAL_WARN_IF(!bAllow, "sfx.appl", "SfxObjectShell::AllowedLinkProtocolFromDocument ignoring: " << rUrl);
+ return bAllow;
+}
+
void SfxObjectShell::CheckEncryption_Impl( const uno::Reference< task::XInteractionHandler >& xHandler )
{
OUString aVersion;
diff --git a/sw/source/uibase/shells/drwtxtex.cxx b/sw/source/uibase/shells/drwtxtex.cxx
index c84ee7bd9af4..c51f501841ad 100644
--- a/sw/source/uibase/shells/drwtxtex.cxx
+++ b/sw/source/uibase/shells/drwtxtex.cxx
@@ -533,12 +533,8 @@ void SwDrawTextShell::Execute( SfxRequest &rReq )
const SvxFieldData* pField = pOLV->GetFieldAtCursor();
if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
{
- SfxStringItem aUrl(SID_FILE_NAME, pURLField->GetURL());
- SfxStringItem aTarget(SID_TARGETNAME, pURLField->GetTargetFrame());
- SfxBoolItem aNewView(SID_OPEN_NEW_VIEW, false);
- SfxBoolItem aBrowsing(SID_BROWSE, true);
- GetView().GetViewFrame()->GetDispatcher()->ExecuteList(
- SID_OPENDOC, SfxCallMode::SYNCHRON, { &aUrl, &aTarget, &aNewView, &aBrowsing });
+ ::LoadURL(GetShell(), pURLField->GetURL(), LoadUrlFlags::NONE,
+ pURLField->GetTargetFrame());
}
}
break;
diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx
index 1995e7133c4a..d781823e82ec 100644
--- a/sw/source/uibase/wrtsh/wrtsh2.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh2.cxx
@@ -501,30 +501,24 @@ bool SwWrtShell::ClickToINetGrf( const Point& rDocPt, LoadUrlFlags nFilter )
return bRet;
}
-void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
- const OUString& rTargetFrameName )
+static void LoadURL(SwView& rView, const OUString& rURL, LoadUrlFlags nFilter,
+ const OUString& rTargetFrameName)
{
- OSL_ENSURE( !rURL.isEmpty(), "what should be loaded here?" );
- if( rURL.isEmpty() )
- return ;
+ SwDocShell* pDShell = rView.GetDocShell();
+ OSL_ENSURE( pDShell, "No DocShell?!");
+ SfxViewFrame* pViewFrame = rView.GetViewFrame();
- // The shell could be 0 also!!!!!
- if ( dynamic_cast<const SwCursorShell*>( &rVSh) == nullptr )
+ if (!SfxObjectShell::AllowedLinkProtocolFromDocument(rURL, pDShell, pViewFrame->GetFrameWeld()))
return;
// We are doing tiledRendering, let the client handles the URL loading,
// unless we are jumping to a TOC mark.
if (comphelper::LibreOfficeKit::isActive() && !rURL.startsWith("#"))
{
- rVSh.GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_HYPERLINK_CLICKED, rURL.toUtf8().getStr());
+ rView.libreOfficeKitViewCallback(LOK_CALLBACK_HYPERLINK_CLICKED, rURL.toUtf8().getStr());
return;
}
- //A CursorShell is always a WrtShell
- SwWrtShell &rSh = static_cast<SwWrtShell&>(rVSh);
-
- SwDocShell* pDShell = rSh.GetView().GetDocShell();
- OSL_ENSURE( pDShell, "No DocShell?!");
OUString sTargetFrame(rTargetFrameName);
if (sTargetFrame.isEmpty() && pDShell)
{
@@ -539,7 +533,6 @@ void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
OUString sReferer;
if( pDShell && pDShell->GetMedium() )
sReferer = pDShell->GetMedium()->GetName();
- SfxViewFrame* pViewFrame = rSh.GetView().GetViewFrame();
SfxFrameItem aView( SID_DOCFRAME, pViewFrame );
SfxStringItem aName( SID_FILE_NAME, rURL );
SfxStringItem aTargetFrameName( SID_TARGETNAME, sTargetFrame );
@@ -565,6 +558,23 @@ void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
SfxCallMode::ASYNCHRON|SfxCallMode::RECORD );
}
+void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
+ const OUString& rTargetFrameName )
+{
+ OSL_ENSURE( !rURL.isEmpty(), "what should be loaded here?" );
+ if( rURL.isEmpty() )
+ return ;
+
+ // The shell could be 0 also!!!!!
+ if ( dynamic_cast<const SwCursorShell*>( &rVSh) == nullptr )
+ return;
+
+ //A CursorShell is always a WrtShell
+ SwWrtShell &rSh = static_cast<SwWrtShell&>(rVSh);
+
+ ::LoadURL(rSh.GetView(), rURL, nFilter, rTargetFrameName);
+}
+
void SwWrtShell::NavigatorPaste( const NaviContentBookmark& rBkmk,
const sal_uInt16 nAction )
{
--------------erAck-patch-parts--

@ -0,0 +1,292 @@
From 86c29694ddf10b51ecd76b4f1397d798f62cc709 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann <sbergman@redhat.com>
Date: Tue, 30 Aug 2022 14:04:52 +0200
Subject: [PATCH 5/5] CVE-2022-3140 Filter out unwanted command URIs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139225
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit 27d29f7df428885865a8e2313283839b20f2a34b)
Conflicts:
desktop/source/app/cmdlineargs.cxx
Change-Id: I0b7e5329af8cc053d14d5c60ec14fe7f364ef993
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139182
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit da291e2960b75153f41d440a1b41961567432e8c)
These commands are always URLs already
Change-Id: I5083765c879689d7f933bbe00ad70bb68e635a21
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139042
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit e61701e1ee6763de72b397e6ade1124eca9400f3)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138980
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 5b4025bb56999f5c895c6f7e0b52f521800d65b0)
check IFrame "FrameURL" target
similiar to
commit b3edf85e0fe6ca03dc26e1bf531be82193bc9627
Date: Wed Aug 7 17:37:11 2019 +0100
warn on load when a document binds an event to a macro
Change-Id: Iea888b1c083d2dc69ec322309ac9ae8c5e5eb315
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139059
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit c7450d0b9d02c64ae3da467d329040787039767e)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139117
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
(cherry picked from commit f5e3b0a7966d7d28817292adbb58fb43f28b7c6d)
check impress/calc IFrame "FrameURL" target
similar to
commit c7450d0b9d02c64ae3da467d329040787039767e
Date: Tue Aug 30 17:01:08 2022 +0100
check IFrame "FrameURL" target
Change-Id: Ibf28c29acb4476830431d02772f3ecd4b23a6a27
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139495
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
(cherry picked from commit d0312786571221c2dd4f63fa69f6f0489d7d39ec)
---
desktop/source/app/cmdlineargs.cxx | 10 +++++++++-
sfx2/source/appl/macroloader.cxx | 9 +++++++--
sfx2/source/doc/iframe.cxx | 21 ++++++++++++++++-----
sfx2/source/inc/macroloader.hxx | 2 ++
sw/source/filter/html/htmlplug.cxx | 7 ++++++-
sw/source/filter/xml/xmltexti.cxx | 9 +++++++--
wizards/source/access2base/DoCmd.xba | 2 +-
wizards/source/scriptforge/SF_Session.xba | 2 +-
xmloff/source/draw/ximpshap.cxx | 4 ++++
9 files changed, 53 insertions(+), 13 deletions(-)
diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx
index 4d5a3bb78396..93d9e8742ba8 100644
--- a/desktop/source/app/cmdlineargs.cxx
+++ b/desktop/source/app/cmdlineargs.cxx
@@ -28,6 +28,7 @@
#include "cmdlineargs.hxx"
#include <osl/thread.hxx>
#include <tools/stream.hxx>
+#include <tools/urlobj.hxx>
#include <rtl/ustring.hxx>
#include <rtl/process.h>
#include <comphelper/lok.hxx>
@@ -166,7 +167,14 @@ CommandLineEvent CheckOfficeURI(/* in,out */ OUString& arg, CommandLineEvent cur
}
if (nURIlen < 0)
nURIlen = rest2.getLength();
- arg = rest2.copy(0, nURIlen);
+ auto const uri = rest2.copy(0, nURIlen);
+ if (INetURLObject(uri).GetProtocol() == INetProtocol::Macro) {
+ // Let the "Open" machinery process the full command URI (leading to failure, by intention,
+ // as the "Open" machinery does not know about those command URI schemes):
+ curEvt = CommandLineEvent::Open;
+ } else {
+ arg = uri;
+ }
return curEvt;
}
diff --git a/sfx2/source/appl/macroloader.cxx b/sfx2/source/appl/macroloader.cxx
index 46090f712665..ad70ef5fa0f6 100644
--- a/sfx2/source/appl/macroloader.cxx
+++ b/sfx2/source/appl/macroloader.cxx
@@ -68,10 +68,10 @@ css::uno::Sequence<OUString> SAL_CALL SfxMacroLoader::getSupportedServiceNames()
return { "com.sun.star.frame.ProtocolHandler" };
}
-SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl()
+SfxObjectShell* SfxMacroLoader::GetObjectShell(const Reference <XFrame>& xFrame)
{
SfxObjectShell* pDocShell = nullptr;
- Reference < XFrame > xFrame( m_xFrame.get(), UNO_QUERY );
+
if ( xFrame.is() )
{
SfxFrame* pFrame=nullptr;
@@ -88,6 +88,11 @@ SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl()
return pDocShell;
}
+SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl()
+{
+ Reference < XFrame > xFrame( m_xFrame.get(), UNO_QUERY );
+ return SfxMacroLoader::GetObjectShell(xFrame);
+}
uno::Reference<frame::XDispatch> SAL_CALL SfxMacroLoader::queryDispatch(
const util::URL& aURL ,
diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx
index e37607c91a46..3f9036a79b04 100644
--- a/sfx2/source/doc/iframe.cxx
+++ b/sfx2/source/doc/iframe.cxx
@@ -38,10 +38,12 @@
#include <officecfg/Office/Common.hxx>
#include <svl/itemprop.hxx>
#include <sfx2/frmdescr.hxx>
+#include <sfx2/objsh.hxx>
#include <sfx2/sfxdlg.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <vcl/window.hxx>
#include <tools/debug.hxx>
+#include <macroloader.hxx>
using namespace ::com::sun::star;
@@ -157,6 +159,19 @@ sal_Bool SAL_CALL IFrameObject::load(
{
if ( officecfg::Office::Common::Misc::PluginsEnabled::get() )
{
+ util::URL aTargetURL;
+ aTargetURL.Complete = maFrmDescr.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE );
+ uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) );
+ xTrans->parseStrict( aTargetURL );
+
+ if (INetURLObject(aTargetURL.Complete).GetProtocol() == INetProtocol::Macro)
+ {
+ uno::Reference<frame::XFramesSupplier> xParentFrame = xFrame->getCreator();
+ SfxObjectShell* pDoc = SfxMacroLoader::GetObjectShell(xParentFrame);
+ if (pDoc && !pDoc->AdjustMacroMode())
+ return false;
+ }
+
DBG_ASSERT( !mxFrame.is(), "Frame already existing!" );
VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow( xFrame->getContainerWindow() );
VclPtr<IFrameWindow_Impl> pWin = VclPtr<IFrameWindow_Impl>::Create( pParent, maFrmDescr.IsFrameBorderOn() );
@@ -179,16 +194,12 @@ sal_Bool SAL_CALL IFrameObject::load(
if ( xFramesSupplier.is() )
mxFrame->setCreator( xFramesSupplier );
- util::URL aTargetURL;
- aTargetURL.Complete = maFrmDescr.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE );
- uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) );
- xTrans->parseStrict( aTargetURL );
-
uno::Sequence < beans::PropertyValue > aProps(2);
aProps[0].Name = "PluginMode";
aProps[0].Value <<= sal_Int16(2);
aProps[1].Name = "ReadOnly";
aProps[1].Value <<= true;
+
uno::Reference < frame::XDispatch > xDisp = mxFrame->queryDispatch( aTargetURL, "_self", 0 );
if ( xDisp.is() )
xDisp->dispatch( aTargetURL, aProps );
diff --git a/sfx2/source/inc/macroloader.hxx b/sfx2/source/inc/macroloader.hxx
index 051486c09adf..62a6555ff877 100644
--- a/sfx2/source/inc/macroloader.hxx
+++ b/sfx2/source/inc/macroloader.hxx
@@ -79,6 +79,8 @@ public:
virtual void SAL_CALL addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override;
virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override;
+
+ static SfxObjectShell* GetObjectShell(const css::uno::Reference<css::frame::XFrame>& xFrame);
};
#endif
diff --git a/sw/source/filter/html/htmlplug.cxx b/sw/source/filter/html/htmlplug.cxx
index 65e0419f4ed9..90036cfac67a 100644
--- a/sw/source/filter/html/htmlplug.cxx
+++ b/sw/source/filter/html/htmlplug.cxx
@@ -1090,7 +1090,12 @@ void SwHTMLParser::InsertFloatingFrame()
bool bHasBorder = aFrameDesc.HasFrameBorder();
Size aMargin = aFrameDesc.GetMargin();
- xSet->setPropertyValue("FrameURL", uno::makeAny( aFrameDesc.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE ) ) );
+ OUString sHRef = aFrameDesc.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE );
+
+ if (INetURLObject(sHRef).GetProtocol() == INetProtocol::Macro)
+ NotifyMacroEventRead();
+
+ xSet->setPropertyValue("FrameURL", uno::makeAny( sHRef ) );
xSet->setPropertyValue("FrameName", uno::makeAny( aName ) );
if ( eScroll == ScrollingMode::Auto )
diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx
index cf0c7e6a85ba..eaf45dd91cd4 100644
--- a/sw/source/filter/xml/xmltexti.cxx
+++ b/sw/source/filter/xml/xmltexti.cxx
@@ -857,9 +857,14 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertFloatingFra
uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY );
if ( xSet.is() )
{
+ OUString sHRef = URIHelper::SmartRel2Abs(
+ INetURLObject( GetXMLImport().GetBaseURL() ), rHRef );
+
+ if (INetURLObject(sHRef).GetProtocol() == INetProtocol::Macro)
+ GetXMLImport().NotifyMacroEventRead();
+
xSet->setPropertyValue("FrameURL",
- makeAny( URIHelper::SmartRel2Abs(
- INetURLObject( GetXMLImport().GetBaseURL() ), rHRef ) ) );
+ makeAny( rHRef ) );
xSet->setPropertyValue("FrameName",
makeAny( rName ) );
diff --git a/wizards/source/access2base/DoCmd.xba b/wizards/source/access2base/DoCmd.xba
index 089486a872fa..20051553c47f 100644
--- a/wizards/source/access2base/DoCmd.xba
+++ b/wizards/source/access2base/DoCmd.xba
@@ -2655,7 +2655,7 @@ Private Sub _ShellExecute(sCommand As String)
Dim oShell As Object
Set oShell = createUnoService(&quot;com.sun.star.system.SystemShellExecute&quot;)
- oShell.execute(sCommand, &quot;&quot; , com.sun.star.system.SystemShellExecuteFlags.DEFAULTS)
+ oShell.execute(sCommand, &quot;&quot; , com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY)
End Sub &apos; _ShellExecute V0.8.5
diff --git a/wizards/source/scriptforge/SF_Session.xba b/wizards/source/scriptforge/SF_Session.xba
index a41bffa51377..7c709897947a 100644
--- a/wizards/source/scriptforge/SF_Session.xba
+++ b/wizards/source/scriptforge/SF_Session.xba
@@ -513,7 +513,7 @@ Check:
Try:
Set oShell = SF_Utils._GetUNOService(&quot;SystemShellExecute&quot;)
sCommand = SF_FileSystem._ConvertToUrl(Command)
- oShell.execute(sCommand, Parameters, com.sun.star.system.SystemShellExecuteFlags.DEFAULTS)
+ oShell.execute(sCommand, Parameters, com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY)
bReturn = True
Finally:
diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx
index 65a7e2fb0eef..4afa4e039776 100644
--- a/xmloff/source/draw/ximpshap.cxx
+++ b/xmloff/source/draw/ximpshap.cxx
@@ -87,6 +87,7 @@
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/vector/b2dvector.hxx>
+#include <tools/urlobj.hxx>
#include <o3tl/any.hxx>
#include <o3tl/safeint.hxx>
@@ -3231,6 +3232,9 @@ void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< cs
if( !maHref.isEmpty() )
{
+ if (INetURLObject(maHref).GetProtocol() == INetProtocol::Macro)
+ GetImport().NotifyMacroEventRead();
+
xProps->setPropertyValue("FrameURL", Any(maHref) );
}
}
--
2.37.3

@ -0,0 +1,99 @@
From 2b72aefb0ad620b4c5431a87f6493edba2563f27 Mon Sep 17 00:00:00 2001
Message-ID: <2b72aefb0ad620b4c5431a87f6493edba2563f27.1703086328.git.erack@redhat.com>
In-Reply-To: <82752ccba78ecdbf94908377ec022f68ba7d9d59.1703086328.git.erack@redhat.com>
References: <82752ccba78ecdbf94908377ec022f68ba7d9d59.1703086328.git.erack@redhat.com>
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolan.mcnamara@collabora.com>
Date: Wed, 22 Nov 2023 21:14:41 +0000
Subject: [PATCH 4/4] reuse AllowedLinkProtocolFromDocument in impress/draw
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: I73ca4f087946a45dbf92d69a0dc1e769de9b5690
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159843
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit f0942eed2eb328b04856f20613f5226d66b66a20)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159759
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159884
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159914
Reviewed-by: Eike Rathke <erack@redhat.com>
---
sd/source/ui/app/sdmod1.cxx | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
--------------erAck-patch-parts
Content-Type: text/x-patch; name="0004-reuse-AllowedLinkProtocolFromDocument-in-impress-dra.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0004-reuse-AllowedLinkProtocolFromDocument-in-impress-dra.patch"
diff --git a/sd/source/ui/app/sdmod1.cxx b/sd/source/ui/app/sdmod1.cxx
index 573ee853069b..b22feb2d1f21 100644
--- a/sd/source/ui/app/sdmod1.cxx
+++ b/sd/source/ui/app/sdmod1.cxx
@@ -33,6 +33,7 @@
#include <sfx2/docfile.hxx>
#include <sfx2/request.hxx>
#include <sfx2/templatedlg.hxx>
+#include <svl/stritem.hxx>
#include <editeng/eeitem.hxx>
#include <svx/svxids.hrc>
@@ -192,26 +193,32 @@ void SdModule::Execute(SfxRequest& rReq)
{
bool bIntercept = false;
::sd::DrawDocShell* pDocShell = dynamic_cast< ::sd::DrawDocShell *>( SfxObjectShell::Current() );
- if (pDocShell)
+ ::sd::ViewShell* pViewShell = pDocShell ? pDocShell->GetViewShell() : nullptr;
+ if (pViewShell)
{
- ::sd::ViewShell* pViewShell = pDocShell->GetViewShell();
- if (pViewShell)
+ if( sd::SlideShow::IsRunning( pViewShell->GetViewShellBase() ) )
{
- if( sd::SlideShow::IsRunning( pViewShell->GetViewShellBase() ) )
+ // Prevent documents from opening while the slide
+ // show is running, except when this request comes
+ // from a shape interaction.
+ if (rReq.GetArgs() == nullptr)
{
- // Prevent documents from opening while the slide
- // show is running, except when this request comes
- // from a shape interaction.
- if (rReq.GetArgs() == nullptr)
- {
- bIntercept = true;
- }
+ bIntercept = true;
}
}
}
if (!bIntercept)
{
+ if (const SfxStringItem* pURLItem = rReq.GetArg<SfxStringItem>(SID_FILE_NAME))
+ {
+ if (!pViewShell || !SfxObjectShell::AllowedLinkProtocolFromDocument(pURLItem->GetValue(),
+ pViewShell->GetObjectShell(),
+ pViewShell->GetFrameWeld()))
+ {
+ return;
+ }
+ }
SfxGetpApp()->ExecuteSlot(rReq, SfxGetpApp()->GetInterface());
}
else
--------------erAck-patch-parts--

@ -0,0 +1,65 @@
From 762ed044e9c696a58e2ab41bd16b57003717a6ce Mon Sep 17 00:00:00 2001
From: Eike Rathke <erack@redhat.com>
Date: Wed, 6 Mar 2024 23:19:34 +0100
Subject: [PATCH] CVE-2023-6186 backporting
Add dialog text string STR_DANGEROUS_TO_OPEN
as per upstream commit 70009098fd70df021048c540d1796c928554b494
SfxViewFrame doesn't have GetFrameWeld() yet, get from Window.
---
include/sfx2/strings.hrc | 1 +
sc/source/core/data/global.cxx | 4 +++-
sw/source/uibase/wrtsh/wrtsh2.cxx | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index 317dd88..b1bfa69 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -101,6 +101,7 @@
#define STR_GB NC_("STR_GB", "GB")
#define STR_QUERY_LASTVERSION NC_("STR_QUERY_LASTVERSION", "Cancel all changes?")
#define STR_NO_WEBBROWSER_FOUND NC_("STR_NO_WEBBROWSER_FOUND", "Opening \"$(ARG1)\" failed with error code $(ARG2) and message: \"$(ARG3)\"\nMaybe no web browser could be found on your system. In that case, please check your Desktop Preferences or install a web browser (for example, Firefox) in the default location requested during the browser installation.")
+#define STR_DANGEROUS_TO_OPEN NC_("STR_DANGEROUS_TO_OPEN", "It might be dangerous to open \"$(ARG1)\".\nDo you really want to open it?")
#define STR_NO_ABS_URI_REF NC_("STR_NO_ABS_URI_REF", "\"$(ARG1)\" cannot be passed to an external application to open it (e.g., it might not be an absolute URL, or might denote no existing file).")
#define STR_GID_INTERN NC_("STR_GID_INTERN", "Internal")
#define STR_GID_APPLICATION NC_("STR_GID_APPLICATION", "Application")
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index d2f7343..a066985 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -37,6 +37,8 @@
#include <vcl/virdev.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
+#include <vcl/weld.hxx>
+#include <vcl/window.hxx>
#include <unotools/charclass.hxx>
#include <unotools/securityoptions.hxx>
#include <osl/diagnose.h>
@@ -806,7 +808,7 @@ void ScGlobal::OpenURL(const OUString& rURL, const OUString& rTarget, bool bIgno
aUrlName = aNewUrlName;
}
- if (!SfxObjectShell::AllowedLinkProtocolFromDocument(aUrlName, pObjShell, pFrame ? pFrame->GetFrameWeld() : nullptr))
+ if (!SfxObjectShell::AllowedLinkProtocolFromDocument(aUrlName, pObjShell, pFrame ? pFrame->GetWindow().GetFrameWeld() : nullptr))
return;
SfxStringItem aUrl( SID_FILE_NAME, aUrlName );
diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx
index c91a8f3..7908814 100644
--- a/sw/source/uibase/wrtsh/wrtsh2.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh2.cxx
@@ -483,7 +483,7 @@ static void LoadURL(SwView& rView, const OUString& rURL, LoadUrlFlags nFilter,
OSL_ENSURE( pDShell, "No DocShell?!");
SfxViewFrame* pViewFrame = rView.GetViewFrame();
- if (!SfxObjectShell::AllowedLinkProtocolFromDocument(rURL, pDShell, pViewFrame->GetFrameWeld()))
+ if (!SfxObjectShell::AllowedLinkProtocolFromDocument(rURL, pDShell, pViewFrame->GetWindow().GetFrameWeld()))
return;
// We are doing tiledRendering, let the client handles the URL loading,
--
2.43.0

@ -1,10 +0,0 @@
--- a/configure~ 2024-08-22 09:49:41.957960557 -0500
+++ b/configure 2024-08-23 10:31:14.357014789 -0500
@@ -7399,7 +7399,6 @@
# AC_PROG_CC sets CFLAGS to -g -O2 if not set, avoid that (and avoid -O2 during AC_PROG_CC,
# Clang 12.0.1 occasionally SEGVs on some of the test invocations during AC_PROG_CC with -O2):
save_CFLAGS=$CFLAGS
- CFLAGS=-g

@ -1,16 +0,0 @@
diff -U 3 -dHrN a/sc/inc/arraysumfunctor.hxx b/sc/inc/arraysumfunctor.hxx
--- a/sc/inc/arraysumfunctor.hxx 2023-09-22 21:07:01.000000000 +0200
+++ b/sc/inc/arraysumfunctor.hxx 2023-10-01 09:13:03.523493665 +0200
@@ -85,8 +85,12 @@
inline KahanSum sumArray(const double* pArray, size_t nSize)
{
size_t i = 0;
+#if 0
const double* pCurrent = pArray;
KahanSum fSum = executeFast(i, nSize, pCurrent);
+#else
+ KahanSum fSum = 0.0;
+#endif
// sum rest of the array
for (; i < nSize; ++i)

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmcuNnsACgkQ9DSh76/u
rqNh6xAAnEXxRZq9jBXhRODcGhpns8AhbxjNk6VIynImKrT/lgSVNToo2xIfY6Pb
boPNvqu4q1Pf/OTvycph3EcxHN0KEeKvh1EQsfHZ69wj+PNlQ2RnMfQ87mDosApD
+RPCmOwJAqyys4f9UAyp5SICRgxofOHEOCVnynxq/hnPJLLv82ie8y4k8ZCHiajC
0HtllYeHW9fm2NZEYrB2Gtyo1FeofpQaykgmWfy3hK4uGtFh0MlYo2zva4PxLoJV
CJvlCMDstdUhlG+RlvDgdigwP3zbQ3Fy0k2OVTkeltFWQCBlwvOoQHTCh3iLWKZl
ne3dxvyBFsBpwkv9CjXdZWQpxDZ97WKLgTJ9BAXUSQ0u/EK9RlsE0WtqyedjmtkB
6sOZpTkd6gZ2nIVIDuotRGV5QxgKBrym2w3ZTDjp9GP9BmiXv/XfeiwGMdZi0BPv
NB92f3fjzN1tcWsMlA4FbB5SddLDKh6oo7LdtLl8Fj9w+R5qAF8ZHBzepQacOS/1
l4YbRyHpYCWUSYqicLn76ImFRNkeEi3S7N3NZiHWkLs1lKascARVKR6Vl+u+XWo+
6HK2CpCE6nXGxtbXrTm6bGaeMKf7snpq0k1OD7P2/ruowjn0CszjYtMDXhY75D4R
Mogzy+6epHRAr9xycJI6I9Q0lFhd1lHr7kJScYVwNmYMMD1yYVc=
=EkMr
-----END PGP SIGNATURE-----

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmGqk2oACgkQ9DSh76/u
rqPr6A//ViToQECHwnSk30IjrjyAP516Cgad9cONe+vz1bSLAo7urIAOwLSFot+T
CjRFvKIvMRt4m2pPiBQTfEAIqq4rWur4jP/5SDRz4oAdrZUNGztJp+MKeLtH3yxR
DyWbGxtr+XoC2c5wbWmL8SPSRXoZQAdnxqb/ie4Em3DVmSohCLkMeTBMxd5vagDz
jJsCv31SyGhMEkZy8TD903u9CDlwTc5heD4LL7iIX6XIozzhvywPhj8qF+8F0mj3
KJQBhJFoWJRYjb0Vi8pnnXpE/1USzaHtcLB3jkg5SwbrC0EzDxWBsLZiAbNA6jAk
RUch2zhzXoI/hyMKEG/pw2FdcvndDtnClYnszcx/hVBlS+35ZkLSp9SklUydj2Hg
/Xed86J+BY+IOIgiMHi2Vr8CDgzK3ZTYhqiFeKGqtf8Vxf6PcpJy2OYus56nCD9j
pyLyczwRPvlsXxiWY0kPLvOE4h7zYCw+vLlwH6VSSxEsD7G+vzFS2xt9l0z6SdhX
xDZF9V08TLpcWJ8/IkUdRutoOMazghOrfL97YjUjnWOVIxAAXA1EPietDLQPdcbB
+tCOqSqXaEkrM5dvZo07p3mEZjv1KxhWqtjE3DsyqKBfHt6d5j/q61+9/87uJxNT
Rgh1MLAxbeo6E2iwp3kmOS5NLfxXkRjTIKzqnxr02nXXOMXSOo0=
=I1bc
-----END PGP SIGNATURE-----

@ -1,257 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
Icon=libreoffice-base
Type=Application
Categories=Office;Database;X-Red-Hat-Base;X-MandrivaLinux-MoreApplications-Databases;
Exec=libreoffice --base %U
MimeType=application/vnd.oasis.opendocument.database;application/vnd.sun.xml.base;
Name=LibreOffice Base
Name[ru]=Редактор баз данных LibreOffice Base
GenericName=Database Development
GenericName[af]=Databasisontwikkeling
GenericName[ar]=تطوير قواعد البيانات
GenericName[as]=ডাটাবেইচ বিকাশ
GenericName[bg]=Разработване на бази от данни
GenericName[bn]=ডাটাবেস ডেভেলপমেন্ট
GenericName[br]=Diorren ar stlennvon
GenericName[ca]=Desenvolupament de bases de dades
GenericName[cs]=Vývoj databáze
GenericName[cy]=Datblygu Cronfa Ddata
GenericName[da]=Databaseudvikling
GenericName[de]=Datenbankentwicklung
GenericName[dz]=Database Development
GenericName[el]=Ανάπτυξη βάσεων δεδομένων
GenericName[en]=Database Development
GenericName[eo]=Datumbaza evoluigo
GenericName[es]=Desarrollo de bases de datos
GenericName[et]=Andmebaasihaldus
GenericName[eu]=Datu-baseen garapena
GenericName[fa]=تولید پایگاه داده
GenericName[fi]=Tietokantakehitys
GenericName[fr]=Développement de base de données
GenericName[fy]=Gegevensbank ûntwikkeling
GenericName[ga]=Forbairt Bunachar Sonraí
GenericName[gl]=Desenvolvemento de bases de datos
GenericName[gu]=ડેટાબેઝ ડેવલોપમેન્ટ
GenericName[he]=פיתוח מסדי נתונים
GenericName[hi]=डेटाबेस विकास
GenericName[hr]=Razvoj baze podataka
GenericName[hu]=Adatbázis-fejlesztés
GenericName[id]=Pengembangan Basis Data
GenericName[it]=Sviluppo di database
GenericName[ja]=データベース開発
GenericName[kk]=Дерекқор
GenericName[kn]=ದತ್ತಸಂಚಯ ಅಭಿವೃದ್ಧಿ
GenericName[ko]=데이터베이스 개발
GenericName[lt]=Duomenų bazės kūrimas
GenericName[lv]=Datubāžu izstrāde
GenericName[mai]=Database Development
GenericName[ml]=ഡേറ്റാബെയിസ് ഡവലപ്മെന്റ്
GenericName[mr]=कोष विकास
GenericName[nb]=Databaseutvikling
GenericName[nl]=Databaseontwikkeling
GenericName[nn]=Databaseutvikling
GenericName[nr]=Database Development
GenericName[nso]=Tšwetšopele ya dathapeisi
GenericName[or]=ତଥ୍ୟାଧାର ବିକାଶ
GenericName[pa_IN]=ਡਾਟਾਬੇਸ ਡਿਵੈਲਮੈਂਟ
GenericName[pl]=Opracowanie i rozwój bazy danych
GenericName[pt]=Desenvolvimento da base de dados
GenericName[pt_BR]=Desenvolvimento de banco de dados
GenericName[ro]=Dezvoltare de baze de date
GenericName[ru]=База данных
GenericName[si]=දත්තසමුදාය සංවර්ධනය
GenericName[sk]=Vývoj databáz
GenericName[sl]=Razvoj zbirk podatkov
GenericName[sr]=Развој база података
GenericName[sr_Latn]=Razvoj baza podataka
GenericName[ss]=Database Development
GenericName[st]=Database Development
GenericName[sv]=Databasutveckling
GenericName[ta]=தரவுத்தள உருவாக்கம்
GenericName[te]=డాటాబేస్ డెవలప్‌మెంట్
GenericName[th]=การพัฒนาฐานข้อมูล
GenericName[tn]=Database Development
GenericName[tr]=Veritabanı Geliştirme
GenericName[ts]=Database Development
GenericName[uk]=База даних
GenericName[ve]=Database Development
GenericName[xh]=Database Development
GenericName[zh_CN]=数据库开发
GenericName[zh_TW]=資料庫開發
GenericName[zu]=Database Development
Comment=Manage databases, create queries and reports to track and manage your information by using Base.
Comment[af]=Bestuur databasisse, skep navrae en verslae om u inligting na te speur en te bestuur, met Base.
Comment[ar]=إدارة قواعد البيانات، وإنشاء الاستعلامات والتقارير وتتبّع وإدارة معلومات باستخدام بيز.
Comment[as]=Base ব্যৱহাৰ কৰি ডাটাবেইচবোৰ পৰিচালনা কৰক, ট্ৰেক আৰু পৰিচালনা কৰিবলৈ প্ৰশ্ন আৰু সংবাদবোৰ সৃষ্টি কৰক।
Comment[bg]=С Base можете да управлявате бази от данни и да създавате заявки и справки, за да следите и управлявате Вашата информация.
Comment[bn]=বেস ব্যবহার করে আপনার তথ্য অনুসরণ এবং ব্যবস্থাপনা করতে, ডাটাবেস ব্যবস্থাপনা, কোয়েরি এবং প্রতিবেদন তৈরি করুন।
Comment[br]=Base - Ardeiñ stlennvonoù, krouiñ azgoulennoù ha danevelloù
Comment[ca]=Gestioneu bases de dades i creeu consultes i informes per a fer el seguiment i gestionar informació amb el Base.
Comment[cs]=Base umožňuje vytvářet a spravovat databáze a vytvářet dotazy a sestavy pro sledování a správu vašich informací.
Comment[cy]=Rheoli cronfeydd data, creu ymholiadau ac adroddiadau i ddilyn a rheoli eich gwybodaeth drwy ddefnyddio Base.
Comment[da]=Administrer databaser, opret forespørgsler og rapporter til at spore og administrere dine informationer ved at bruge Base.
Comment[de]=Verwalten von Datenbanken, Erstellen von Abfragen und Berichten Base macht's möglich.
Comment[dz]=གཞི་རྟན་ལག་ལེན་འཐབ་ཐོག་ལས་ གནས་སྡུད་གཞི་རྟན་ཚུ་འཛིན་སྐྱོང་འབད་ནི་དང་ དྲི་དཔྱད་ཚུ་བཟོ་ནི་ རྗེས་ལམ་ལུ་སྙན་ཞུ་འབད་ནི་ རང་དོན་བརྡ་དོན་འཛིན་སྐྱོང་འབད་ནི།
Comment[el]=Διαχείριση βάσεων δεδομένων, δημιουργία ερωτημάτων και αναφορών και διαχείριση πληροφοριών με τη χρήση της Base.
Comment[en]=Manage databases, create queries and reports to track and manage your information by using Base.
Comment[eo]=Administri datumbazojn, krei informpetojn kaj raportojn por kontroli kaj administri viajn informojn per Datumbazo.
Comment[es]=Gestione bases de datos, cree consultas e informes para controlar y editar información con Base.
Comment[et]=Base võimaldab kasutada andmebaase ja luua andmete jälgimiseks ning haldamiseks päringuid ja aruandeid.
Comment[eu]=Datu-baseak kudeatu eta kontsultak eta txostenak sortu Base erabiliz informazioaren jarraipena egiteko eta hura kudeatzeko.
Comment[fa]=با استفاده از دادگان، پایگاه‌داده‌ها را اداره کنید و برای ردیابی و مدیریت اطلاعاتتان پرس و جو و گزارش ایجاد کنید.
Comment[fi]=Hallinnoi tietokantoja, luo kyselyjä ja seurantaraportteja, ja hallinnoi tietojasi käyttämällä Base -ohjelmaa.
Comment[fr]=Base - Gestion de bases de données, création de requêtes et rapports.
Comment[fy]=Mei Base kinne jo gegevensbanken beheare, query's en rapporten meitsje om jo gegevens te kontrolearjen en te behearen.
Comment[ga]=Bainistigh bunachair shonraí, cruthaigh iarratais agus tuairiscí chun do chuid faisnéise a láimhseáil le Base.
Comment[gl]=Xestionar bases de datos, crear consultas e informes para rastrexar e xestionar a súa información usando Base.
Comment[gu]=બેઝ વડે ડેટાબેઝોનું વ્યવસ્થાપન, પ્રશ્ર્નો બનાવવા અને અહેવાલોનું ઘ્યાન અને માહિતીનું વ્યવસ્થાપન કરવામાં આવે છે.
Comment[he]=ניהול מסדי נתונים, יצירת שאילתות ודוחות כדי לעקוב ולנהל את המידע שלך באמצעות תוכנת מסד הנתונים.
Comment[hi]=बेस के प्रयोग से डेटाबेस प्रबंधित करता है, प्रश्न बनाता है, ट्रैक रिपोर्ट करता है आपकी सूचना की देखभाल करता है.
Comment[hr]=Upravljajte bazama podataka, stvarajte upite i izvještaje za praćenje i upravljanje vaših informacija uz pomoć programa Base.
Comment[hu]=Adatbázisok kezelése, lekérdezések és jelentések készítése a Base használatával.
Comment[id]=Mengelola basis data, membuat kueri, dan laporan untuk melacak dan mengelola informasi menggunakan Base.
Comment[it]=Usando Base puoi gestire i database e creare ricerche e rapporti per controllare e organizzare le tue informazioni.
Comment[ja]=Base を使用することで、データベースを管理し、クエリーとレポートを作成して、情報を追跡および管理します。
Comment[kk]=Base көмегімен дерекқорды басқару және ақпараттарыңызды қадағалау және басқару үшін сұранымдар мен есептемелерді жасауға болады.
Comment[kn]=ಬೇಸ್ ಬಳಸಿ ದತ್ತಸಂಚಯಗಳನ್ನು ನಿರ್ವಹಿಸಿ, ವರದಿಗಳ ಜಾಡನ್ನು ಇರಿಸಲು ಹಾಗೂ ನಿರ್ವಹಿಸಲು ಪ್ರಶ್ನೆ ಮತ್ತು ವರದಿಗಳನ್ನು ಸೃಷ್ಟಿಸಿ.
Comment[ko]=베이스를 사용하여 데이터베이스를 관리하고, 추적할 쿼리와 보고서를 만들며, 정보를 관리합니다.
Comment[lt]=Duomenų bazių programa galima tvarkyti duomenų bazes, rašyti užklausas ir ataskaitas.
Comment[lv]=Pārvaldīt datubāzes, veidot vaicājumus un atskaites, lietojot Base.
Comment[mai]=बेसक प्रयोगसँ डाटाबेस प्रबंधित करैत अछि, प्रश्न बनाबैत अछि, ट्रैक रिपोर्ट करैत अछि अहाँक सूचनाक देखभाल करैत अछि.
Comment[ml]=അടിസ്ഥാനമുപയോഗിച്ച് ഡേറ്റാബേസ് കൈകാര്യം ചെയ്യുകയും ചോദ്യം സൃഷ്ടിക്കുകയും ട്രാക്കില് റിപ്പോര്ട്ട് ചെയ്യുകയും താങ്കളുടെ വിവരങ്ങള് കൈകാര്യം ചെയ്യുകയും ചെയ്യാം.
Comment[mr]=Base चा वापर करून कोष व्यवस्थापीत करा, तसेच माहिती नियंत्रण व व्यवस्थापन करीता चौकशी व अहवाल बनवा.
Comment[nb]=Håndter databaser, lag spørringer og rapporter og håndter informasjon ved hjelp av Base.
Comment[nl]=Met Base kunt u databases beheren, query's en rapporten maken om uw gegevens te controleren en beheren.
Comment[nn]=Med Base kan du administrera databasar, laga spørjingar og rapportar for sporing og handsaming av informasjon.
Comment[nr]=Phatha amabulungelo wekhompyutha, enza imibuzo nemibiko nokulandela nokuphatha ilwazi lakho ngokusebenzisa iBulungelo lekhompyutha.
Comment[nso]=Laola didathapeisi, hlama dipotšišo le dipego bakeng sa go latedišiša le go laola tshedimošo ya gago o diriša Base.
Comment[or]=\sଆଧାର ଉପୟୋଗ କରି ତଥ୍ଯ ସଞ୍ଚଯଗୁଡିକ ପରିଚାଳନା ,ପ୍ରଶ୍ନଗୁଡିକୁ ସୃଷ୍ଟି ଏବଂ ରିପୋର୍ଟଗୁଡିକୁ ଚିହ୍ନଟ କର ଏବଂ ତୁମ ସୂଚନାକୁ ପରିଚାଳନା କର।
Comment[pa_IN]=ਬੇਸ (Base) ਨਾਲ ਆਪਣਾ ਡਾਟਾਬੇਸ ਸੰਭਾਲੋ, ਸਵਾਲ ਬਣਾਓ ਅਤੇ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਨੂੰ ਜਾਂਚਿਆ ਅਤੇ ਪ੍ਰਬੰਧ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
Comment[pl]=Administruj bazami danych, twórz kwerendy i raporty, aby efektywnie zarządzać informacją za pomocą programu Base.
Comment[pt]=Gerir bases de dados, criar consultas e relatórios para monitorizar e editar as informações das bases de dados com o Base.
Comment[pt_BR]=Gerencie bancos de dados, crie consultas e relatórios para rastrear e gerenciar suas informações por meio do Base.
Comment[ro]=Gestionați baze de date, creați interogări și rapoarte pentru a urmări și gestiona informațiile dumneavoastră folosind Base.
Comment[ru]=Управление базами данных, создание запросов и отчётов для слежения и управления вашей информацией при помощи Base.
Comment[si]=Base භාවිතා කරමින් දත්ත ගබඩා පාලනය කරන්න, ඔබගේ තොරතුරු හඹා යාමට සහ පාලනය කරීමට විමසුම් සහ වාර්තා සාදන්න.
Comment[sk]=Spravovať databázy, vytvárať dotazy a zostavy na správu a analýzu svojich informácií s použitím Base.
Comment[sl]=S programom Base upravljajte z zbirkami podatkov, ustvarjajte poizvedbe in poročila za sledenje in upravljanje s podatki.
Comment[sr]=Управљајте базама података, направите упите и извештаје за праћење података у програму База.
Comment[sr_Latn]=Upravljajte bazama podataka, napravite upite i izveštaje za praćenje podataka u programu Baza.
Comment[ss]=Phatsa idathabhesi, yakha sibuti bese uyabuta imibiko yekulandzelela nekuphatsa lwati lwakho ngekusebentisa Base.
Comment[st]=Laola didatapeisi, bopa ditletlebo le ditlaleho bakeng sa ho latedisisa le ho laola tlhahisoleseding ya hao ka ho sebedisa Base.
Comment[sv]=Hantera databaser, skapa sökningar och rapporter för att spåra och hantera information med hjälp av Base.
Comment[ta]=தரவுத்தளங்களை மேலாளவும், வினவல்கள் அறிக்கைகள் கொண்டு உங்கள் தகவலை மேலாளவும் பேஸைப் பயன்படுத்து.
Comment[te]=దత్తంశస్థానముల నిర్వాహణ,ప్రశ్నలు మరియు నివేదనలు మరియు స్థానము తో ఉపయోగించిన మీ సమాచారమును నిర్మించు.
Comment[th]=จัดการฐานข้อมูล สร้างข้อคำถามและรายงานไปยังแทร็ก และจัดการข้อมูลของคุณโดยการใช้ Base
Comment[tn]=Manage databases, create queries and reports to track and manage your information by using Base.
Comment[tr]=Base kullanarak veritabanlarını yönetebilir, sorgular ve raporlar oluşturarak bilgilerinizi takip edebilirsiniz.
Comment[ts]=Tirhisa swihlayisela-rungula, endla mindzavisiso ni swiviko leswaku u landzelerisisa rungula ra wena hi ku tirhisa Base.
Comment[uk]=Керування базами даних, створення запитів та звітів для стеження та керування вашою інформацією.
Comment[ve]=Langani dzidatabase, vhumbani dzimbudziso na mivhigo u itela u londa na u langa vhuṱanzi haṅu nga u shumisa Base.
Comment[xh]=Lawula iziseko zeenkcukacha, dala iintandabuzo neengxelo ukuze ulande ekhondweni ngokunjalo ulawule ulwazi lwakho ngokusebenzisa u-Base.
Comment[zh_CN]=使用 Base 管理数据库并创建查询和报表,以对信息进行跟踪和管理。
Comment[zh_TW]=使用 Base 來管理資料庫、建立查詢與報告,以追蹤及管理您的資訊。
Comment[zu]=Lawula idatabheyzi, yenza amakhwiri nemibiko ukuze uthole futhi ulawule ukwaziswa kwakho ngokusebenzisa iBheysi.
StartupNotify=true
X-GIO-NoFuse=true
Keywords=Data;SQL;
InitialPreference=5
StartupWMClass=libreoffice-base
X-KDE-Protocols=file,http,ftp,webdav,webdavs
Actions=NewDocument;
[Desktop Action NewDocument]
Name=New Database
Name[af]=Nuwe databasis
Name[ar]=قاعدة بيانات جديدة
Name[as]=নতুন ডাটাবেইচ
Name[bg]=Нова база от данни
Name[bn]=নতুন ডাটাবেস
Name[br]=Stlennvon nevez
Name[ca]=Base de dades nova
Name[cs]=Nová databáze
Name[cy]=Cronfa Ddata Newydd
Name[da]=Ny database
Name[de]=Neue Datenbank
Name[dz]=གནད་སྡུད་གཞི་རྟེན་གསརཔ།
Name[el]=Νέα βάση δεδομένων
Name[en]=New Database
Name[eo]=Nova datumbazo
Name[es]=Base de datos nueva
Name[et]=Uus andmebaas
Name[eu]=Datu-base berria
Name[fa]=پایگاه داده جدید
Name[fi]=Uusi tietokanta
Name[fr]=Nouvelle base de données
Name[fy]=Nije gegevensbank
Name[ga]=Bunachar Sonraí Nua
Name[gl]=Nova base de datos
Name[gu]=નવો ડેટાબેઝ
Name[he]=מסד נתונים חדש
Name[hi]=नया डेटाबेस
Name[hr]=Nova baza podataka
Name[hu]=Új adatbázis
Name[id]=Basis Data Baru
Name[it]=Nuovo database
Name[ja]=新規のデータベース
Name[kk]=Жаңа дерекқор
Name[kn]=ಹೊಸ ದತ್ತಸಂಚಯ
Name[ko]=새 데이터베이스
Name[lt]=Nauja duomenų bazė
Name[lv]=Jauna datubāze
Name[mai]=नवीन डाटाबेस
Name[ml]=പുതിയ ഡേറ്റാബെയിസ്
Name[mr]=नवीन डाटाबेस
Name[nb]=Ny database
Name[nl]=Nieuwe database
Name[nn]=Ny database
Name[nr]=Iziko ledatha elitjha
Name[nso]=Datapeisi e Mpsha
Name[or]=ନୂଆ ତଥ୍ଯାଧାର
Name[pa_IN]=ਨਵਾ ਡਾਟਾਬੈਸ
Name[pl]=Nowa baza danych
Name[pt]=Nova base de dados
Name[pt_BR]=Novo banco de dados
Name[ro]=Baze de date nouă
Name[ru]=Создать базу данных
Name[si]=නව දත්ත සමුදාය
Name[sk]=Nová databáza
Name[sl]=Nova zbirka podatkov
Name[sr]=Нова база података
Name[sr_Latn]=Nova baza podataka
Name[ss]=Idathabhesi lensha
Name[st]=Datapeisi e Ntjha
Name[sv]=Ny databas
Name[ta]=புதிய தரவுத்தளம்
Name[te]=కొత్తడాటాబేస్
Name[th]=ฐานข้อมูลใหม่
Name[tn]=New Database
Name[tr]=Yeni Veritabanı
Name[ts]=Vuhlayisela-rungula lebyintshwa
Name[uk]=Нова база даних
Name[ve]=Database Ntswa
Name[xh]=Isiseko Seenkcukacha Ezintsha
Name[zh_CN]=新建数据库
Name[zh_TW]=新增資料庫
Name[zu]=Idatabheysi Entsha
Icon=document-new
Exec=libreoffice --base

@ -1,257 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
Icon=libreoffice-calc
Type=Application
Categories=Office;Spreadsheet;X-Red-Hat-Base;X-MandrivaLinux-Office-Spreadsheets;
Exec=libreoffice --calc %U
MimeType=application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/msexcel;application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-excel.sheet.macroEnabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.template.macroEnabled.12;application/vnd.ms-excel.sheet.binary.macroEnabled.12;text/csv;application/x-dbf;text/spreadsheet;application/csv;application/excel;application/tab-separated-values;application/vnd.lotus-1-2-3;application/vnd.oasis.opendocument.chart;application/vnd.oasis.opendocument.chart-template;application/x-dbase;application/x-dos_ms_excel;application/x-excel;application/x-msexcel;application/x-ms-excel;application/x-quattropro;application/x-123;text/comma-separated-values;text/tab-separated-values;text/x-comma-separated-values;text/x-csv;application/vnd.oasis.opendocument.spreadsheet-flat-xml;application/vnd.ms-works;application/clarisworks;application/x-iwork-numbers-sffnumbers;application/x-starcalc;
Name=LibreOffice Calc
Name[ru]=Редактор таблиц LibreOffice Calc
GenericName=Spreadsheet
GenericName[af]=Sigblad
GenericName[ar]=جدول مُمتد
GenericName[as]=স্প্ৰেডশ্বীট
GenericName[bg]=Електронна таблица
GenericName[bn]=স্প্রেডশীট
GenericName[br]=Renkell
GenericName[ca]=Full de càlcul
GenericName[cs]=Sešit
GenericName[cy]=Taenlen
GenericName[da]=Regneark
GenericName[de]=Tabellendokument
GenericName[dz]=ཤོག་ཁྲམ།
GenericName[el]=Υπολογιστικό φύλλο
GenericName[en]=Spreadsheet
GenericName[eo]=Kalkultabelo
GenericName[es]=Hoja de cálculo
GenericName[et]=Tabelarvutus
GenericName[eu]=Kalkulu-orria
GenericName[fa]=صفحه‌گسترده
GenericName[fi]=Taulukkolaskenta
GenericName[fr]=Classeur
GenericName[fy]=Rekkenblêd
GenericName[ga]=Scarbhileog
GenericName[gl]=Folla de cálculo
GenericName[gu]=સ્પ્રેડશીટ
GenericName[he]=גיליון אלקטרוני
GenericName[hi]=स्प्रेडशीट
GenericName[hr]=Proračunska tablica
GenericName[hu]=Munkafüzet
GenericName[id]=Lembar Sebar
GenericName[it]=Foglio elettronico
GenericName[ja]=表計算ドキュメント
GenericName[kk]=Электрондық кесте
GenericName[kn]=ಸ್ಪ್ರೆಡ್‌ಶೇಟ್‌
GenericName[ko]=스프레드시트
GenericName[lt]=Skaičiuoklė
GenericName[lv]=Izklājlapa
GenericName[mai]=स्प्रेडशीट
GenericName[ml]=സ്പ്രെഡ്ഷീറ്റ്
GenericName[mr]=स्प्रेडशीट्
GenericName[nb]=Regneark
GenericName[nl]=Werkblad
GenericName[nn]=Rekneark
GenericName[nr]=Spreadsheet
GenericName[nso]=Letlakala-kalo
GenericName[or]=Spreadsheet
GenericName[pa_IN]=ਸਪਰੈੱਡ ਸ਼ੀਟ
GenericName[pl]=Arkusz kalkulacyjny
GenericName[pt]=Folha de cálculo
GenericName[pt_BR]=Planilha
GenericName[ro]=Foaie de calcul
GenericName[ru]=Электронная таблица
GenericName[si]=පැතුරුම්පත
GenericName[sk]=Tabuľkový dokument
GenericName[sl]=Preglednica
GenericName[sr]=Таблица
GenericName[sr_Latn]=Tablica
GenericName[ss]=Liphephacansi
GenericName[st]=Spreadsheet
GenericName[sv]=Kalkylblad
GenericName[ta]=விரிதாள்
GenericName[te]=స్ర్పెడ్ షీట్
GenericName[th]=ตารางคำนวณ
GenericName[tn]=Letlharephatlalalo
GenericName[tr]=Hesap Tablosu
GenericName[ts]=Spreadsheet
GenericName[uk]=Електронна таблиця
GenericName[ve]=Spreadsheet
GenericName[xh]=Spreadsheet
GenericName[zh_CN]=电子表格
GenericName[zh_TW]=試算表
GenericName[zu]=Ikhasi lokubala
Comment=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[af]=Doen berekening, analiseer inligting en bestuur lyste in sigblaaie met Calc.
Comment[ar]=أنجز العمليات الحسابية، وحلِّل المعلومات وأدر القوائم في الجداول المُمتدة باستخدام كالك.
Comment[as]=Calc ব্যৱহাৰ কৰি স্প্ৰেডশ্বিটসমূহত গণনাসমূহ কৰক, তথ্য বিশ্লেষণ কৰক আৰু তালিকাসমূহ ব্যৱস্থাপনা কৰক।
Comment[bg]=С Calc можете да извършвате изчисления, да анализирате информация и да организирате списъци в електронни таблици.
Comment[bn]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[br]=Ober jedadurioù, dezrannañ stlennoù hag ardeiñ rolladoù er renkelloù dre ober gant Calc.
Comment[ca]=Feu càlculs, analitzeu informació i gestioneu llistes en fulls de càlcul amb el Calc.
Comment[cs]=Calc umožňuje vytvářet a spravovat tabulkové seznamy a provádět na těchto datech výpočty a analýzu informací.
Comment[cy]=Cyfrifo, dadansoddi data a rheoli rhestrau mewn taenlenni gan ddefnyddio Calc.
Comment[da]=Udfør beregning, analyser information og administrer lister i regneark ved brug af Calc.
Comment[de]=Berechnungen ausführen, Informationen analysieren und Listen in Tabellendokumenten verwalten Calc macht's möglich.
Comment[dz]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[el]=Εκτέλεση υπολογισμών, ανάλυσης πληροφοριών και διαχείρισης λιστών σε υπολογιστικά φύλλα με τη χρήση του Calc.
Comment[en]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[eo]=Kalkuladi, analizi informojn kaj administri listojn en kalkultabeloj per Tabelilo.
Comment[es]=Realice cálculos, analice información y maneje listas en hojas de cálculo con Calc.
Comment[et]=Calc võimaldab arvutustabelite abiga teha arvutusi, analüüsida teavet ja hallata loendeid.
Comment[eu]=Kalkuluak egin, informazioa aztertu eta kalkulu-orrietako zerrendak kudeatu Calc erabiliz.
Comment[fa]=با محاسب، اطلاعات موجود در صفحات گسترده را تحلیل کنید، فهرست‌ها را اداره کنید و محاسبات انجام دهید.
Comment[fi]=Calcin avulla voit tehdä laskutoimituksia, analysoida tietoja ja hallita listoja laskentataulukoissa.
Comment[fr]=Calc - Calculs, analyses et gestion de listes dans des feuilles de calcul.
Comment[fy]=Mei Calc kinne jo yn rekkenblêden berekkeningen útfiere, gegevens analysearje en listen beheare.
Comment[ga]=Déan ríomhaireacht, déan anailís agus bainistigh liostaí i scarbhileoga trí úsáid a bhaint as Calc.
Comment[gl]=Facer cálculos, analizar información e xestionar listas en follas de cálculo con Calc.
Comment[gu]=કૅલ્ક વડે સ્પ્રેડશીટમાં ગણતરીઓ, માહીતી પૃથ્થકરણ અને યાદીઓ બનાવો.
Comment[he]=ביצוע חישובים, ניתוח מידע וניהול רשימות בגיליונות אלקטרוניים באמצעות Calc.
Comment[hi]=गणना करता है, सूचना विश्लेषण करता है, और Calc के प्रयोग से स्प्रेडशीट में सूची प्रबंधित करता है.
Comment[hr]=Izvedite proračune, analizirajte informacije i upravljajte popisima u proračunskim tablicama koristeći Calc.
Comment[hu]=Számítások végrehajtása, adatok elemzése és listák kezelése munkafüzetekben a Calc használatával.
Comment[id]=Melakukan perhitungan, menganalisa informasi dan mengelola senarai pada lembar sebar menggunakan Calc.
Comment[it]=Calc può essere usato per eseguire calcoli, analizzare informazioni e gestire elenchi nei fogli elettronici.
Comment[ja]=Calc を使用して、スプレッドシートで計算を実行し、情報を分析し、リストを管理します。
Comment[kk]=Calc көмегімен есептерді шығару, ақпаратты анализдеу және электрондық кестелерде тізімдерді басқаруды орындауға болады.
Comment[kn]=Calc ಅನ್ನು ಬಳಸಿಕೊಂಡು ಲೆಕ್ಕವನ್ನು ಮಾಡಿ, ಮಾಹಿತಿಯನ್ನು ವಿಶ್ಲೇಷಿಸಿ, ಹಾಗೂ ಸ್ಪ್ರೆಡ್‌ಶೀಟ್‌ನಲ್ಲಿನ ಪಟ್ಟಿಗಳನ್ನು ನೋಡಿಕೊಳ್ಳಿ.
Comment[ko]=캘크를 사용하여 스프레드시트에서 계산, 정보 분석 및 목록 관리를 수행합니다.
Comment[lt]=Skaičiuokle galima atlikti įvairius skaičiavimus, analizuoti informaciją, tvarkyti sąrašus lentelėse.
Comment[lv]=Veikt aprēķinus, analizēt informāciju un pārvaldīt sarakstus izklājlapās, lietojot Calc.
Comment[mai]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[ml]=കണക്കുകൂട്ടലുകള്‍, കാല്ക് ഉപയോഗിച്ച് വിവരങ്ങള്‍ അവലോകനം ചെയ്യുകയും സ്പ്രെഡ്ഷീറ്റിലെ ലിസ്റ്റ് കൈകാര്യം ചെയ്യുകയും ചെയ്യാം.
Comment[mr]=Calc चा वापर करून स्प्रेडशीट् अंतर्गत गणना, माहिती विश्लेषण व यादी व्यवस्थापीत करा.
Comment[nb]=Utfør beregninger, analyser informasjon og håndter lister i regneark ved å bruke Calc.
Comment[nl]=Met Calc kunt u in werkbladen berekeningen uitvoeren, gegevens analyseren en lijsten beheren.
Comment[nn]=Med Calc kan du gjera utrekningar, analysera informasjon og handsama lister i rekneark.
Comment[nr]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[nso]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[or]=Calc ବ୍ୟବହାର କରି ସ୍ପ୍ରେଡ୍ସିଟରେ ଗଣନା ସମ୍ପାଦନ, ସୂଚନା ବିଶ୍ଳେଷଣ ଏବଂ ତାଲିକା ପରିଚାଳନା କରନ୍ତୁ।
Comment[pa_IN]=ਕੈਲਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਪਰੈੱਡਸ਼ੀਟ ਨਾਲ ਗਣਨਾ, ਜਾਣਕਾਰੀ ਦੀ ਸਮੀਖਿਆ ਅਤੇ ਸੂਚੀਆਂ ਨੂੰ ਰੱਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।
Comment[pl]=Przeprowadzaj obliczenia, analizuj informacje i zarządzaj listami w arkuszach kalkulacyjnych za pomocą programu Calc.
Comment[pt]=Efetue cálculos, analise informações e faça a gestão de listas em folhas de cálculo através do Calc.
Comment[pt_BR]=Efetue cálculos, analise informações e gerencie listas em planilhas utilizando o Calc.
Comment[ro]=Efectuați calcule, analizați informații și gestionați liste în foi de calcul folosind Calc.
Comment[ru]=Выполнение вычислений, анализ информации и управление списками в электронных таблицах с помощью Calc.
Comment[si]=Calc භාවිතා කරමින් ගණනය කිරීම්, තොරතුරු විශ්ලේෂණය සහ පැතුරුම්පත් වල ලැයිස්තු පාලනය සිදු කරන්න.
Comment[sk]=Počítajte, analyzujte informácie a spravujte zoznamy v zošitoch s použitím Calc.
Comment[sl]=S programom Calc izvajajte računske operacije, analizirajte podatke in upravljajte sezname v preglednicah.
Comment[sr]=Изведите прорачуне, анализирајте податке и управљајте листама у таблицама уз Рачун.
Comment[sr_Latn]=Izvedite proračune, analizirajte podatke i upravljajte listama u tablicama uz Račun.
Comment[ss]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[st]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[sv]=Utför beräkningar, anaysera information och hantera listor i kalkylblad med hjälp av Calc.
Comment[ta]=கணக்கிடவும், தகவலை ஆயவும், விரிதாள்களிலுள்ள பட்டியல்களை மேலாளவும் கால்கைப் பயன்படுத்து.
Comment[te]=Calc వినియోగించి స్ర్పెడ్‌షీట్‌లలో జాబితాలను నిర్వహించును,సమాచారమును విశ్లేషించును మరియు గణలను జరుపును.
Comment[th]=ทำการคำนวณ วิเคราะห์ข้อมูล และจัดการรายการในตารางคำนวณโดยใช้ Calc
Comment[tn]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[tr]=Calc kullanarak çalışma sayfasında performans hesaplamak, bilgi analiz etmek ve listeleri yönetmek.
Comment[ts]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[uk]=Виконання розрахунків, аналіз інформації та керування списками в електронних таблицях за допомогою Calc.
Comment[ve]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[xh]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
Comment[zh_CN]=使用 Calc 进行计算,并在电子表格中进行数据分析。
Comment[zh_TW]=使用 Calc 可在試算表中執行計算、分析資訊與管理清單。
Comment[zu]=Perform calculations, analyze information and manage lists in spreadsheets by using Calc.
StartupNotify=true
X-GIO-NoFuse=true
Keywords=Accounting;Stats;OpenDocument Spreadsheet;Chart;Microsoft Excel;Microsoft Works;OpenOffice Calc;ods;xls;xlsx;
InitialPreference=5
StartupWMClass=libreoffice-calc
X-KDE-Protocols=file,http,ftp,webdav,webdavs
Actions=NewDocument;
[Desktop Action NewDocument]
Name=New Spreadsheet
Name[af]=Nuwe sigblad
Name[ar]=جدول مُمتد جديد
Name[as]=নতুন স্প্ৰেডশ্বিট
Name[bg]=Нова електронна таблица
Name[bn]=New Spreadsheet
Name[br]=Renkell nevez
Name[ca]=Full de càlcul nou
Name[cs]=Nový sešit
Name[cy]=Taenlen Newydd
Name[da]=Nyt regneark
Name[de]=Neues Tabellendokument
Name[dz]=New Spreadsheet
Name[el]=Νέο υπολογιστικό φύλλο
Name[en]=New Spreadsheet
Name[eo]=Nova kalkultabelo
Name[es]=Hoja de cálculo nueva
Name[et]=Uus arvutustabel
Name[eu]=Kalkulu-orri berria
Name[fa]=صفحه گسترده جدید
Name[fi]=Uusi laskentataulukko
Name[fr]=Nouveau classeur
Name[fy]=Nij rekkenblêd
Name[ga]=Scarbhileog Nua
Name[gl]=Nova folla de cálculo
Name[gu]=નવી સ્પ્રેડશીટ
Name[he]=גיליון אלקטרוני חדש
Name[hi]=नया स्प्रेडशीट
Name[hr]=Nova proračunska tablica
Name[hu]=Új munkafüzet
Name[id]=Lembar Sebar Baru
Name[it]=Nuovo foglio elettronico
Name[ja]=新規の表計算文書
Name[kk]=Жаңа электрондық кесте
Name[kn]=ಹೊಸ ಸ್ಪ್ರೆಡ್‌ಶೀಟ್
Name[ko]=새 스프레드시트
Name[lt]=Naujas skaičiuoklės dokumentas
Name[lv]=Jauna izklājlapa
Name[mai]=New Spreadsheet
Name[ml]=പുതിയ സ്പ്രെഡ്ഷീറ്റ്
Name[mr]=नवीन स्प्रेडशीट
Name[nb]=Nytt regneark
Name[nl]=Nieuw werkblad
Name[nn]=Nytt rekneark
Name[nr]=New Spreadsheet
Name[nso]=New Spreadsheet
Name[or]=ନୂତନ ସ୍ପ୍ରେଡସିଟ
Name[pa_IN]=ਨਵੀ ਸਪ੍ਰੈਡਸੀਟ
Name[pl]=Nowy arkusz kalkulacyjny
Name[pt]=Nova folha de cálculo
Name[pt_BR]=Nova planilha
Name[ro]=Foaie de calcul nouă
Name[ru]=Создать эл.таблицу
Name[si]=ODF පැතුරුම් පත
Name[sk]=Nový tabuľkový dokument
Name[sl]=Nova preglednica
Name[sr]=Нова таблица
Name[sr_Latn]=Nova tablica
Name[ss]=New Spreadsheet
Name[st]=New Spreadsheet
Name[sv]=Nytt kalkylblad
Name[ta]=புதிய விரிதாள்
Name[te]=కొత్త స్ప్రెడ్ షీట్
Name[th]=สร้างตารางคำนวณใหม่
Name[tn]=New Spreadsheet
Name[tr]=Yeni Çalışma Sayfası
Name[ts]=New Spreadsheet
Name[uk]=Електронна таблиця ODF
Name[ve]=New Spreadsheet
Name[xh]=New Spreadsheet
Name[zh_CN]=新建电子表格
Name[zh_TW]=新增試算表
Name[zu]=New Spreadsheet
Icon=document-new
Exec=libreoffice --calc

@ -1,257 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
Icon=libreoffice-draw
Type=Application
Categories=Office;FlowChart;Graphics;2DGraphics;VectorGraphics;X-Red-Hat-Base;X-MandrivaLinux-Office-Drawing;
Exec=libreoffice --draw %U
MimeType=application/vnd.oasis.opendocument.graphics;application/vnd.oasis.opendocument.graphics-flat-xml;application/vnd.oasis.opendocument.graphics-template;application/vnd.sun.xml.draw;application/vnd.sun.xml.draw.template;application/vnd.visio;application/x-wpg;application/vnd.corel-draw;application/vnd.ms-publisher;image/x-freehand;application/clarisworks;application/x-pagemaker;application/pdf;application/x-stardraw;image/x-emf;image/x-wmf;
Name=LibreOffice Draw
Name[ru]=Редактор рисунков LibreOffice Draw
GenericName=Drawing Program
GenericName[af]=Tekenprogram
GenericName[ar]=برنامج الرسم
GenericName[as]=ড্রয়িং কাৰ্যক্ৰম
GenericName[bg]=Програма за чертане
GenericName[bn]=অঙ্কন প্রোগ্রাম
GenericName[br]=Goulev tresañ
GenericName[ca]=Programa de dibuix
GenericName[cs]=Kreslící program
GenericName[cy]=Rhaglen Lluniadu
GenericName[da]=Tegneprogram
GenericName[de]=Zeichnungsprogramm
GenericName[dz]=Drawing Program
GenericName[el]=Πρόγραμμα σχεδίασης
GenericName[en]=Drawing Program
GenericName[eo]=Desegna programo
GenericName[es]=Programa de dibujo
GenericName[et]=Skeemilooja
GenericName[eu]=Marrazketa programa
GenericName[fa]=برنامه طراحی
GenericName[fi]=Piirrosohjelma
GenericName[fr]=Programme de dessin
GenericName[fy]=Teken programma
GenericName[ga]=Ríomhchlár Líníochta
GenericName[gl]=Programa de debuxo
GenericName[gu]=પ્રક્રિયાનું ચિત્ર દોરી રહ્યા છે
GenericName[he]=תוכנת רשום
GenericName[hi]=रेखाचित्र प्रोग्राम
GenericName[hr]=Program za crtanje
GenericName[hu]=Rajzolóprogram
GenericName[id]=Program Menggambar
GenericName[it]=Programma di disegno
GenericName[ja]=図形描画プログラム
GenericName[kk]=Сурет салу бағдарламасы
GenericName[kn]=ಡ್ರಾಯಿಂಗ್ ಕ್ರಮವಿಧಿ
GenericName[ko]=그리기 프로그램
GenericName[lt]=Grafikos rengyklė
GenericName[lv]=Zīmēšanas lietotne
GenericName[mai]=Drawing Program
GenericName[ml]=ചിത്രരചനയ്ക്കുള്ള പ്രോഗ്രാം
GenericName[mr]=चित्ररेखा कार्यक्रम
GenericName[nb]=Tegneprogram
GenericName[nl]=Tekenprogramma
GenericName[nn]=Teikneprogram
GenericName[nr]=Drawing Program
GenericName[nso]=Lenaneo la go thala
GenericName[or]=ପ୍ରଗ୍ରାମ ଆଙ୍କୁଅଛି
GenericName[pa_IN]=ਡਰਾਇੰਗ ਪਰੋਗਰਾਮ
GenericName[pl]=Program do rysowania
GenericName[pt]=Programa de desenho
GenericName[pt_BR]=Programa de desenho
GenericName[ro]=Program de desenare
GenericName[ru]=Редактор рисунков
GenericName[si]=ඇදිමේ වැඩසටහන
GenericName[sk]=Kresliaci program
GenericName[sl]=Program za risanje
GenericName[sr]=Програм за цртање
GenericName[sr_Latn]=Program za crtanje
GenericName[ss]=Drawing Program
GenericName[st]=Drawing Program
GenericName[sv]=Ritprogram
GenericName[ta]=வரைபட செயலி
GenericName[te]=చిత్రలేఖక ప్రోగ్రాము
GenericName[th]=โปรแกรมวาดภาพ
GenericName[tn]=Drawing Program
GenericName[tr]=Çizim Programı
GenericName[ts]=Drawing Program
GenericName[uk]=Програма для малювання
GenericName[ve]=Drawing Program
GenericName[xh]=Drawing Program
GenericName[zh_CN]=绘图程序
GenericName[zh_TW]=繪圖程式
GenericName[zu]=Drawing Program
Comment=Create and edit drawings, flow charts and logos by using Draw.
Comment[af]=Skep en redigeer tekeninge, vloeigrafieke en logo's met Draw.
Comment[ar]=إنشاء الرسوم وتحريرها، ورسوم الدفق البيانية، والشعارات باستخدام درو.
Comment[as]=Draw ব্যৱহাৰ কৰি ড্ৰয়িং, ফ্ল' ছাৰ্ট আৰু ল'গ'বোৰ সৃষ্টি আৰু সম্পাদনা কৰক।
Comment[bg]=С Draw можете да създавате и редактирате рисунки, блок-схеми и емблеми.
Comment[bn]=ড্র ব্যবহার করে অঙ্কন, প্রবাহ চিত্র, এবং লোগো তৈরি এবং সম্পাদনা করুন।
Comment[br]=Draw - Krouiñ hag embann tresadennoù, frammlunioù ha sielloù.
Comment[ca]=Creeu i editeu dibuixos, diagrames de flux i logotips amb el Draw.
Comment[cs]=Draw umožňuje vytvářet a upravovat kresby, vývojové diagramy a loga.
Comment[cy]=Creu a golygu darluniau, siartiau llif a logos drwy ddefnyddio Draw.
Comment[da]=Opret og rediger tegninger, rutediagrammer og logoer ved brug af Draw.
Comment[de]=Zeichnungen erstellen und bearbeiten, Flussdiagramme entwerfen und Logos kreieren Draw macht's möglich.
Comment[dz]=ཌཱ་ི་པ་ལག་ལེན་འཐབ་ཐོག་པར་རིས་དང་འབབ་རྒྱུན་དཔེ་རིས་ ལེགས་རྟགས་ཚུ་་ཚད་རིས་ཚུ་བཟོ་ནི་དང་ཞུན་དག་རྐྱབ་ནི།
Comment[el]=Δημιουργία και επεξεργασία σχεδίων, διαγραμμάτων ροής, και λογοτύπων με τη χρήση του Draw.
Comment[en]=Create and edit drawings, flow charts, and logos by using Draw.
Comment[eo]=Krei kaj redakti desegnaĵojn, stirfluajn diagramojn, kaj emblemojn per Desegnilo.
Comment[es]=Cree y edite dibujos, diagramas de flujo y logotipos con Draw.
Comment[et]=Draw võimaldab luua ja redigeerida joonistusi, vooskeeme ning logosid.
Comment[eu]=Marrazkiak, fluxu-diagramak eta logotipoak sortu eta editatu Draw erabiliz.
Comment[fa]=با استفاده از نقاش، نقاشی، روندنما و علامت تجاری طراحی یا ویرایش کنید.
Comment[fi]=Luo ja muokkaa piirroksia, vuokaavioita ja logoja Draw-ohjelmalla.
Comment[fr]=Draw - Création et édition de dessins, d'organigrammes et de logos.
Comment[fy]=Mei Draw kinne jo tekenje, streamdiagrammen en logo's meitsje en bewurkje.
Comment[ga]=Cruthaigh líníochtaí, sreabhchairteacha, agus lógónna, agus cuir iad in eagar le Draw.
Comment[gl]=Crear e editar debuxos, fluxogramas e logotipos con Draw.
Comment[gu]=ચિત્ર દ્દારા ચિત્રો, ફલો ચાર્ટ, અને લોગો બનાવો અને સુઘારો.
Comment[he]=יצירה ועריכה של ציורים, תרשימי זרימה וסמלים מסחריים באמצעות תוכנת הציור.
Comment[hi]=ड्रॉ के प्रयोग से रेखाचित्र, फ्लोचार्ट, और लोगो बनाता और संपादित करता है.
Comment[hr]=Stvorite i uredite crteže, dijagrame toka i logotipe koristeći Draw.
Comment[hu]=Rajzok, folyamatábrák és logók létrehozása és szerkesztése a Draw használatával.
Comment[id]=Mengolah gambar, diagram alur, dan logo menggunakan Draw.
Comment[it]=Con Draw puoi creare e modificare disegni, diagrammi di flusso e loghi.
Comment[ja]=Draw を使用して、図形描画、フローチャート、およびロゴを作成および編集します。
Comment[kk]=Draw көмегімен суреттерді, блок-сызбаларды және логотиптерді жасау және түзетуге болады.
Comment[kn]=ಡ್ರಾ ಉಪಯೋಗಿಸಿಕೊಂಡು ಚಿತ್ರಗಳನ್ನು, ಹರಿವು(ಫ್ಲೋ) ನಕ್ಷೆಗಳನ್ನು ಹಾಗೂ ಲಾಂಛನಗಳನ್ನು ರಚಿಸಿ ಮತ್ತು ಸಂಪಾದಿಸಿ.
Comment[ko]=그리기를 사용하여 그리기, 순서도 및 로고를 만들고 편집합니다.
Comment[lt]=Grafikos rengykle galima braižyti brėžinius, blokines schemas, kurti logotipus.
Comment[lv]=Veidot un rediģēt zīmējumus, norises shēmas un logotipus, lietojot Draw.
Comment[mai]=ड्रॉक प्रयोगसँ रेखाचित्र, फ्लोचार्ट, आओर लोगो बनबैत आ संपादित करैत अछि.
Comment[ml]=ചിത്രരചന ഉപയോഗിച്ച് ചിത്രങ്ങള്, ഫ്‍ളോചാര്ട്ടുകള്, ലോഗോകള് സൃഷ്ടിക്കുകയും എഡിറ്റു ചെയ്യുകയും ചെയ്യുക.
Comment[mr]=Draw चा वापरून रेखाचित्र, फ्लोचार्ट, व प्रतिक बनवा आणि संपादीत करा.
Comment[nb]=Opprett og rediger tegninger, flytdiagrammer og logoer ved å bruke Draw.
Comment[nl]=Met Draw kunt u tekeningen, stroomdiagrammen en logo's maken en bewerken.
Comment[nn]=Med Draw kan du laga og redigera teikningar, flytdiagram og logoar.
Comment[nr]=Enza nokuhlela imigwalo, amaflowtjhati namalogo ngokusebenzisa i-Draw.
Comment[nso]=Hlama le go lokiša dithalwa, ditšhate tša go elela, le maswao ka go diriša Draw.
Comment[or]=ଅଙ୍କନ ଉପୟୋଗକରି ଚିତ୍ରାଙ୍କନ, ଫ୍ଲୋ ଚାର୍ଟ ଏବଂ ଚିହ୍ନଗୁଡିକୁ ସୃଷ୍ଟି ଏବଂ ସମ୍ପାଦନ କର।
Comment[pa_IN]=ਡਰਾਇੰਗ ਨਾਲ ਸ਼ਕਲਾਂ, ਵਹਾ-ਚਾਰਟ ਅਤੇ ਲੋਗੋ ਬਣਾਏ ਅਤੇ ਸੋਧੇ ਜਾ ਸਕਦੇ ਹਨ।
Comment[pl]=Twórz i edytuj rysunki, wykresy i znaki graficzne za pomocą programu Draw.
Comment[pt]=Criar e editar desenhos, fluxogramas e logótipos com o Draw.
Comment[pt_BR]=Crie e edite desenhos, fluxogramas e logotipos por meio do Draw.
Comment[ro]=Creați și editați desene, diagrame și sigle folosind Draw.
Comment[ru]=Создание и редактирование рисунков, блок-схем и логотипов.
Comment[si]=Draw භාවිතා කරමින් ඇඳීම්, ගැලීම් සටහන් සහ ලාංඡන සාදන්න සහ වෙනස් කරන්න.
Comment[sk]=Vytvárajte a upravujte obrázky, postupové diagramy a logá s použitím Draw.
Comment[sl]=S programom Draw ustvarjajte in urejajte risbe, slike, diagrame poteka in logotipe.
Comment[sr]=Направите и уређујте цртеже, дијаграме тока и логотипе у Цртању.
Comment[sr_Latn]=Napravite i uređujte crteže, dijagrame toka i logotipe u Crtanju.
Comment[ss]=Yakha u-edithe kudvweba, ndizisa emashati, neticubulo ngekusebentisa Draw.
Comment[st]=Bopa le ho lokisa tse torowilweng, ditjhate tse phallang, le di-logo ka ho sebedisa Draw.
Comment[sv]=Skapa och redigera teckningar, flödesdiagram och logotyper med hjälp av Draw.
Comment[ta]=வரைபடங்கள், செயல்வழிப்படங்கள், லோகோ ஆகியவற்றை உருவாக்கவும் தொகுக்கவும் டிராவைப் பயன்படுத்துக.
Comment[te]=చిత్రలేఖనము,ఫ్లోచార్ట్ మరియు,దేవుని చిత్రములను నిర్మించి సరిచేయుము.
Comment[th]=สร้างและแก้ไขการวาด แผนภูมิงาน และโลโก้ โดยการใช้ Draw
Comment[tn]=Create and edit drawings, flow charts, and logos by using Draw.
Comment[tr]=Draw kullanarak çizimler, akış grafikleri ve logolar oluşturup düzenleyebilirsiniz.
Comment[ts]=Endla ni ku lulamisa Vudirowi, tichati ta ntlhandlamano ni mimfungho hi ku tirhisa Draw.
Comment[uk]=Створення та редагування малюнків, діаграми та емблем.
Comment[ve]=Vhumbani nahone ni lulamise nyolo, tshati dza kusuvhele, na dziḽogo nga u shumisa Draw.
Comment[xh]=Dala uze uhlele imizobo, iitshati zomqukuqelo, kunye nee-logo ngokusebenza u-Draw.
Comment[zh_CN]=使用 Draw 创建并编辑图形、流程图和徽标。
Comment[zh_TW]=使用 Draw 可建立與編輯繪圖、流程圖以及標誌。
Comment[zu]=Yenza futhi ulungise imidwebo, amaflowchadi, namalogo ngokusebenzisa into yokuDweba.
StartupNotify=true
X-GIO-NoFuse=true
Keywords=Vector;Schema;Diagram;Layout;OpenDocument Graphics;Microsoft Publisher;Microsoft Visio;Corel Draw;cdr;odg;svg;pdf;vsd;
InitialPreference=5
StartupWMClass=libreoffice-draw
X-KDE-Protocols=file,http,ftp,webdav,webdavs
Actions=NewDocument;
[Desktop Action NewDocument]
Name=New Drawing
Name[af]=Nuwe tekening
Name[ar]=رسم جديد
Name[as]=নতুন অঙ্কণ
Name[bg]=Нова рисунка
Name[bn]=New Drawing
Name[br]=Tresadenn nevez
Name[ca]=Dibuix nou
Name[cs]=Nová kresba
Name[cy]=Lluniad Newydd
Name[da]=Ny tegning
Name[de]=Neue Zeichnung
Name[dz]=New Drawing
Name[el]=Νέο σχέδιο
Name[en]=New Drawing
Name[eo]=Nova desegnaĵo
Name[es]=Dibujo nuevo
Name[et]=Uus joonistus
Name[eu]=Marrazkia berria
Name[fa]=طراحی جدید
Name[fi]=Uusi piirros
Name[fr]=Nouveau dessin
Name[fy]=Nije tekening
Name[ga]=Líníocht Nua
Name[gl]=Novo debuxo
Name[gu]=નવુ ચિત્રકામ
Name[he]=ציור חדש
Name[hi]=नया रेखाचित्र
Name[hr]=Novi crtež
Name[hu]=Új rajz
Name[id]=Gambar Baru
Name[it]=Nuovo disegno
Name[ja]=新規の図形描画
Name[kk]=Жаңа сурет
Name[kn]=ಹೊಸ ಚಿತ್ರರಚನೆ
Name[ko]=새 드로잉
Name[lt]=Naujas grafikos dokumentas
Name[lv]=Jauns zīmējums
Name[mai]=New Drawing
Name[ml]=പുതിയ ഡ്രോയിങ്
Name[mr]=नवीन रेखाचित्र
Name[nb]=Ny tegning
Name[nl]=Nieuwe tekening
Name[nn]=Ny teikning
Name[nr]=New Drawing
Name[nso]=New Drawing
Name[or]=ନୂଆ ଚିତ୍ର
Name[pa_IN]=ਨਵੀ ਡਰਾਇੰਗ
Name[pl]=Nowy rysunek
Name[pt]=Novo desenho
Name[pt_BR]=Novo desenho
Name[ro]=Desen nou
Name[ru]=Создать рисунок
Name[si]=ඊළඟ ඇඳීම
Name[sk]=Nová kresba
Name[sl]=Nova risba
Name[sr]=Нови цртеж
Name[sr_Latn]=Novi crtež
Name[ss]=New Drawing
Name[st]=New Drawing
Name[sv]=Ny teckning
Name[ta]=புதிய வரைபடம்
Name[te]=కొత్త చిత్రలేఖనము
Name[th]=งานวาดรูปใหม่
Name[tn]=New Drawing
Name[tr]=Yeni Çizim
Name[ts]=New Drawing
Name[uk]=Наступний малюнок
Name[ve]=New Drawing
Name[xh]=New Drawing
Name[zh_CN]=新建绘图
Name[zh_TW]=新增繪圖
Name[zu]=New Drawing
Icon=document-new
Exec=libreoffice --draw

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmcuNn8ACgkQ9DSh76/u
rqMKYBAAybgaTLnNObh8cYO1dALaz08HeWXtFv5UuNT+E2VUaLM7bp6fQQ5lz9b0
lwzbDleWeZTJdlzVqFuMXDV9T3pCTbpP78jGR0c2KSETAJ3ya3a229WAABW4AE5w
hXalwgeESisG8YkhiLL7zPOrFAVcT5xiQbsPRCURr7Yf97TvqridOpsjCYafDGbS
bd9qbPUEOfpoQBAhD2mUeNav+lGWoYQHfDbftIdBA0Rel6HVb2ph5VSE2oBp1E2Z
PpjAhwYOf0LcFStKEWse/+RWDzUjyKV9K0ZjzScg+OZmuD3gcyIlj3VktInhmzFK
nTqazrjZROwv2qt4rpg+784J9wj2mgh8dcMykBHdYEFuQnFlbvZtAqfA/JULO7zm
8vHWGDnWg+5PwznyYjM0xeUFl3tennvtEejUjLLW48x5o9zG+t6KQp9fVTsLmchd
15pnLGbhPAIIcyCmNsYLyeLuhMFGiKe184yEOIeYtCbJkNvyx0Wto9mVKq8rok/3
DWmbKe0Kk/bHkwvPkoyk/boyTivQ3HNyDd8Qgsvo/hIlPYcRwJQ22mSIIRFdcrxw
60cXtmRnIEVfUWyfOi7pd+toPgjx3P0ZSJ7xBa5p+hOE6sXbt7nilGAC+kNAHWOR
DixDAUyAAE/lKVOVfrqMBoGT8ALcmiaVEI/6EGuYwxPqDZuZsic=
=ILLN
-----END PGP SIGNATURE-----

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmGqk3AACgkQ9DSh76/u
rqPfLA//T1a1rqVsDz3Ozx+EDtqslPvXN4RNHtn6kQOR+0d9JkuA/habErjHzpv3
pH1OwKo8f+iOE9tWjZpUOIfDUcFSfX/5EyEGTWKqg51H8Eu8rD1OTs11+i/VDoqs
oSi7I2SrUu0nNfAMcgYK1omYXs5euN/9VySujAMo0n0CHz6bGwyGkObBZSkYYJUa
oSAxxkrLQRQcYWrPloDxJgsvySZ3gMnrxesZp0WQl2eCBZXEzKf/GJyjdZqrDPzV
3ClJ952tzqNcrSFzzXK+UduM5heQcXvglL951StimzLgefrR1uDfQ6KD7dnysVdz
N88EfsLpDMufBoQK8lf5COYiR4Mi4DE81/vqSr/dmZemtZDD49jrrpZGol47nILg
BkAHqfEmfYXScUIU4w6YYD4ZBmdw+9WctSbXHOuX5z9m6/52LLVuZ62caEW4ZoNg
W9hv+Okfd6S4MGavZzwMoYuEQXUPhxbFXCDx58G3zO3RrJDpjAeZouqrKjGNTu9G
bVZPGjiABAcnYVYHFZgJiwO5b93DGDco3+2LvgaodmaBCBBqjLuEekNOqZaKnH7a
ufcIkDHfZyBvHV8b6ISImmx4xuPSeln8K5RQV+Bz4s2CZapt8lryPZwOvNjLA9EP
lOy8+Dk3afwaGrwRUcpu16eCRZT6QvHE+bLd7TJd0OWusVBX7Mg=
=iDHZ
-----END PGP SIGNATURE-----

@ -1,257 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
Icon=libreoffice-impress
Type=Application
Categories=Office;Presentation;X-Red-Hat-Base;X-MandrivaLinux-Office-Presentations;
Exec=libreoffice --impress %U
MimeType=application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/mspowerpoint;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroEnabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroEnabled.12;application/vnd.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;application/vnd.oasis.opendocument.presentation-flat-xml;application/x-iwork-keynote-sffkey;
Name=LibreOffice Impress
Name[ru]=Редактор презентаций LibreOffice Impress
GenericName=Presentation
GenericName[af]=Voorlegging
GenericName[ar]=عرض تقديمي
GenericName[as]=পৰিৱেশন
GenericName[bg]=Презентация
GenericName[bn]=উপস্থাপনা
GenericName[br]=Kinnigadenn
GenericName[ca]=Presentació
GenericName[cs]=Prezentace
GenericName[cy]=Cyflwyniad
GenericName[da]=Præsentation
GenericName[de]=Präsentation
GenericName[dz]=Presentation
GenericName[el]=Παρουσίαση
GenericName[en]=Presentation
GenericName[eo]=Prezentaĵo
GenericName[es]=Presentación
GenericName[et]=Esitlus
GenericName[eu]=Aurkezpena
GenericName[fa]=ارائه
GenericName[fi]=Esitys
GenericName[fr]=Présentation
GenericName[fy]=Presintaasje
GenericName[ga]=Láithreoireacht
GenericName[gl]=Presentación
GenericName[gu]=પ્રેઝન્ટેશન
GenericName[he]=מצגת
GenericName[hi]=प्रस्तुति
GenericName[hr]=Prezentacija
GenericName[hu]=Bemutató
GenericName[id]=Presentasi
GenericName[it]=Presentazione
GenericName[ja]=プレゼンテーション
GenericName[kk]=Презентация
GenericName[kn]=ಪ್ರೆಸೆಂಟೇಶನ್
GenericName[ko]=프레젠테이션
GenericName[lt]=Pateiktis
GenericName[lv]=Prezentācija
GenericName[mai]=प्रस्तुति
GenericName[ml]=പ്രസന്റേഷന്‍
GenericName[mr]=सादरीकरण
GenericName[nb]=Presentasjon
GenericName[nl]=Presentatie
GenericName[nn]=Presentasjon
GenericName[nr]=Presentation
GenericName[nso]=Tlhagišo
GenericName[or]=ଉପସ୍ଥାପନା
GenericName[pa_IN]=ਪਰਿਜੈਂਟੇਸ਼ਨ
GenericName[pl]=Prezentacja
GenericName[pt]=Apresentação
GenericName[pt_BR]=Apresentação
GenericName[ro]=Prezentare
GenericName[ru]=Презентация
GenericName[si]=ඉදිරිපත් කිරීම
GenericName[sk]=Prezentácia
GenericName[sl]=Predstavitev
GenericName[sr]=Презентација
GenericName[sr_Latn]=Prezentacija
GenericName[ss]=Presentation
GenericName[st]=Presentation
GenericName[sv]=Presentation
GenericName[ta]=வழங்கல்
GenericName[te]=ప్రజంటేషన్
GenericName[th]=การนำเสนอ
GenericName[tn]=Presentation
GenericName[tr]=Sunum
GenericName[ts]=Presentation
GenericName[uk]=Презентація
GenericName[ve]=Presentation
GenericName[xh]=Presentation
GenericName[zh_CN]=演示文稿
GenericName[zh_TW]=簡報
GenericName[zu]=Ukunikezwa kolwazi
Comment=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
Comment[af]=Skep en redigeer voorleggings vir skyfievertonings, vergaderings en webbladsye met Impress.
Comment[ar]=حرِّر وأنشئ عروضًا لعروض الشرائح، وال اجتماعات و صفحات الوِب باستخدام إمبرِس.
Comment[as]=Impress ব্যৱহাৰ কৰি শ্লাইডশ্ব', মিটিং আৰু ৱেব পৃষ্ঠা সৃষ্টি আৰু সম্পাদনা কৰক।
Comment[bg]=С Impress можете да създавате и редактирате презентации за прожекции, събрания и уебстраници.
Comment[bn]=ইমপ্রেস ব্যবহার করে স্লাইড-প্রদর্শনী, মিটিং এবং ওয়েবপেজের জন্য উপস্থাপনা তৈরি এবং সম্পাদনা করুন।
Comment[br]=Impress - Krouiñ hag embann kinnigadennoù evit treyonennaouegoù, emvodoù ha pajennoù Web.
Comment[ca]=Creeu i editeu presentacions per a diapositives, pàgines web i conferències amb l'Impress.
Comment[cs]=Impress umožňuje vytvářet a upravovat prezentace pro přednášky, porady a webové stránky.
Comment[cy]=Creu a golygu cyflwyniadau ar gyfer sioeau sleidiau, cyfarfodydd a thudalennau Gwe gan ddefnyddio Impress.
Comment[da]=Opret og rediger præsentationer til oplæg, møder og websider ved brug af Impress.
Comment[de]=Erstellen und Bearbeiten von Präsentationen für Dia-Vorführungen, Meetings und Web-Auftritte Impress macht's möglich.
Comment[dz]=ཨིམ་པི་རས་ི་པ་ལག་ལེན་འཐབ་ཐོག་བཤུད་བརྙན་དང་ཞལ་འཛོམས་ ལས་ ཝེབ་པཚུ་གི་དོན་ལས་གསལ་སྟོན་ཚིག་ཡིག་དང་ཚད་རིས་ཚུ་བཟོ་ནི་དང་ཞུན་དག་རྐྱབ་ནི།
Comment[el]=Δημιουργία και επεξεργασία παρουσιάσεων για προβολή διαφανειών, συναντήσεων και ιστοσελίδων με τη χρήση του Impress.
Comment[en]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
Comment[eo]=Krei kaj redakti prezentaĵojn por prezentadoj, renkontiĝoj kaj TTT-paĝoj per Prezentilo.
Comment[es]=Cree y edite presentaciones para charlas, reuniones y páginas Web con Impress.
Comment[et]=Impress võimaldab luua ja redigeerida esitlusi slaidiseansside, koosolekute ning veebilehtede jaoks.
Comment[eu]=Aurkezpenak sortu eta editatu diapositiba-aurkezpenetarako, bileretarako eta web orrietarako Impress erabiliz.
Comment[fa]=با جلوه، ارائه‌هایی برای نمایش‌های اسلایدی، جلسات و صفحات وب ایجاد یا ویرایش کنید.
Comment[fi]=Luo ja muokkaa esityksiä kokouksiin ja www-sivuille käyttämällä Impress-ohjelmaa.
Comment[fr]=Impress - Création et édition de présentations pour diaporamas, réunions et pages Web.
Comment[fy]=Mei Impress kinne jo presintaasjes foar diafoarstelllingen, gearkomsten en websteeën meitsje en bewurkje.
Comment[ga]=Cruthaigh láithreoireachtaí agus cuir in eagar iad le haghaidh taispeántas sleamhnán, cruinnithe agus leathanaigh Ghréasán le hImpress.
Comment[gl]=Crear e editar presentacións para reunións, páxinas web e presentacións de diapositivas con Impress.
Comment[gu]=ઇમ્પ્રેસ દ્દારા સ્લાઇડ શો, મુલાકાતો અને વેબ પાનાઓ બનાવો અને સુઘારો.
Comment[he]=יצירה ועריכה של מצגות לתצוגת שקופיות, פגישות ודפי אינטרנט באמצעות Impress.
Comment[hi]=इम्प्रेस के प्रयोग से स्लाइडशो, बैठक, और वेब पेज के लिए प्रस्तुति बनाता है और संपादन करता है.
Comment[hr]=Stvorite i uredite prezentacije za prikazivanje, sastanke i internet stranice koristeći Impress.
Comment[hu]=Bemutatók készítése és szerkesztése diavetítésekhez vagy a webre az Impress használatával.
Comment[id]=Mengolah presentasi untuk pertunjukan salindia, rapat, dan halaman Web menggunakan Impress.
Comment[it]=Impress ti permette di creare e modificare presentazioni, diapositive e pagine web.
Comment[ja]=Impress を使用して、スライドショー、ミーティングおよび Web ページ用のプレゼンテーションを作成して編集します。
Comment[kk]=Impress көмегімен слайдшоу, кездесулер және веб-парақтарға арналған презентацияларды жасау және түзетуге болады.
Comment[kn]=ಇಂಪ್ರೆಸ್ ಬಳಸಿ ಜಾರುಫಲಕ ಪ್ರದರ್ಶನಗಳಿಗಾಗಿ, ಸಭೆಗಳಲ್ಲಿ ಬಳಸಲು, ಮತ್ತು ಜಾಲ ಪುಟಗಳನ್ನು ಪ್ರಸ್ತುತಿಗಳನ್ನು ಸೃಷ್ಟಿಸಿ ಮತ್ತು ಸಂಪಾದಿಸಿ.
Comment[ko]=임프레스를 사용하여 슬라이드 쇼, 회의 및 웹 페이지에 대한 프레젠테이션을 만들고 편집합니다.
Comment[lt]=Pateikčių rengykle rengiamos pateiktys pranešimams, pateiktis galima įkelti į tinklalapį.
Comment[lv]=Veidot un rediģēt vizuālos uzskates un prezentāciju līdzekļus, lietojot Impress.
Comment[mai]=Impress क' प्रयोगसँ स्लाइडशो, बैठक, आओर वेब पेजक लेल प्रस्तुति बनबैत आ संपादन करैत अछि.
Comment[ml]=ഇംപ്രസ് ഉപയോഗിച്ച് സ്ലൈഡ് പ്രദര്ശനങ്ങളിലെയും, മീറ്റിങ്ങിന്റെയും വെബ്പേജിന്റെയും അവതരണങ്ങള് സൃഷ്ടിക്കുകയും എഡിറ്റു ചെയ്യുകയും ചെയ്യുക.
Comment[mr]=Impress चा वापरून स्लाइडशो, भेटी व वेब पान करीता सादरीकरण बनवा व संपादीत करा.
Comment[nb]=Opprett og rediger presentasjoner for lysbildeframvisning, møter og nettsider ved å bruke Impress.
Comment[nl]=Met Impress kunt u presentaties voor diavoorstellingen, vergaderingen en webpagina's maken en bewerken.
Comment[nn]=Med Impress kan du laga og redigera presentasjonar for framvisingar, møte og nettsider.
Comment[nr]=Enza nokuhlela amphrizentheyitjhini wamaslayidishowu, imihlangano namakahsi we-Webh ngokusebenzisa i-Impress.
Comment[nso]=Hlama le go lokiša ditlhagišo bakeng sa dipontšho tša selaete, dikopano le matlakala a wepe ka go diriša Impress.
Comment[or]=ଇମ୍ଫ୍ରେସ୍ ଉପୟୋଗକରି ସ୍ଲାଇଡ୍ ଦୃଶ୍ଯ,ମିଟିଙ୍ଗ ଏବଂ ଉଏବ୍ ପୃଷ୍ଠାଗୁଡିକ ପାଇଁ ଉପସ୍ଥାପନାଗୁଡିକୁ ସୃଷ୍ଟି ଏବଂ ସମ୍ପାଦନ କର।
Comment[pa_IN]=ਇੰਪਰੈੱਸ ਨਾਲ ਸਲਾਈਡ-ਸ਼ੋ, ਮੀਟਿੰਗ ਅਤੇ ਵੈੱਬਸਫ਼ੇ ਨੂੰ ਬਣਾਇਆ ਅਤੇ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।
Comment[pl]=Twórz i edytuj prezentacje, które będziesz mógł wykorzystać podczas pokazów, spotkań oraz na stronach internetowych za pomocą programu Impress.
Comment[pt]=Criar e editar apresentações para reuniões, conferências e páginas web com o Impress.
Comment[pt_BR]=Crie e edite apresentações para slides, reuniões e páginas da Web por meio do Impress.
Comment[ro]=Creați și editați prezentări pentru întâlniri și pagini web folosind Impress.
Comment[ru]=Создание и редактирование презентаций для показов, встреч и веб-страниц.
Comment[si]=Impress භාවිතා කරමින් ඉදිරිපත් කිරීම් සඳහා තිරපෙන්නුම්, හමුවීම් සහ වියුණු පිටු සාදන්න සහ වෙනස් කරන්න.
Comment[sk]=Vytvárajte a upravujte prezentácie pre porady s stretnutia s použitím Impress.
Comment[sl]=S programom Impress ustvarjajte in urejajte predstavitve, prosojnice in spletne strani.
Comment[sr]=Направите и уређујте презентације за пројекције, састанке и Интернет у Презентацији.
Comment[sr_Latn]=Napravite i uređujte prezentacije za projekcije, sastanke i Internet u Prezentaciji.
Comment[ss]=Yakha u-edithe kwetfulwa kwetitfuntishelela, kuhlangana nemapheji ewebhu ngekusebentisa Impress.
Comment[st]=Bopa le ho lokisa dinehelano tsa dipontsho tsa selaete, dikopano le maqephe a Wepe ka ho sebedisa Impress.
Comment[sv]=Skapa och redigera presentationer för bildskärmspresentationer, möten och webbsidor med hjälp av Impress.
Comment[ta]=வில்லைக்காட்சிகள், கூட்டம், வலைப்பக்கங்கள் ஆகியவற்றிற்கான வழங்கலை உருவாக்கவும் தொகுக்கவும் இம்பிரெசைப் பயன்படுத்துக.
Comment[te]=స్లైడ్ షోలు యొక్క ప్రజంటేషన్ లు,సభ మరియు వెబ్ పుటలును ఇంప్రెస్ వుపయోగించినిర్మించి, సరిచేయుము.
Comment[th]=สร้างและแก้ไขงานนำเสนอภาพนิ่ง การประชุม และหน้าเว็บโดยการใช้ Impress
Comment[tn]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
Comment[tr]=Impress kullanarak sunum, toplantı, belge ve Web sayfaları oluşturabilir ve düzenleyebilirsiniz.
Comment[ts]=Endla ni ku lulamisa Minkombiso ya tislayidi, tipheji ta minhlangani ni ta Web hi ku tirhisa Impress.
Comment[uk]=Створення та редагування презентацій для показу слайдів, зустрічей та веб-сторінок.
Comment[ve]=Vhumbani nahone ni lulamise nzudzanyo u itela misumbedzo ya siḽaidi, muṱangano na masiaṱari a Web nga u shumisa Impress.
Comment[xh]=Dala uze uhlele iinkcazelo-mboniso yemiboniso yezlayidi, iintlanganiso namakhasi Othungelwano ngokusebenzisa i-Impress.
Comment[zh_CN]=使用 Impress 创建并编辑幻灯片、会议和网页中使用的演示文稿。
Comment[zh_TW]=使用 Impress 可建立與編輯用於投影片、會議和網頁的簡報。
Comment[zu]=Yenza futhi ulungise imiboniso amaslaydi, amakhasi emihlangano naweWebhu ngokusebenzisa i-Impress.
StartupNotify=true
X-GIO-NoFuse=true
Keywords=Slideshow;Slides;OpenDocument Presentation;Microsoft PowerPoint;Microsoft Works;OpenOffice Impress;odp;ppt;pptx;
InitialPreference=5
StartupWMClass=libreoffice-impress
X-KDE-Protocols=file,http,ftp,webdav,webdavs
Actions=NewDocument;
[Desktop Action NewDocument]
Name=New Presentation
Name[af]=Nuwe voorlegging
Name[ar]=عرض تقديمي جديد
Name[as]=নতুন পৰিৱেশন
Name[bg]=Нова презентация
Name[bn]=New Presentation
Name[br]=Kinnigadenn nevez
Name[ca]=Presentació nova
Name[cs]=Nová prezentace
Name[cy]=Cyflwyniad Newydd
Name[da]=Ny præsentation
Name[de]=Neue Präsentation
Name[dz]=གསལ་སྟོན་གསརཔ།
Name[el]=Νέα παρουσίαση
Name[en]=New Presentation
Name[eo]=Nova prezentaĵo
Name[es]=Presentación nueva
Name[et]=Uus esitlus
Name[eu]=Aurkezpen berria
Name[fa]=ارائه جدید
Name[fi]=Uusi esitys
Name[fr]=Nouvelle présentation
Name[fy]=Nije presintaasje
Name[ga]=Láithreoireacht Nua
Name[gl]=Presentación
Name[gu]=નવી રજૂઆત
Name[he]=מצגת חדשה
Name[hi]=नई प्रस्तुति
Name[hr]=Nova prezentacija
Name[hu]=Új bemutató
Name[id]=Presentasi Baru
Name[it]=Nuova presentazione
Name[ja]=新規のプレゼンテーション
Name[kk]=Жаңа презентация
Name[kn]=ಹೊಸ ಪ್ರೆಸೆಂಟೇಶನ್
Name[ko]=새 프레젠테이션
Name[lt]=Nauja pateiktis
Name[lv]=Jauna prezentācija
Name[mai]=New Presentation
Name[ml]=പുതിയ പ്രസന്റേഷന്‍
Name[mr]=नवीन सादरीकरण
Name[nb]=Ny presentasjon
Name[nl]=Nieuwe presentatie
Name[nn]=Ny presentasjon
Name[nr]=Iphrizentheyitjhini Etja
Name[nso]=New Presentation
Name[or]=ନୂଆ ଉପସ୍ଥାପନା
Name[pa_IN]=ਨਵਾ ਸਲਾਈਡ-ਸ਼ੋ
Name[pl]=Nowa prezentacja
Name[pt]=Nova apresentação
Name[pt_BR]=Nova apresentação
Name[ro]=Prezentare nouă
Name[ru]=Создать презентацию
Name[si]=ඉදිරිපත් කිරීම
Name[sk]=Nová prezentácia
Name[sl]=Nova predstavitev
Name[sr]=Нова презентација
Name[sr_Latn]=Nova prezentacija
Name[ss]=Kwetfula lokusha
Name[st]=Nehelano e Ntjha
Name[sv]=Ny presentation
Name[ta]=புதிய விளக்கக்காட்சி
Name[te]=కొత్త ప్రజంటేషన్
Name[th]=งานนำเสนอใหม่
Name[tn]=New Presentation
Name[tr]=Yeni Sunum
Name[ts]=Nkombiso Wuntshwa
Name[uk]=Презентація
Name[ve]=Nzudzanyo Ntswa
Name[xh]=Inkcazelo Eboniswayo Entsha
Name[zh_CN]=新建演示文稿
Name[zh_TW]=新增簡報
Name[zu]=New Presentation
Icon=document-new
Exec=libreoffice --impress

@ -1,258 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
NoDisplay=false
Icon=libreoffice-math
Type=Application
Categories=Office;Education;Science;Math;X-Red-Hat-Base;X-MandrivaLinux-Office-Other;
Exec=libreoffice --math %U
MimeType=application/vnd.oasis.opendocument.formula;application/vnd.sun.xml.math;application/vnd.oasis.opendocument.formula-template;text/mathml;application/mathml+xml;
Name=LibreOffice Math
Name[ru]=Редактор формул LibreOffice Math
GenericName=Formula Editor
GenericName[af]=Formule-redigeerder
GenericName[ar]=محرر الصيغة
GenericName[as]=সূত্র সম্পাদক
GenericName[bg]=Редактор на формули
GenericName[bn]=সূত্র সম্পাদক
GenericName[br]=Embanner reollunioù
GenericName[ca]=Editor de fórmules
GenericName[cs]=Editor vzorců
GenericName[cy]=Golygydd Fformiwla
GenericName[da]=Formeleditor
GenericName[de]=Formeleditor
GenericName[dz]=Formula Editor
GenericName[el]=Επεξεργαστής τύπων
GenericName[en]=Formula Editor
GenericName[eo]=Formuloredaktilo
GenericName[es]=Editor de fórmulas
GenericName[et]=Valemiredaktor
GenericName[eu]=Formula editorea
GenericName[fa]=ویرایش‌گر فرمول
GenericName[fi]=Kaavaeditori
GenericName[fr]=Éditeur de formule
GenericName[fy]=Formule bewurker
GenericName[ga]=Eagarthóir Foirmlí
GenericName[gl]=Editor de fórmulas
GenericName[gu]=સૂત્ર સંપાદક
GenericName[he]=עורך נוסחאות
GenericName[hi]=सूत्र संपादक
GenericName[hr]=Uređivač matematičkih formula
GenericName[hu]=Képletszerkesztő
GenericName[id]=Penyunting Rumus
GenericName[it]=Elaboratore di formule
GenericName[ja]=数式エディター
GenericName[kk]=Формулалар түзеткіші
GenericName[kn]=ಸೂತ್ರ ಸಂಪಾದಕ
GenericName[ko]=수식 편집기
GenericName[lt]=Formulių rengyklė
GenericName[lv]=Formulu redaktors
GenericName[mai]=Formula Editor
GenericName[ml]=ഫോര്‍മുലാ എഡിറ്റര്‍
GenericName[mr]=सूत्र संपादक
GenericName[nb]=Formelredigering
GenericName[nl]=Formule-bewerker
GenericName[nn]=Formelredigering
GenericName[nr]=Formula Editor
GenericName[nso]=Morulaganyi wa fomula
GenericName[or]=ସୂତ୍ର ସମ୍ପାଦକ
GenericName[pa_IN]=ਫਾਰਮੂਲਾ ਐਡੀਟਰ
GenericName[pl]=Edytor formuł
GenericName[pt]=Editor de fórmulas
GenericName[pt_BR]=Editor de fórmulas
GenericName[ro]=Editor de formule
GenericName[ru]=Редактор формул
GenericName[si]=සූත්‍ර සකසනය
GenericName[sk]=Editor vzorcov
GenericName[sl]=Urejevalnik formul
GenericName[sr]=Уређивач формуле
GenericName[sr_Latn]=Uređivač formule
GenericName[ss]=Formula Editor
GenericName[st]=Formula Editor
GenericName[sv]=Formelredigerare
GenericName[ta]=சூத்திரத் திருத்தி
GenericName[te]=ఫార్ములా సరికూర్పరి
GenericName[th]=ตัวแก้ไขสูตร
GenericName[tn]=Formula Editor
GenericName[tr]=Formül Düzenleyici
GenericName[ts]=Formula Editor
GenericName[uk]=Редактор формул
GenericName[ve]=Formula Editor
GenericName[xh]=Formula Editor
GenericName[zh_CN]=公式编辑器
GenericName[zh_TW]=公式編輯器
GenericName[zu]=Formula Editor
Comment=Create and edit scientific formulas and equations by using Math.
Comment[af]=Skep en redigeer wetenskaplike formules en vergelykings met Math.
Comment[ar]=إنشاء الصيغ العلمية و المعادلات و تحريرها باستخدام ماث.
Comment[as]=Math ব্যৱহাৰ কৰি বৈজ্ঞানিক সূত্ৰ আৰু সমীকৰণবোৰ সৃষ্টি আৰু সম্পাদনা কৰক।
Comment[bg]=С Math можете да създавате и редактирате математически формули и уравнения.
Comment[bn]=ম্যাথ ব্যবহার করে বৈজ্ঞানিক ফর্মূলা এবং সমীকরণ তৈরি এবং সম্পাদনা করুন।
Comment[br]=Math. - Krouiñ hag embann reollunioù skiantel hag ataladoù.
Comment[ca]=Creeu i editeu fórmules científiques i equacions amb el Math.
Comment[cs]=Math umožňuje vytvářet a upravovat vědecké vzorce a rovnice.
Comment[cy]=Creu a golygu fformiwlâu gwyddonol a hafaliadau gan ddefnyddio Math.
Comment[da]=Opret og rediger videnskabelige formler ved brug af Math.
Comment[de]=Wissenschaftliche Formeln setzen und bearbeiten Math macht's möglich.
Comment[dz]=ཨང་རྩིས་ལག་ལེན་འཐབ་ཐོག་ལས་ ཚན་རིག་དང་འབྲེལ་བའི་མན་ངག་དང་ཨི་ཀུའེ་ཊེ་ཤཱན་བཟོ་ནི་དང་ཞུན་དག་རྐྱབ་ནི།
Comment[el]=Δημιουργία και επεξεργασία επιστημονικών τύπων και εξισώσεων με τη χρήση του Math.
Comment[en]=Create and edit scientific formulas and equations by using Math.
Comment[eo]=Krei kaj redakti sciencajn formulojn kaj ekvaciojn per Formulilo.
Comment[es]=Cree y edite fórmulas científicas y ecuaciones con Math.
Comment[et]=Math võimaldab luua ja redigeerida teaduslikke valemeid ning võrrandeid.
Comment[eu]=Formula zientifikoak eta ekuazioak sortu eta editatu Math erabiliz.
Comment[fa]=با استفاده از ریاضی، فرمول‌ها و معادلات ریاضی ایجاد یا ویرایش کنید.
Comment[fi]=Luo ja muokkaa tieteellisiä kaavioita ja yhtälöitä käyttämällä Math -ohjelmaa.
Comment[fr]=Math - Création et édition de formules scientifiques et d'équations.
Comment[fy]=Mei Math kinne jo wiskundige formulen en ferlikingen meitsje en bewurkje.
Comment[ga]=Cruthaigh foirmlí eolaíocha agus cothromóidí agus cuir iad in eagar le Math.
Comment[gl]=Crear e editar fórmulas científicas e ecuacións con Math.
Comment[gu]=ગણિત વડે વૈજ્ઞાનિક સુત્રો અને સમીકરણો બનાવો.
Comment[he]=יצירה ועריכה של נוסחאות ומשוואות מדעיות באמצעות תוכנת הנוסחאות.
Comment[hi]=गणित के प्रयोग से वैज्ञानिक सूत्र बनाएं और संपादित करें.
Comment[hr]=Stvorite i uredite znanstvene formule i jednadžbe.
Comment[hu]=Képletek és egyenletek létrehozása és szerkesztése a Math használatával.
Comment[id]=Mengolah rumus ilmiah maupun persamaannya menggunakan Math.
Comment[it]=Math ti permette di creare e modificare formule scientifiche ed equazioni.
Comment[ja]=Math を使用して、科学の公式や方程式を作成し、編集します。
Comment[kk]=Math көмегімен ғылыми формулаларды және теңдеулерді жасау және түзетуге болады.
Comment[kn]=ಮ್ಯಾಥ್ ಬಳಸಿ ವೈಜ್ಞಾನಿಕ ಸೂತ್ರಗಳನ್ನು ಮತ್ತು ಸಮೀಕರಣಗಳನ್ನು ರಚಿಸಿ ಮತ್ತು ಸಂಪಾದಿಸಿ.
Comment[ko]=매쓰를 사용하여 수식 및 공학용 수식을 만들고 편집합니다.
Comment[lt]=Formulių rengyklė skirta formulėms ir lygtims rašyti.
Comment[lv]=Veidot un rediģēt formulas un vienādojumus, lietojot Math.
Comment[mai]=Math क प्रयोगसँ वैज्ञानिक सूत्र बनाबु आ संपादित करू.
Comment[ml]=കണക്ക് ഉപയോഗിച്ച് ശാസ്ത്രീയ സൂത്രവാക്യങ്ങളും സമവാക്യങ്ങളും സൃഷ്ടിക്കുകയും എഡിറ്റു ചെയ്യുകയും ചെയ്യാം.
Comment[mr]=Math चा वापर करून वैज्ञानिक सूत्रे व समीकरणे बनवा व संपादीत करा.
Comment[nb]=Opprett og rediger vitenskapelige formler og ligninger ved bruk av Math.
Comment[nl]=Met Math kunt u wiskundige formules en vergelijkingen maken en bewerken.
Comment[nn]=Med Math kan du laga og redigera vitskaplege formlar og likningar.
Comment[nr]=Enza nokuhlela amafomula namakhotheyitjhini ngokusebenzisa i-Math.
Comment[nso]=Hlama le go lokiša difomula tša saense le diekhoišene ka go diriša Math.
Comment[or]=ଗଣିତ ଉପୟୋଗକରି ବୌଜ୍ଞାନିକ ସୂତ୍ର ଏବଂ ସମିକରଣଗୁଡିକୁ ସୃଷ୍ଟି ଏବଂ ସମ୍ପାଦନ କର ।
Comment[pa_IN]=ਗਣਿਤ (Math) ਨਾਲ ਵਿਗਿਆਨਕ ਫਾਰਮੂਲੇ ਅਤੇ ਸਮੀਕਰਨ ਬਣਾਓ।
Comment[pl]=Twórz i edytuj wzory matematyczne i naukowe za pomocą programu Math.
Comment[pt]=Criar e editar fórmulas e equações científicas com o Math.
Comment[pt_BR]=Crie e edite fórmulas científicas e equações por meio do Math.
Comment[ro]=Creați și editați formule științifice și ecuații folosind Math.
Comment[ru]=Создание и редактирование научных формул и уравнений.
Comment[si]=Math භාවිතා කරමින් විද්‍යාත්මක සූත්‍ර සහ සමීකරණ සාදන්න සහ වෙනස් කරන්න.
Comment[sk]=Vytvárajte a upravujte vedecké vzorce a výrazy s použitím Math.
Comment[sl]=S programom Math ustvarjajte in urejajte znanstvene formule in enačbe.
Comment[sr]=Направите и уређујте научне формуле и једначине у Математици.
Comment[sr_Latn]=Napravite i uređujte naučne formule i jednačine u Matematici.
Comment[ss]=Yakha u-edithe ngekwesayensi yemafomula nemakhweshini ngakusebentisa Math.
Comment[st]=Bopa le ho lokisa difomula tsa saense le diekweishene ka ho sebedisa Math.
Comment[sv]=Skapa och redigera vetenskapliga formler och ekvationer med hjälp av Math.
Comment[ta]=அறிவியல் சூத்திரங்களையும் சமன்பாடுகளையும் உருவாக்க, தொகுக்க மேத்தைப் பயன்படுத்து.
Comment[te]=శాస్త్ర సూత్రములు మరియు సమీకరణములను మేథ్ తో నిర్మించి, సరిచేయుము
Comment[th]=สร้างและแก้ไขสูตรทางวิทยาศาสตร์และสมการโดยการใช้ Math
Comment[tn]=Create and edit scientific formulas and equations by using Math.
Comment[tr]=Math kullanarak bilimsel formülleri ve eşitlikleri oluşturabilir ve düzenleyebilirsiniz.
Comment[ts]=Endla ni ku lulamisa Tifomula ta vutshila bya sayense ni tinhlayo hi ku tirhisa Math.
Comment[uk]=Створення та редагування наукових формул та рівнянь.
Comment[ve]=Vhumbani na u lumalamisa dzifomuḽa dza sainthifiki na dziikhwesheni nga u shumisa Math.
Comment[xh]=Dala uze uhlele iindlela zokusebenzisa inzululwazi nongqinelaniso ngokusebenzisa u-Math.
Comment[zh_CN]=使用 Math 创建并编辑科学公式和方程式。
Comment[zh_TW]=使用 Math 可建立與編輯科學公式與方程式。
Comment[zu]=Yenza futhi ulungise amafomula ezesayensi nama-ikhuweyjini ngokusebenzisa into yeziBalo.
StartupNotify=true
X-GIO-NoFuse=true
Keywords=Equation;OpenDocument Formula;Formula;odf;MathML;
InitialPreference=5
StartupWMClass=libreoffice-math
X-KDE-Protocols=file,http,ftp,webdav,webdavs
Actions=NewDocument;
[Desktop Action NewDocument]
Name=New Formula
Name[af]=Nuwe formule
Name[ar]=معادلة جديدة
Name[as]=নতুন সুত্ৰ
Name[bg]=Нова формула
Name[bn]=New Formula
Name[br]=Reollun nevez
Name[ca]=Fórmula nova
Name[cs]=Nový vzorec
Name[cy]=Fformiwla Newydd
Name[da]=Ny formel
Name[de]=Neue Formel
Name[dz]=New Formula
Name[el]=Νέος τύπος
Name[en]=New Formula
Name[eo]=Nova formulo
Name[es]=Fórmula nueva
Name[et]=Uus valem
Name[eu]=Formula berria
Name[fa]=فرمول جدید
Name[fi]=Uusi kaava
Name[fr]=Nouvelle formule
Name[fy]=Nije formule
Name[ga]=Foirmle Nua
Name[gl]=Nova fórmula
Name[gu]=નવુ સૂત્ર
Name[he]=נוסחה חדשה
Name[hi]=नया सूत्र
Name[hr]=Nova formula
Name[hu]=Új képlet
Name[id]=Rumus Baru
Name[it]=Nuova formula
Name[ja]=新規の数式
Name[kk]=Жаңа формула
Name[kn]=ಹೊಸ ಸೂತ್ರ
Name[ko]=새 수식
Name[lt]=Naujas formulių dokumentas
Name[lv]=Jauna formula
Name[mai]=New Formula
Name[ml]=പുതിയ ഫോര്‍മുലാ
Name[mr]=नवीन सूत्र
Name[nb]=Ny formel
Name[nl]=Nieuwe formule
Name[nn]=Ny formel
Name[nr]=New Formula
Name[nso]=New Formula
Name[or]=ନୂଆ ସୂତ୍ର
Name[pa_IN]=ਨਵਾ ਫਾਰਮੁੱਲਾ
Name[pl]=Nowa formuła
Name[pt]=Nova fórmula
Name[pt_BR]=Nova fórmula
Name[ro]=Formulă nouă
Name[ru]=Создать формулу
Name[si]=සූත්‍රය පෙන්වන්න
Name[sk]=Nový vzorec
Name[sl]=Nova formula
Name[sr]=Нова формула
Name[sr_Latn]=Nova formula
Name[ss]=New Formula
Name[st]=New Formula
Name[sv]=Nytt formelblad
Name[ta]=புதிய சூத்திரம்
Name[te]=కొత్త సూత్రం
Name[th]=สูตรใหม่
Name[tn]=New Formula
Name[tr]=Yeni Formül
Name[ts]=New Formula
Name[uk]=Створити формулу
Name[ve]=New Formula
Name[xh]=New Formula
Name[zh_CN]=新建公式
Name[zh_TW]=新增公式
Name[zu]=New Formula
Icon=document-new
Exec=libreoffice --math

@ -1,210 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
NoDisplay=true
Icon=libreoffice-startcenter
Type=Application
Categories=Office;X-Red-Hat-Base;X-SuSE-Core-Office;X-MandrivaLinux-Office-Other;
Exec=libreoffice %U
MimeType=application/vnd.openofficeorg.extension;x-scheme-handler/vnd.libreoffice.cmis;
Name=LibreOffice
Name[ru]=Офисный пакет LibreOffice
GenericName=Office
GenericName[af]=Kantoor
GenericName[ar]=مكتب
GenericName[as]=অফিচ
GenericName[bg]=Офис пакет
GenericName[bn]=অফিস
GenericName[br]=Burev
GenericName[ca]=Oficina
GenericName[cs]=Kancelář
GenericName[cy]=Swyddfa
GenericName[da]=Kontor
GenericName[de]=Office
GenericName[dz]=ཡིག་ཚང་།
GenericName[el]=Γραφείο
GenericName[en]=Office
GenericName[eo]=Oficejo
GenericName[es]=Programas de oficina
GenericName[et]=Kontoritöö
GenericName[eu]=Bulegoa
GenericName[fa]=اداری
GenericName[fi]=Toimisto
GenericName[fr]=Bureau
GenericName[fy]=Kantoar
GenericName[ga]=Oifig
GenericName[gl]=Oficina
GenericName[gu]=ઓફિસે
GenericName[he]=משרד
GenericName[hi]=ऑफ़िस
GenericName[hr]=Ured
GenericName[hu]=Iroda
GenericName[id]=Perkantoran
GenericName[it]=Ufficio
GenericName[ja]=Office
GenericName[kk]=Офис
GenericName[kn]=ಕಛೇರಿ
GenericName[ko]=오피스
GenericName[lt]=Raštinės programos
GenericName[lv]=Birojs
GenericName[mai]=ऑफिस
GenericName[ml]=ഓഫീസ്
GenericName[mr]=ऑफिस
GenericName[nb]=Kontor
GenericName[nl]=Kantoor
GenericName[nn]=Kontor
GenericName[nr]=i-Ofisi
GenericName[nso]=Ofisi
GenericName[or]=କାର୍ଯ୍ୟାଳୟ
GenericName[pa_IN]=ਆਫਿਸ
GenericName[pl]=Biuro
GenericName[pt]=Escritório
GenericName[pt_BR]=Office
GenericName[ro]=Birou
GenericName[ru]=Офис
GenericName[si]=කාර්‍යයාලීය
GenericName[sk]=Kancelária
GenericName[sl]=Pisarniški paket
GenericName[sr]=Канцеларија
GenericName[sr_Latn]=Kancelarija
GenericName[ss]=Lihhovisi
GenericName[st]=Ofisi
GenericName[sv]=Kontor
GenericName[ta]=அலுவலகம்
GenericName[te]=కార్యాలయం
GenericName[th]=ที่ทำงาน
GenericName[tn]=Kantoro/Ofisi
GenericName[tr]=Ofis
GenericName[ts]=Ofisi
GenericName[uk]=Офіс
GenericName[ve]=Ofisi
GenericName[xh]=Iofisi
GenericName[zh_CN]=办公
GenericName[zh_TW]=辦公
GenericName[zu]=Ihhovisi
Comment=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[af]=Die kantoorproduktiwiteitsuite met versoenbaarheid aan die gestandaardiseerde ODF-dokumentformaat. Geondersteun deur The Document Foundation.
Comment[ar]=الحقيبة اﻻنتاجية المكتبية متوافقة مع صيغ الوثائق المفتوحة المدعومة من مؤسسة الوثائق المفتوحة المصدر.
Comment[as]=মুক্ত আৰু প্ৰামাণিত ODF দস্তাবেজ বিন্যাসৰ লগত সংগত অফিচ উৎপাদনা চুইট। Document Foundation -ৰ দ্বাৰা সমৰ্থিত।
Comment[bg]=Офис пакетът, съвместим с отворения и стандартизиран формат за документи ODF. Поддържа се от The Document Foundation.
Comment[bn]=অফিস প্রোডাক্টিভিটি স্যুট মুক্ত ও আদর্শ ODF নথি বিন্যাসের সাথে সঙ্গতিপূর্ণ। নথি ফাউন্ডেশন দ্বারা সমর্থিত।
Comment[br]=An heuliad burevek keverlec'h gant ar mentrezh teul ODF skoueriekaet ha digor. Skoret eo gant The Document Foundation.
Comment[ca]=El paquet ofimàtic compatible amb el format de document obert i estàndard ODF. Amb el suport de The Document Foundation.
Comment[cs]=Kancelářský balík kompatibilní s otevřeným a standardizovaným formátem dokumentů ODF. Podporován The Document Foundation.
Comment[cy]=Y casgliad o raglenni swyddfa sy'n gydnaws a'r fformat Dogfen ODF safonol. Cefnogir gan y Document Foundation.
Comment[da]=Kontorpakken er kompatibel med den åbne standard ODF. Støttes af The Document Foundation.
Comment[de]=Die produktive Bürosoftware ist kompatibel zu dem offenen und standardisierten OpenDocument-Format (ODF). Unterstützt von The Document Foundation.
Comment[dz]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[el]=Το συμβατό πακέτο παραγωγικότητας γραφείου στην ανοιχτή και τυποποιημένη μορφή εγγράφου ODF. Υποστηρίζεται από το Document Foundation.
Comment[en]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[eo]=La oficeja programaro kongrua kun la malferma kaj norma ODF-dokumenta formato. Subtenata de la Document Foundation.
Comment[es]=El conjunto de aplicaciones de productividad ofimática compatible con el formato de documentos abierto y estandarizado ODF. Con el apoyo de The Document Foundation.
Comment[et]=Kontoritarkvara komplekt, mis ühildub avatud ja standardiseeritud ODF-dokumendivorminguga. Toetab Document Foundation.
Comment[eu]=ODF dokumentu-formatu ireki eta estandarizatuarekin bateragarria den bulegotikako produktibitate-suitea. The Document Foundation fundazioaren babespean.
Comment[fa]=مجموعه نرم‌افزار اداری سازگار با قالب سند آزاد و استاندارد شده ODF. پشتیبانی شده توسط بنیاد اسناد.
Comment[fi]=Avoimen ODF-asiakirjastandardin kanssa yhteensopiva, The Document Foundationin tukema toimisto-ohjelmisto.
Comment[fr]=La suite de productivité bureautique compatible avec le format de document ODF standardisé et ouvert. Prise en charge par The Document Foundation.
Comment[fy]=It pakket foar produktiviteit op kantoar, kompatibel mei it iepen en standerdisearre ODF dokumint formaat. Stipe troch The Document Foundation.
Comment[ga]=Sraith feidhmchlár le haghaidh táirgiúlachta oifige atá comhoiriúnach don fhormáid oscailte chaighdeánach ODF. Tacaíonn The Document Foundation leis.
Comment[gl]=A suite de produtividade de oficina compatíbel co formato de documento estándar ODF. Promovida por The Document Foundation.
Comment[gu]=ઑફિસ પ્રોડક્ટીવીટી સ્યૂટ ઓપન અને મૂળભૂત થયેલ ODF દસ્તાવેજ બંધારણ સાથે સુસંગત છે. દસ્તાવેજ ફાઉન્ડેશન દ્દારા આધારભૂત છે.
Comment[he]=חבילת כלי המשרד תואמת למבנה הקבצים התקני והפתוח ODF. כאשר התמיכה הנה מצד The Document Foundation (קרן המסמך).
Comment[hi]=मुक्त और मानकीकृत ODF दस्तावेज़ प्रारूप के सुसंगत ऑफिस उत्पादकता सूइट. डॉक्यूमेंट फाउंडेशन द्वारा समर्थित.
Comment[hr]=Uredski paket je usklađen s otvorenim i standardiziranim ODF formatom dokumenta. Podržan od strane The Document Foundation.
Comment[hu]=Az irodai programcsomag kompatibilis a nyílt és a szabványosított ODF dokumentumformátummal. A The Document Foundation támogatja.
Comment[id]=Paket aplikasi kantor ini kompatibel dengan format dokumen ODF. Didukung oleh The Document Foundation.
Comment[it]=La suite di produttività per l'ufficio compatibile con il formato standard aperto ODF. Supportata da The Document Foundation.
Comment[ja]=オープンで標準化された ODF ドキュメント形式に準拠したオフィススイートです。The Document Foundation によってサポートされています。
Comment[kk]=Кеңселік бағдарламалар дестесі ашық және стандартталған ODF құжаттар пішімімен үйлесімді. The Document Foundation қолдау көрсетеді.
Comment[kn]=ಮುಕ್ತ ಹಾಗು ಶಿಷ್ಟ ಎಂದು ಪರಿಗಣಿಸಲಾದ ODF ದಸ್ತಾವೇಜು ವಿನ್ಯಾಸಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗುವ ಒಂದು ಆಫೀಸ್ ಪ್ರೊಡಕ್ಟೀವ್ ಸೂಟ್ ಆಗಿದೆ. ಡಾಕ್ಯುಮೆಂಟ್ ಫೌಂಡೇಶನ್‌ನಿಂದ ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ.
Comment[ko]=개방 및 표준화된 ODF 문서 형식에 적합한 오피스 생산성 제품군입니다. 문서재단(The Document Foundation)에서 지원합니다.
Comment[lt]=Raštinės programų rinkinys, suderinamas su atviruoju standartizuotu ODF dokumentų formatu. Rinkinį kuria „The Document Foundation“ bendruomenė.
Comment[lv]=Biroja programmatūras komplekts, kas ir savietojams ar atvērto un standartizēto ODF dokumentu formātu. Atbalsta The Document Foundation.
Comment[mai]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[ml]=സ്വതന്ത്രവും നിലവാരവുമുള്ള ഒഡിഎഫ് ശൈലിയ്ക്കു് ഉചിതമായ ഓഫീസ് പ്രൊഡക്ടിവിറ്റി സ്യൂട്ട്. ഇതിനെ ഡോക്യുമെന്റ് ഫൌണ്ടേഷന്‍ പിന്തുണയ്ക്കുന്നു.
Comment[mr]=ओपन व मानक ODF दस्तऐवज रूपणशी सहत्व ऑफिस प्रोडक्टिविटि संच. डॉक्युमेंट फाँडेशनद्वारे समर्थीत.
Comment[nb]=Kontorpakken som bruker det åpne og standardiserte dokumentformatet ODF. Støttet av The Document Foundation.
Comment[nl]=Het pakket voor productiviteit op kantoor, compatibel met het open en gestandaardiseerde ODF documentformaat. Ondersteund door The Document Foundation.
Comment[nn]=Kontorpakka som brukar det opne og standardiserte dokumentformatet ODF. Støtta av The Document Foundation.
Comment[nr]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[nso]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[or]=କାର୍ଯ୍ୟାଳୟ ଉତ୍ପାଦନ ମୁକ୍ତ ଏବଂ ମାନକ ODF ଦଲିଲ ଶୈଳୀ ସହିତ ସୁସଂଗତ ମେଳଖାଇଥାଏ। ଏହା ଦଲିଲ ଅନୁଷ୍ଠାନ ଦ୍ୱାରା ସମର୍ଥିତ।
Comment[pa_IN]=ਆਫਿਸ ਪੈਕੇਜ, ਜੋ ਕਿ ਓਪਨ ਤੇ ਸਟੈਂਡਰਡ ODF ਦਸਤਾਵੇਜ਼ ਫਾਰਮੈਟ ਲਈ ਅਨੁਕੂਲ ਹੈ। ਇਹ ਡੌਕੂਮੈਂਟ ਫਾਊਂਡੇਸ਼ਨ ਵਲੋਂ ਸਹਾਇਤਾ ਪ੍ਰਾਪਤ ਹੈ।
Comment[pl]=Wydajny pakiet biurowy, zgodny z otwartym i znormalizowanym formatem ODF. Rozwijany przez The Document Foundation.
Comment[pt]=O conjunto de aplicações de escritório, compatíveis com o formato de documentos padrão ODF. Suportado pela The Document Foundation.
Comment[pt_BR]=A suite de produtividade de escritório compatível com o formato aberto e padronizado ODF. Com o apoio da The Document Foundation.
Comment[ro]=Suita de productivitate pentru birou compatibilă cu formatul deschis și standardizat ODF. Sprijinită de The Document Foundation.
Comment[ru]=Офисный пакет совместим с открытым и стандартизованным форматом документов ODF. Поддерживается The Document Foundation.
Comment[si]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[sk]=Kancelársky balík kompatibilný s otvoreným a štandardizovaným formátom ODF. Podporovaný nadáciou The Document Foundation.
Comment[sl]=Pisarniški paket, združljiv z odprto in standardizirano vrsto datotek dokumentov ODF. Projekt je podprla The Document Foundation.
Comment[sr]=Канцеларијски пакет сагласан са стандардизованим отвореним документ-форматом. Подржан од стране „Документ фондације“.
Comment[sr_Latn]=Kancelarijski paket saglasan sa standardizovanim otvorenim dokument-formatom. Podržan od strane „Dokument fondacije“.
Comment[ss]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[st]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[sv]=Kontorssviten som är kompatibel med det öppna och standardiserade filformatet ODF. Ges ut av The Document Foundation.
Comment[ta]=இந்த அலுவலக உற்பத்தித்திறன் தொகுப்பு, திறந்த மற்றும் செந்தர ODF ஆவண வடிவூட்டத்துடன் ஒத்திசைகிறது. தெ டாகுமெண்ட் பவுண்டேசனால் தரிக்கப்படுகிறது.
Comment[te]=కార్యాలయ ఉత్పాదక ఉపకరణాల సమదాయం అరక్షిత మరియు ప్రామాణీకరించబడిన ODF పత్ర తీరుతో సరిపోలినది. ద డాక్యుమెంట్ ఫౌండేషన్ మద్దతు కలిగినది
Comment[th]=ชุดโปรแกรมผลิตภาพสำนักงารนที่เข้ากันได้กับรูปแบบเอกสาร ODF ที่เปิดกว้งาและเป็นมาตรฐาน สนับสนุนโดย The Document Foundation.
Comment[tn]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[tr]=Ofis üretkenlik takımıık ve standartlaşmış ODF belge biçemi ile uyumludur. The Document Foundation tarafından desteklenmektedir.
Comment[ts]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[uk]=Офісний пакет сумісний з відкритим і стандартизованим форматом документів ODF. Підтримується The Document Foundation.
Comment[ve]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[xh]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
Comment[zh_CN]=办公生产套件与开放、标准化的 ODF 文档格式兼容。由 The Document Foundation 提供支持。
Comment[zh_TW]=本辦公生產力套裝軟體和開放且標準化的 ODF 文件格式相容,由文件基金會提供支援。
Comment[zu]=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
StartupNotify=true
X-GIO-NoFuse=true
StartupWMClass=libreoffice-startcenter
X-KDE-Protocols=file,http,ftp,webdav,webdavs
##Define Actions
Actions=Writer;Calc;Impress;Draw;Base;Math;
X-Desktop-File-Install-Version=0.26
[Desktop Action Writer]
Name=Writer
Exec=libreoffice --writer
[Desktop Action Calc]
Name=Calc
Exec=libreoffice --calc
[Desktop Action Impress]
Name=Impress
Exec=libreoffice --impress
[Desktop Action Draw]
Name=Draw
Exec=libreoffice --draw
[Desktop Action Base]
Name=Base
Exec=libreoffice --base
[Desktop Action Math]
Name=Math
Exec=libreoffice --math
##End of actions menu

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmcuNn8ACgkQ9DSh76/u
rqNdvQ//We5N9WJPuszsSv3nyeJdFiemdeLMdF3sRp3fG6hoQY1Qd4FW5ZS54WlN
Svge8fl0HNKmiyAx5JC/bdTdLGk3Et99D1mJNg/54mbNjDRWc0zy+Y5+bcFQc8vJ
XOM+LXrurbgw6kbi6+5g6fYfDE2y8TtMgC4+hcjW2Btixe6LAeIvbsMEpxPdke32
p6Wt/XWKrB2gzYH7dB0wMCwjOFVC+Lya49PwGRMUkPxXoS8+Pl656abgiC5uZSzR
Txsd0+dHq2lHtxChAD5zcBNVp1Fqmcy05KDFiLxtjMYrU+awc3YiT6/s6noYZ6vp
W6aontnLF4DoGBSIn0LbznNeAf1tjhrR3Okz78aeJ0Xb7Fb56WLkrpgerX/7RpIY
9g+/dcEihylbsdcchAxlmVk9Xnqraqr+7CHeCBfvQYF9JIalkhH+DPzR+AwSNH9B
kR5xvQF7T6xTldOGUpnSEjjownbzfTlUga0U5T9xAObD9oJuP+Hu3+YXTXe2ziVH
RNogSLhB2W7x5ao7hBeeXn6Z5IDZH4zmVqAAG1fF5z04GC8UddHf59drkIrybnlp
RZNVX2Q+ixve9xwXf8QniLK8MQ9jVb2zVWHartIxA8CyVcDaZVULhD0VMGqgTYzi
jK318KIM3RU/aGM6e+di1sytJjgZhu8Hx5h2oZM9vunoFn8AYJc=
=hKX0
-----END PGP SIGNATURE-----

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmGqk3EACgkQ9DSh76/u
rqPU8g/8DwKupld+tKgdYYTjrbxn0eKRU8Rj9J94Z6MTr/hgxC+lewywg/ks+D0J
YFn2Stc95Z52bm9k7dg/sGqJYYXTACiAnvtTWe6jnk9Ze4k/4iMbIoTivnI5C2dU
M96crGxkFbpEJAEOaMTClckt3cJ0Cfm3s+IHZS6ydjjOnYDv8PaRcOZbbRnzQtuh
8/vit3Xlp3RN2dxCilgv3JnL4woTCKnWIuL/nBHk606DcFlHYBLsgAQdA/Nbt0hs
KG2S3PiAgB2hfuoduNV33IfEkCn/nzA1GxGhkv6WLYh/PuCxG0KULsNndrTOD2gU
Vxyiun+eMk9X/Rh6Pqd7Vn75bttsHEiorScejXRkcZcaM+vyKapHgf2N+ynXDU4k
amzhaimwroTwt1jFX046NsuFIUY8Ck4xlbWkPv34u/EgZRaKHAX0PhNCZJigTsTM
vagEyHYvo+WLDk+IxNRVBx5ceTbB8PzNXQc+cyvnoy/RuswqsjaijSrbautiyM2m
jStUAiOxBKanye8IztJuCSUPNczfi85bZ2PDxuAxytAgfwKpiEvMCJR4lpoOpeW4
EXuFWzNnpH6j28aro2fQQhZcp4XSxQuxkrjJ5+gtsIxyiCSizVfPzrAYNGAtwrHI
f9q+sKdmywywUZ6W2LXYL8f3excZddjum9aVm2cmpezy1mXLX/k=
=a6IV
-----END PGP SIGNATURE-----

@ -1,257 +0,0 @@
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
[Desktop Entry]
Version=1.0
Terminal=false
Icon=libreoffice-writer
Type=Application
Categories=Office;WordProcessor;X-Red-Hat-Base;X-MandrivaLinux-Office-Wordprocessors;
Exec=libreoffice --writer %U
MimeType=application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/msword;application/vnd.ms-word;application/x-doc;application/x-hwp;application/rtf;text/rtf;application/vnd.wordperfect;application/wordperfect;application/vnd.lotus-wordpro;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroEnabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroEnabled.12;application/vnd.ms-works;application/vnd.stardivision.writer-global;application/x-extension-txt;application/x-t602;text/plain;application/vnd.oasis.opendocument.text-flat-xml;application/x-fictionbook+xml;application/macwriteii;application/x-aportisdoc;application/prs.plucker;application/vnd.palm;application/clarisworks;application/x-sony-bbeb;application/x-abiword;application/x-iwork-pages-sffpages;application/x-mswrite;application/x-starwriter;
Name=LibreOffice Writer
Name[ru]=Редактор документов LibreOffice Writer
GenericName=Word Processor
GenericName[af]=Woordverwerker
GenericName[ar]=معالج المستندات
GenericName[as]=Word প্ৰচেছৰ
GenericName[bg]=Текстообработка
GenericName[bn]=ওয়ার্ড প্রসেসর
GenericName[br]=Kewerier testenn
GenericName[ca]=Processador de textos
GenericName[cs]=Textový procesor
GenericName[cy]=Prosesydd Geiriau
GenericName[da]=Tekstbehandling
GenericName[de]=Textverarbeitung
GenericName[dz]=Word Processor
GenericName[el]=Επεξεργαστής Word
GenericName[en]=Word Processor
GenericName[eo]=Vortprocesilo
GenericName[es]=Procesador de texto
GenericName[et]=Tekstitöötlus
GenericName[eu]=Testu prozesatzailea
GenericName[fa]=واژه‌پرداز
GenericName[fi]=Tekstinkäsittely
GenericName[fr]=Traitement de texte
GenericName[fy]=Tekst ferwurker
GenericName[ga]=Próiseálaí Focal
GenericName[gl]=Procesador de textos
GenericName[gu]=વર્ડ પ્રોસેસર
GenericName[he]=מעבד תמלילים
GenericName[hi]=वर्ड प्रोसेसर
GenericName[hr]=Program za obradu teksta
GenericName[hu]=Szövegszerkesztő
GenericName[id]=Pengolah Kata
GenericName[it]=Elaboratore di testo
GenericName[ja]=ワードプロセッサ
GenericName[kk]=Мәтіндік процессор
GenericName[kn]=ವರ್ಡ್ ಪ್ರೊಸೆಸರ್
GenericName[ko]=워드 프로세서
GenericName[lt]=Tekstų rengyklė
GenericName[lv]=Tekstapstrādes programma
GenericName[mai]=Word Processor
GenericName[ml]=വേര്‍ഡ് പ്രൊസസ്സര്‍
GenericName[mr]=वर्ड प्रोसेसर
GenericName[nb]=Skriveprogram
GenericName[nl]=Tekstverwerker
GenericName[nn]=Teksthandsamar
GenericName[nr]=Word Processor
GenericName[nso]=Sebopi sa mantšu
GenericName[or]=ଶବ୍ଦ ସଞ୍ଚାଳକ
GenericName[pa_IN]=ਵਰਡ ਪਰੋਸੈਸਰ
GenericName[pl]=Procesor tekstu
GenericName[pt]=Processador de texto
GenericName[pt_BR]=Editor de texto
GenericName[ro]=Procesor de text
GenericName[ru]=Текстовый процессор
GenericName[si]=ලිපි සකසනය
GenericName[sk]=Textový procesor
GenericName[sl]=Urejevalnik besedila
GenericName[sr]=Уређивач текста
GenericName[sr_Latn]=Uređivač teksta
GenericName[ss]=Word Processor
GenericName[st]=Word Processor
GenericName[sv]=Ordbehandlare
GenericName[ta]=சொற்செயலி
GenericName[te]=వర్డ్ ప్రాసెసర్
GenericName[th]=โปรแกรมประมวลผลคำ
GenericName[tn]=Word Processor
GenericName[tr]=Kelime İşlemci
GenericName[ts]=Word Processor
GenericName[uk]=Текстовий процесор
GenericName[ve]=Word Processor
GenericName[xh]=Word Processor
GenericName[zh_CN]=文字处理软件
GenericName[zh_TW]=文書處理器
GenericName[zu]=Word Processor
Comment=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
Comment[af]=Skep en redigeer teks en beelde in briewe, verslae, dokumente en webbladsye met Writer.
Comment[ar]=أنشئ النصوص والصور وحررها في الرسائل، والتقارير، والمستندات وصفحات الوِب باستخدام رايتر.
Comment[as]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[bg]=С Writer можете да създавате и редактирате текст и изображения в писма, отчети, документи и уебстраници.
Comment[bn]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[br]=Krouiñ hag embann testennoù ha skeudennoù evit lizhiri, danevelloù, teulioù ha pajennoù Web en ur ober gant Writer.
Comment[ca]=Creeu i editeu textos i imatges en cartes, informes, documents i pàgines web amb el Writer.
Comment[cs]=Writer umožňuje vytvářet a upravovat text a grafiku v dopisech, sestavách, dokumentech a webových stránkách.
Comment[cy]=Creu a golygu testun a graffigau mewn llythyron, adroddiadau, dogfennau a thudalennau Gwe gyda Writer.
Comment[da]=Opret og rediger tekst og billeder i breve, rapporter, dokumenter og websider med Writer.
Comment[de]=Erstellen und Bearbeiten von Text und Bildern in Briefen, Berichten, Dokumenten und Webseiten Writer macht's möglich.
Comment[dz]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[el]=Δημιουργία και επεξεργασία κειμένου και εικόνων σε επιστολές, αναφορές, έγγραφα και ιστοσελίδες με τη χρήση του Writer.
Comment[en]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[eo]=Krei kaj redakti tekston kaj grafikaĵojn en leteroj, raportoj, dokumentoj kaj TTT-paĝoj per Verkilo.
Comment[es]=Cree y edite texto e imágenes en cartas, informes, documentos y páginas Web con Writer.
Comment[et]=Writer võimaldab luua ja redigeerida kirjade, aruannete, dokumentide ning veebilehtede teksti ja pilte.
Comment[eu]=Sortu eta editatu testua eta irudiak gutunetan, txostenetan, dokumentuetan eta web orrietan Writer erabiliz.
Comment[fa]=با استفاده از کاتب، متن و گرافیک نامه‌ها، گزارش‌ها، نوشتارها و صفحات وب را ایجاد یا ویرایش کنید.
Comment[fi]=Luo ja muokkaa tekstiä ja kuvia kirjeisiin, raportteihin, tekstiasiakirjoihin ja internet-sivuihin Writer-ohjelmalla.
Comment[fr]=Writer - Création et édition de textes et d'images pour courriers, rapports, documents et pages Web.
Comment[fy]=Meitsje en bewurkje tekst en ôfbyldingen yn brieven, rapporten, dokuminten en websiden, mei help fan Writer.
Comment[ga]=Cruthaigh téacs agus grafaicí i litreacha, tuairiscí, cáipéisí, agus leathanaigh Ghréasáin le Writer.
Comment[gl]=Cree e edite texto ou imaxes en cartas, informes, documentos e páxinas web usando Writer.
Comment[gu]=લખાણ દ્દારા પત્રો, અહેવાલો, દસ્તાવેજો અને વેબ પાનાઓમાં લખાણ અને ચિત્રો બનાવો અને સુઘારો.
Comment[he]=יצירה ועריכה של טקסט וגרפיקה במכתבים, דוחות, מסמכים ודפי אינטרנט באמצעות Writer.
Comment[hi]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[hr]=Stvorite i uredite tekst i slike u pismima, izvještajima, dokumentima i internetskim stranicama koristeći Writer.
Comment[hu]=Levelek, jelentések, dokumentumok és weboldalak szövegének és képeinek létrehozása és szerkesztése a Writer használatával.
Comment[id]=Membuat dan menyunting teks dan gambar pada surat, laporan, dokumen, dan halaman Web menggunakan Writer.
Comment[it]=Usando Writer puoi creare e modificare il testo e le immagini di lettere, rapporti, documenti e pagine web.
Comment[ja]=Writer を使用して、レター、レポート、ドキュメントおよび Web ページのテキストおよびイメージを作成および編集します。
Comment[kk]=Writer көмегімен хаттарда, құжаттарда, есептемелерде және веб-парақтарда мәтінді және суреттерді жасау және түзетуге болады.
Comment[kn]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[ko]=라이터를 사용하여 편지, 보고서, 문서 및 웹 페이지에서 텍스트와 그림을 만들고 편집할 수 있습니다.
Comment[lt]=Tekstų rengykle galima kurti laiškus, ataskaitas, kitus dokumentus ir tinklalapius, įterpti į juos paveikslus.
Comment[lv]=Veidot un rediģēt tekstu un attēlus vēstulēs, atskaitēs, dokumentos un tīmekļa lapās, lietojot Writer.
Comment[mai]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[ml]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[mr]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[nb]=Opprett og rediger tekst og bilder i brev, rapporter, dokumenter og nettsider ved å bruke Writer.
Comment[nl]=Met Writer kunt u tekst en afbeeldingen in brieven, rapporten, documenten en webpagina's maken en bewerken.
Comment[nn]=Laga og redigera tekst og bilete i brev, rapportar, dokument og nettsider i Writer.
Comment[nr]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[nso]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[or]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[pa_IN]=ਰਾਇਟਰ ਦੀ ਵਰਤੋਂ ਦੁਆਰਾ ਪੱਤਰਾਂ, ਰਿਪੋਰਟਾਂ, ਦਸਤਾਵੇਜ਼ਾਂ ਅਤੇ ਵੈੱਬ ਸਫ਼ਿਆਂ ਵਿੱਚ ਟੈਕਸਟ ਅਤੇ ਚਿੱਤਰ ਬਣਾਏ ਅਤੇ ਸੋਧੇ ਜਾ ਸਕਦੇ ਹਨ।
Comment[pl]=Twórz i edytuj tekst oraz obrazy w listach, raportach, dokumentach i stronach internetowych za pomocą programu Writer.
Comment[pt]=Criar e editar texto e imagens em cartas, relatórios, documentos e páginas Web com o Writer.
Comment[pt_BR]=Crie e edite textos e figuras em cartas, relatórios, documentos e páginas da Web por meio do Writer.
Comment[ro]=Creați și editați textele și grafica din documente, scrisori, rapoarte și pagini web folosind Writer.
Comment[ru]=Создание и редактирование текста и изображений в письмах, отчётах, документах или веб-страницах при помощи Writer.
Comment[si]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[sk]=Writer umožňuje vytvárať a upravovať text a grafiku v správach, dokumentoch a webových stránkach.
Comment[sl]=S programom Writer ustvarjajte in urejajte besedilo in slike v pismih, poročilih, dokumentih in spletnih straneh.
Comment[sr]=Пишите и уређујте текст и графику у писмима, извештајима и веб страницама помоћу програма Писац.
Comment[sr_Latn]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[ss]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[st]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[sv]=Skapa och redigera text och grafik i brev, rapporter, dokument och webbsidor med hjälp av Writer.
Comment[ta]=கடிதங்கள், அறிக்கைகள், ஆவணங்கள், வலைப்பக்கங்கள் ஆகியவற்றின் உரை, பிம்பங்களை உருவாக்கவும் தொகுக்கவும் ரைட்டரைப் பயன்படுத்துக.
Comment[te]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[th]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[tn]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[tr]=Writer kullanarak mektuplardaki metin ve grafikleri, rapor, belge ve Web sayfaları oluşturun ve düzenleyin.
Comment[ts]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[uk]=Створюйте та редагуйте текст та графіку у листах, звітах, документах та веб-сторінках за допомогою Writer.
Comment[ve]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[xh]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
Comment[zh_CN]=使用 Writer 对信函、报告、文档以及网页中的文字和图像进行编辑。
Comment[zh_TW]=使用 Writer 可以製作與編輯書信、報告、文件和網頁中的文字和影像。
Comment[zu]=Create and edit text and images in letters, reports, documents and Web pages by using Writer.
StartupNotify=true
X-GIO-NoFuse=true
Keywords=Text;Letter;Fax;Document;OpenDocument Text;Microsoft Word;Microsoft Works;Lotus WordPro;OpenOffice Writer;CV;odt;doc;docx;rtf;
InitialPreference=5
StartupWMClass=libreoffice-writer
X-KDE-Protocols=file,http,ftp,webdav,webdavs
Actions=NewDocument;
[Desktop Action NewDocument]
Name=New Document
Name[af]=Nuwe dokument
Name[ar]=مستند جديد
Name[as]=নতুন দস্তাবেজ
Name[bg]=Нов документ
Name[bn]=নতুন নথি
Name[br]=Teul nevez
Name[ca]=Document nou
Name[cs]=Nový dokument
Name[cy]=Dogfen Newydd
Name[da]=Nyt dokument
Name[de]=Neues Dokument
Name[dz]=ཡིག་ཆ་གསརཔ།
Name[el]=Νέο έγγραφο
Name[en]=New Document
Name[eo]=Nova dokumento
Name[es]=Documento nuevo
Name[et]=Uus dokument
Name[eu]=Dokumentu berria
Name[fa]=پرونده جدید
Name[fi]=Uusi asiakirja
Name[fr]=Nouveau document
Name[fy]=Nij dokumint
Name[ga]=Cáipéis Nua
Name[gl]=Novo documento
Name[gu]=નવું દસ્તાવેજ
Name[he]=מסמך חדש
Name[hi]=नया दस्तावेज़
Name[hr]=Novi dokument
Name[hu]=Új dokumentum
Name[id]=Dokumen Baru
Name[it]=Nuovo documento
Name[ja]=新規の文書ドキュメント
Name[kk]=Құжатты жасау
Name[kn]=ಹೊಸ ದಸ್ತಾವೇಜು
Name[ko]=새 문서
Name[lt]=Naujas dokumentas
Name[lv]=Jauns dokuments
Name[mai]=नवीन दस्तावेज
Name[ml]=പുതിയ രേഖ
Name[mr]=नवीन दस्तऐवज
Name[nb]=Nytt dokument
Name[nl]=Nieuw document
Name[nn]=Nytt dokument
Name[nr]=Umtlolo Omutjha
Name[nso]=Tokumente e mpsha
Name[or]=ନୂଆ ଦଲିଲ
Name[pa_IN]=ਨਵਾ ਦਸਤਾਵੇਜ
Name[pl]=Nowy dokument
Name[pt]=Novo documento
Name[pt_BR]=Novo documento
Name[ro]=Document nou
Name[ru]=Создать документ
Name[si]=නව ලේඛනය (~N)
Name[sk]=Nový dokument
Name[sl]=Nov dokument
Name[sr]=Нови документ
Name[sr_Latn]=Novi dokument
Name[ss]=Idokhumenti lensha
Name[st]=New Document
Name[sv]=Nytt dokument
Name[ta]=புதிய ஆவணம்
Name[te]=కొత్త పత్రం
Name[th]=เอกสารใหม่
Name[tn]=New Document
Name[tr]=Yeni Belge
Name[ts]=Dokumente yintshwa
Name[uk]=~Створити документ
Name[ve]=Ḽiṅwalwa Ḽiswa
Name[xh]=Uxwebhu Olutsha
Name[zh_CN]=新建文档
Name[zh_TW]=新增文件
Name[zu]=Ushicilelo olusha
Icon=document-new
Exec=libreoffice --writer

@ -1,85 +0,0 @@
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Exec=libreoffice %U
MimeType=application/vnd.oasis.opendocument.text-flat-xml;application/vnd.oasis.opendocument.spreadsheet-flat-xml;application/vnd.oasis.opendocument.graphics-flat-xml;application/vnd.oasis.opendocument.presentation-flat-xml;
Name=LibreOffice XSLT based filters
Name[ru]=Редактор фильтров LibreOffice XSLT
GenericName=XSLT based filters
GenericName[af]=XSLT-gebaseerde filters
GenericName[ar]=مرشّحات تعتمد XSLT
GenericName[as]=XSLT ভিত্তিয় ফিল্টাৰসমূহ
GenericName[bg]=XSLT филтри
GenericName[bn]=XSLT based filters
GenericName[br]=Siloù diazezet war XSLT
GenericName[ca]=Filtres basats en XLST
GenericName[cs]=Filtry používající XSLT
GenericName[cy]=Hidlau yn seiliedig ar XSLT
GenericName[da]=XSLT baserede filtre
GenericName[de]=XSLT basierte Filter
GenericName[dz]=XSLT based filters
GenericName[el]=Φίλτρα με βάση XSLT
GenericName[en]=XSLT based filters
GenericName[eo]=XSLT-bazitaj filtriloj
GenericName[es]=Filtros basados en XSLT
GenericName[et]=XSLT-põhised filtrid
GenericName[eu]=XSLTn oinarritutako iragazkiak
GenericName[fa]=پالایه‌های مبتنی بر XSLT
GenericName[fi]=XSLT-pohjaiset suodattimet
GenericName[fr]=Filtres basés sur XSLT
GenericName[fy]=Filter basearre op XSLT
GenericName[ga]=Scagairí bunaithe ar XSLT
GenericName[gl]=Filtros baseados en XSLT
GenericName[gu]=XSLT આધારિત ફિલ્ટરો
GenericName[he]=מסננים מבוססי XSLT
GenericName[hi]=XSLT आधारित फिल्टर
GenericName[hr]=XSLT temeljeni filtri
GenericName[hu]=XSLT-alapú szűrők
GenericName[id]=Penyaring berbasis XSLT
GenericName[it]=Filtri basati su XSLT
GenericName[ja]=XSLT ベースのフィルター
GenericName[kk]=XSLT сүзгілері
GenericName[kn]=XSLT ಆಧರಿತ ಫಿಲ್ಟರುಗಳು
GenericName[ko]=XSLT 기반 필터
GenericName[lt]=XSLT filtrai
GenericName[lv]=Uz XSLT balstīts filtrs
GenericName[mai]=XSLT based filters
GenericName[ml]=എക്സ്എസ്എല്‍റ്റി അടിസ്ഥാനത്തിലുള്ള ഫില്‍റ്ററുകള്‍
GenericName[mr]=XSLT आधारित फिल्टरस्
GenericName[nb]=XSLT-baserte filtre
GenericName[nl]=Filters gebaseerd op XSLT
GenericName[nn]=XSLT-baserte filter
GenericName[nr]=XSLT based filters
GenericName[nso]=XSLT based filters
GenericName[or]=XSLT ଆଧାରିତ ଛାଣକଗୁଡ଼ିକ
GenericName[pa_IN]=XSLT ਅਧਾਰਿਤ ਫਿਲਟਰ
GenericName[pl]=Fltry bazujące na XSLT
GenericName[pt]=Filtros baseados em XSLT
GenericName[pt_BR]=Filtros baseados em XSLT
GenericName[ro]=Filtru bazat pe XSLT
GenericName[ru]=Фильтры XSLT
GenericName[si]=XSLT based filters
GenericName[sk]=Filtre používajúce XSLT
GenericName[sl]=Filtri na osnovi XSLT
GenericName[sr]=Филтери засновани на XSLT
GenericName[sr_Latn]=Filteri zasnovani na XSLT
GenericName[ss]=XSLT based filters
GenericName[st]=XSLT based filters
GenericName[sv]=XSLT-baserade filter
GenericName[ta]=XSLT அடிப்படையிலான வடிகட்டிகள்
GenericName[te]=XSLT ఆధారిత ఫిల్టర్స్
GenericName[th]=ตัวกรองอิง XSLT
GenericName[tn]=XSLT based filters
GenericName[tr]=XSLT tabanlı süzgeçler
GenericName[ts]=XSLT based filters
GenericName[uk]=Фільтри XSLT
GenericName[ve]=XSLT based filters
GenericName[xh]=XSLT based filters
GenericName[zh_CN]=基于 XSLT 的过滤器
GenericName[zh_TW]=基於 XSLT 的過濾器
GenericName[zu]=XSLT based filters
NoDisplay=true
StartupNotify=true
X-GIO-NoFuse=true
X-KDE-Protocols=file,http,ftp,webdav,webdavs

@ -1,19 +0,0 @@
diff -up libreoffice-7.6.0.3/testtools/source/bridgetest/bridgetest.cxx.orig libreoffice-7.6.0.3/testtools/source/bridgetest/bridgetest.cxx
--- libreoffice-7.6.0.3/testtools/source/bridgetest/bridgetest.cxx.orig 2023-08-21 13:15:31.738062821 +0200
+++ libreoffice-7.6.0.3/testtools/source/bridgetest/bridgetest.cxx 2023-08-21 13:15:56.607246816 +0200
@@ -469,6 +469,7 @@ static bool performTest(
equals(aData, aSV2ret) && equals(aData, aRet2),
"getValues2 test");
}
+#if 0
{
TwoFloats aIn(1.1f, 2.2f);
TwoFloats aOut = xLBT->echoTwoFloats(aIn);
@@ -479,6 +480,7 @@ static bool performTest(
FourFloats aOut = xLBT->echoFourFloats(aIn);
bRet = check( memcmp(&aIn, &aOut, sizeof(FourFloats)) == 0, "four floats struct test" ) && bRet;
}
+#endif
{
MixedFloatAndInteger aIn(7.7f, 8);
MixedFloatAndInteger aOut = xLBT->echoMixedFloatAndInteger(aIn);

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save