Compare commits
No commits in common. '24.8.3.2' and 'c9' have entirely different histories.
@ -1,7 +1,8 @@
|
||||
SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
|
||||
SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll
|
||||
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/libreoffice-translations-24.8.3.2.tar.xz
|
||||
SOURCES/libreoffice-24.8.3.2.tar.xz
|
||||
SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
|
||||
SOURCES/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
|
||||
SOURCES/libreoffice-7.1.8.1.tar.xz
|
||||
SOURCES/libreoffice-help-7.1.8.1.tar.xz
|
||||
SOURCES/libreoffice-translations-7.1.8.1.tar.xz
|
||||
|
@ -1,7 +1,8 @@
|
||||
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
|
||||
c8766c085e21cc92c47d7ef2371b8a4d3dc2933d SOURCES/libreoffice-translations-24.8.3.2.tar.xz
|
||||
d4a6c4a735210ddfd0b723e926a8b3352705662f SOURCES/libreoffice-24.8.3.2.tar.xz
|
||||
7168b0f40aa5c72267899601c116d2348d2f56ec SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
|
||||
7168b0f40aa5c72267899601c116d2348d2f56ec SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
|
||||
0619ed3a89644bef318df67db12045b2b590585b SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll
|
||||
2d49e11b0b711970f494294dc3698f05eb294853 SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
|
||||
083509db5ad9d1680830be9add727d58b54ca0d3 SOURCES/dtoa-20180411.tgz
|
||||
dd55efd721df8a013709e27836bdf26623e5320e SOURCES/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
|
||||
58642377b80001f41884b2fff3d74fe66426b182 SOURCES/libreoffice-7.1.8.1.tar.xz
|
||||
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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
||||
|
@ -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("com.sun.star.system.SystemShellExecute")
|
||||
- oShell.execute(sCommand, "" , com.sun.star.system.SystemShellExecuteFlags.DEFAULTS)
|
||||
+ oShell.execute(sCommand, "" , com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY)
|
||||
|
||||
End Sub ' _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("SystemShellExecute")
|
||||
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
|
||||
|
Binary file not shown.
@ -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
|
||||
|
||||
|
||||
|
Binary file not shown.
@ -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,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,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,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…
Reference in new issue