[Libreoffice-commits] core.git: 5 commits - sal/qa sc/inc sc/source starmath/source writerfilter/CppunitTest_writerfilter_dmapper.mk writerfilter/qa writerfilter/source xmlsecurity/source
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Tue Feb 9 09:28:28 UTC 2021
sal/qa/osl/file/osl_File.cxx | 5
sc/inc/editutil.hxx | 4
sc/source/core/tool/editutil.cxx | 75 +++++++---
sc/source/ui/view/gridwin4.cxx | 34 ++++
starmath/source/parse.cxx | 8 +
writerfilter/CppunitTest_writerfilter_dmapper.mk | 1
writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 23 +++
writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx |binary
writerfilter/source/dmapper/DomainMapper_Impl.cxx | 7
xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx | 4
10 files changed, 136 insertions(+), 25 deletions(-)
New commits:
commit 61404bca5af9072b99c69a605077f0f4f6b54661
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Feb 8 20:30:20 2021 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Feb 9 10:18:59 2021 +0100
report what value was found in message
Change-Id: I512cedcd46f829b97b62a57d90d5a4a81d024d66
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110562
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/sal/qa/osl/file/osl_File.cxx b/sal/qa/osl/file/osl_File.cxx
index 30ef0e322eeb..b0a550b9d136 100644
--- a/sal/qa/osl/file/osl_File.cxx
+++ b/sal/qa/osl/file/osl_File.cxx
@@ -253,7 +253,6 @@ static void createTestDirectory(const OUString& basename, const OUString& dirnam
static void deleteTestDirectory(const OUString& dirname)
{
OUString aPathURL = dirname.copy(0);
- osl::FileBase::RC nError;
if (!isURL(dirname))
osl::FileBase::getFileURLFromSystemPath(dirname, aPathURL); // convert if not full qualified URL
@@ -261,10 +260,10 @@ static void deleteTestDirectory(const OUString& dirname)
if (testDir.isOpen())
testDir.close(); // close if still open.
- nError = Directory::remove(aPathURL);
+ osl::FileBase::RC nError = Directory::remove(aPathURL);
OString strError = "In deleteTestDirectory function: remove Directory " +
- OUStringToOString(aPathURL, RTL_TEXTENCODING_ASCII_US);
+ OUStringToOString(aPathURL, RTL_TEXTENCODING_ASCII_US) + " -> result: " + OString::number(nError);
CPPUNIT_ASSERT_MESSAGE(strError.getStr(), (osl::FileBase::E_None == nError) || (nError == osl::FileBase::E_NOENT));
}
commit 439f386602299bfbe05efee3a00cc7614d6ecdef
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Feb 5 17:14:07 2021 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Feb 9 10:07:26 2021 +0100
ofz#30330 recursion too deep
Change-Id: Iaa3961cd6501f45c93bf02a42da7816d0b83097f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110489
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index 41a6d482cf8f..b4541fea8bb7 100644
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -1314,6 +1314,8 @@ std::unique_ptr<SmNode> SmParser::DoSum()
{
DepthProtect aDepthGuard(m_nParseDepth);
+ int nDepthLimit = m_nParseDepth;
+
auto xFirst = DoProduct();
while (TokenInGroup(TG::Sum))
{
@@ -1322,7 +1324,13 @@ std::unique_ptr<SmNode> SmParser::DoSum()
auto xThird = DoProduct();
xSNode->SetSubNodes(std::move(xFirst), std::move(xSecond), std::move(xThird));
xFirst = std::move(xSNode);
+
+ ++m_nParseDepth;
+ DepthProtect bDepthGuard(m_nParseDepth);
}
+
+ m_nParseDepth = nDepthLimit;
+
return xFirst;
}
commit d87fcadc242881c39d3c49c85b9d5ef83ec6dde4
Author: Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Tue Jan 19 14:46:48 2021 +0530
Commit: Dennis Francis <dennis.francis at collabora.com>
CommitDate: Tue Feb 9 09:55:34 2021 +0100
lok: Take indent and margins into account
... when painting tiles with edit-text content.
Conflicts:
sc/source/core/tool/editutil.cxx
Change-Id: I31199c18ed5aab005d56241046a9f7109691db99
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109755
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Tor Lillqvist <tml at collabora.com>
(cherry picked from commit bc025dac6ce3301f5798e8ada4fee07b415de76a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110619
Tested-by: Jenkins
Reviewed-by: Dennis Francis <dennis.francis at collabora.com>
diff --git a/sc/inc/editutil.hxx b/sc/inc/editutil.hxx
index d760faf5c53e..4efadface0f4 100644
--- a/sc/inc/editutil.hxx
+++ b/sc/inc/editutil.hxx
@@ -84,6 +84,10 @@ public:
const Fraction& rX, const Fraction& rY, bool bPrintTwips = false );
tools::Rectangle GetEditArea( const ScPatternAttr* pPattern, bool bForceToTop );
+ tools::Long GetIndent(const ScPatternAttr* pPattern) const;
+ void GetMargins(const ScPatternAttr* pPattern, tools::Long& nLeftMargin, tools::Long& nTopMargin,
+ tools::Long& nRightMargin, tools::Long& BottomMargin) const;
+
};
class ScEditAttrTester
diff --git a/sc/source/core/tool/editutil.cxx b/sc/source/core/tool/editutil.cxx
index 523c92e275d2..c567e36b7b55 100644
--- a/sc/source/core/tool/editutil.cxx
+++ b/sc/source/core/tool/editutil.cxx
@@ -278,6 +278,39 @@ OUString ScEditUtil::GetCellFieldValue(
return aRet;
}
+tools::Long ScEditUtil::GetIndent(const ScPatternAttr* pPattern) const
+{
+ if (!pPattern)
+ pPattern = pDoc->GetPattern( nCol, nRow, nTab );
+
+ if ( pPattern->GetItem(ATTR_HOR_JUSTIFY).GetValue() ==
+ SvxCellHorJustify::Left )
+ {
+ tools::Long nIndent = pPattern->GetItem(ATTR_INDENT).GetValue();
+ if (!bInPrintTwips)
+ nIndent = static_cast<tools::Long>(nIndent * nPPTX);
+ return nIndent;
+ }
+
+ return 0;
+}
+
+void ScEditUtil::GetMargins(const ScPatternAttr* pPattern, tools::Long& nLeftMargin, tools::Long& nTopMargin,
+ tools::Long& nRightMargin, tools::Long& nBottomMargin) const
+{
+ if (!pPattern)
+ pPattern = pDoc->GetPattern( nCol, nRow, nTab );
+
+ const SvxMarginItem* pMargin = &pPattern->GetItem(ATTR_MARGIN);
+ if (!pMargin)
+ return;
+
+ nLeftMargin = bInPrintTwips ? pMargin->GetLeftMargin() : static_cast<tools::Long>(pMargin->GetLeftMargin() * nPPTX);
+ nRightMargin = bInPrintTwips ? pMargin->GetRightMargin() : static_cast<tools::Long>(pMargin->GetRightMargin() * nPPTX);
+ nTopMargin = bInPrintTwips ? pMargin->GetTopMargin() : static_cast<tools::Long>(pMargin->GetTopMargin() * nPPTY);
+ nBottomMargin = bInPrintTwips ? pMargin->GetBottomMargin() : static_cast<tools::Long>(pMargin->GetBottomMargin() * nPPTY);
+}
+
tools::Rectangle ScEditUtil::GetEditArea( const ScPatternAttr* pPattern, bool bForceToTop )
{
// bForceToTop = always align to top, for editing
@@ -316,24 +349,36 @@ tools::Rectangle ScEditUtil::GetEditArea( const ScPatternAttr* pPattern, bool bF
nCellY += static_cast<tools::Long>(pDoc->GetScaledRowHeight( nRow+1, nRow+nCountY-1, nTab, nPPTY));
}
- const SvxMarginItem* pMargin = &pPattern->GetItem(ATTR_MARGIN);
- sal_uInt16 nIndent = 0;
- if ( pPattern->GetItem(ATTR_HOR_JUSTIFY).GetValue() ==
- SvxCellHorJustify::Left )
- nIndent = pPattern->GetItem(ATTR_INDENT).GetValue();
- tools::Long nDifX = pMargin->GetLeftMargin() + nIndent;
- if (!bInPrintTwips)
- nDifX = static_cast<tools::Long>( nDifX * nPPTX );
+ tools::Long nRightMargin = 0;
+ tools::Long nTopMargin = 0;
+ tools::Long nBottomMargin = 0;
+ tools::Long nDifX = 0;
+ {
+ tools::Long nLeftMargin = 0;
+ bool bInPrintTwipsOrig = bInPrintTwips;
+ bInPrintTwips = true;
+ tools::Long nIndent = GetIndent(pPattern);
+ GetMargins(pPattern, nLeftMargin, nTopMargin, nRightMargin, nBottomMargin);
+ bInPrintTwips = bInPrintTwipsOrig;
+ // Here rounding may be done only on the sum, ie nDifX,
+ // so need to get margin and indent in twips.
+ nDifX = nLeftMargin + nIndent;
+ if (!bInPrintTwips)
+ {
+ nDifX = static_cast<tools::Long>(nDifX * nPPTX);
+ nRightMargin = static_cast<tools::Long>(nRightMargin * nPPTX);
+ nTopMargin = static_cast<tools::Long>(nTopMargin * nPPTY);
+ nBottomMargin = static_cast<tools::Long>(nBottomMargin * nPPTY);
+ }
+ }
+
+
aStartPos.AdjustX(nDifX * nLayoutSign );
- nCellX -= nDifX + (bInPrintTwips ? pMargin->GetRightMargin() :
- static_cast<tools::Long>( pMargin->GetRightMargin() * nPPTX )); // due to line feed, etc.
+ nCellX -= nDifX + nRightMargin; // due to line feed, etc.
// align vertical position to the one in the table
tools::Long nDifY;
- tools::Long nTopMargin = pMargin->GetTopMargin();
- if (!bInPrintTwips)
- nTopMargin = static_cast<tools::Long>( nTopMargin * nPPTY );
SvxCellVerJustify eJust = pPattern->GetItem(ATTR_VER_JUSTIFY).GetValue();
// asian vertical is always edited top-aligned
@@ -357,9 +402,7 @@ tools::Rectangle ScEditUtil::GetEditArea( const ScPatternAttr* pPattern, bool bF
// font color doesn't matter here
pPattern->GetFont( aFont, SC_AUTOCOL_BLACK, pDev, &aZoomY );
pDev->SetFont(aFont);
- nTextHeight = pDev->GetTextHeight() + nTopMargin +
- (bInPrintTwips ? pMargin->GetBottomMargin() :
- static_cast<tools::Long>( pMargin->GetBottomMargin() * nPPTY ));
+ nTextHeight = pDev->GetTextHeight() + nTopMargin + nBottomMargin;
}
pDev->SetMapMode(aMode);
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index c5230e949fea..c95bc00f701a 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -274,6 +274,25 @@ static void lcl_DrawHighlight( ScOutputData& rOutputData, const ScViewData& rVie
}
}
+// Calculates top-left offset to be applied based on margins and indent.
+static void lcl_GetEditAreaTLOffset(tools::Long& nOffsetX, tools::Long& nOffsetY, const ScAddress& rAddr,
+ const ScViewData& rViewData, ScDocument& rDoc)
+{
+ tools::Long nLeftMargin = 0;
+ tools::Long nTopMargin = 0;
+ tools::Long nIndent = 0;
+ tools::Long nDummy = 0;
+ ScEditUtil aEUtil(&rDoc, rAddr.Col(), rAddr.Row(), rAddr.Tab(),
+ Point(0, 0), nullptr, rViewData.GetPPTX(),
+ rViewData.GetPPTY(), Fraction(1.0), Fraction(1.0),
+ false /* bPrintTwips */);
+ const ScPatternAttr* pPattern = rDoc.GetPattern(rAddr);
+ nIndent = aEUtil.GetIndent(pPattern);
+ aEUtil.GetMargins(pPattern, nLeftMargin, nTopMargin, nDummy, nDummy);
+ nOffsetX = nIndent + nLeftMargin;
+ nOffsetY = nTopMargin;
+}
+
void ScGridWindow::DoInvertRect( const tools::Rectangle& rPixel )
{
if ( rPixel == aInvertRect )
@@ -1051,8 +1070,11 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI
rDevice.DrawRect(rDevice.PixelToLogic(aBackground));
tools::Rectangle aEditRect(aBackground);
- aEditRect.AdjustLeft(1);
- aEditRect.AdjustTop(1);
+ tools::Long nOffsetX = 0, nOffsetY = 0;
+ // Get top-left offset because of margin and indent.
+ lcl_GetEditAreaTLOffset(nOffsetX, nOffsetY, ScAddress(nCol1, nRow1, nTab), mrViewData, rDoc);
+ aEditRect.AdjustLeft(nOffsetX + 1);
+ aEditRect.AdjustTop(nOffsetY + 1);
// EditView has an 'output area' which is used to clip the 'paint area' we provide below.
// So they need to be in the same coordinates/units. This is tied to the mapmode of the gridwin
@@ -1148,8 +1170,12 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI
if (bIsTiledRendering)
{
tools::Rectangle aEditRect(aBackground);
- aEditRect.AdjustLeft(1);
- aEditRect.AdjustTop(1);
+ tools::Long nOffsetX = 0, nOffsetY = 0;
+ // Get top-left offset because of margin and indent.
+ lcl_GetEditAreaTLOffset(nOffsetX, nOffsetY, ScAddress(nCol1, nRow1, mrViewData.GetTabNo()), mrViewData, rDoc);
+ aEditRect.AdjustLeft(nOffsetX + 1);
+ aEditRect.AdjustTop(nOffsetY + 1);
+
// EditView has an 'output area' which is used to clip the paint area we provide below.
// So they need to be in the same coordinates/units. This is tied to the mapmode of the gridwin
// attached to the EditView, so we have to change its mapmode too (temporarily). We save the
commit 3bc70b74befd2cad85e40c913467b60d0407fbfe
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Feb 8 17:05:28 2021 +0000
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Feb 9 09:02:47 2021 +0100
default to CertificateValidity::INVALID
so if CertGetCertificateChain fails we don't want validity to be
css::security::CertificateValidity::VALID which is what the old default
of 0 equates to
notably
commit 1e0bc66d16aee28ce8bd9582ea32178c63841902
Date: Thu Nov 5 16:55:26 2009 +0100
jl137: #103420# better logging
turned the nss equivalent of SecurityEnvironment_NssImpl::verifyCertificate
from 0 to CertificateValidity::INVALID like this change does
Change-Id: I5350dbc22d1b9b378da2976d3b0abd728f1f4c27
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110589
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt at allotropia.de>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
index 1540db695b54..c21158695d70 100644
--- a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
+++ b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
@@ -752,7 +752,7 @@ sal_Int32 SecurityEnvironment_MSCryptImpl::verifyCertificate(
const uno::Reference< css::security::XCertificate >& aCert,
const uno::Sequence< uno::Reference< css::security::XCertificate > >& seqCerts)
{
- sal_Int32 validity = 0;
+ sal_Int32 validity = css::security::CertificateValidity::INVALID;
PCCERT_CHAIN_CONTEXT pChainContext = nullptr;
PCCERT_CONTEXT pCertContext = nullptr;
@@ -896,7 +896,7 @@ sal_Int32 SecurityEnvironment_MSCryptImpl::verifyCertificate(
}
else
{
- SAL_INFO("xmlsecurity.xmlsec", "CertGetCertificateChaine failed.");
+ SAL_INFO("xmlsecurity.xmlsec", "CertGetCertificateChain failed.");
}
}
commit 3b928391b3398c1113e675ea6a542d05d9611e0a
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Feb 8 21:03:04 2021 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Feb 9 09:02:18 2021 +0100
tdf#134592 DOCX import: preserve formatting of CREATEDATE fields
The create date of a document doesn't really change, so we can only
loose if the cached result of the field is not preserved.
Change-Id: I0105d9c5bb9a06cacc1f5fed2a10b6626fa80fd7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110596
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/writerfilter/CppunitTest_writerfilter_dmapper.mk b/writerfilter/CppunitTest_writerfilter_dmapper.mk
index 7fe8b9035d3d..48b4ee87e087 100644
--- a/writerfilter/CppunitTest_writerfilter_dmapper.mk
+++ b/writerfilter/CppunitTest_writerfilter_dmapper.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_CppunitTest_use_libraries,writerfilter_dmapper, \
sal \
test \
unotest \
+ vcl \
))
$(eval $(call gb_CppunitTest_use_sdk_api,writerfilter_dmapper))
diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx
index 6cd688975bd1..ef4c8ed40fb0 100644
--- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx
@@ -19,6 +19,8 @@
#include <com/sun/star/text/XTextTablesSupplier.hpp>
#include <com/sun/star/text/XTextTable.hpp>
+#include <vcl/scheduler.hxx>
+
using namespace ::com::sun::star;
namespace
@@ -189,6 +191,27 @@ CPPUNIT_TEST_FIXTURE(Test, testFieldIfInsideIf)
// i.e. some of the inner fields escaped outside the outer field.
CPPUNIT_ASSERT_EQUAL(OUString("25"), xCell->getString());
}
+
+CPPUNIT_TEST_FIXTURE(Test, testCreateDatePreserve)
+{
+ OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "create-date-preserve.docx";
+ getComponent() = loadFromDesktop(aURL);
+ // Trigger idle layout.
+ Scheduler::ProcessEventsToIdle();
+ uno::Reference<text::XTextDocument> xTextDocument(getComponent(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(),
+ uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ uno::Reference<container::XEnumerationAccess> xPortionEnumAccess(xParaEnum->nextElement(),
+ uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xPortionEnum = xPortionEnumAccess->createEnumeration();
+ uno::Reference<text::XTextRange> xPortion(xPortionEnum->nextElement(), uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 7/7/2020 10:11:00 AM
+ // - Actual : 07/07/2020
+ // i.e. the formatting of the create date field was lost.
+ CPPUNIT_ASSERT_EQUAL(OUString("7/7/2020 10:11:00 AM"), xPortion->getString());
+}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx b/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx
new file mode 100644
index 000000000000..4a587ce0d2ef
Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx differ
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 05e82a975173..c3cbbcb2a2b9 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -6258,6 +6258,13 @@ void DomainMapper_Impl::SetFieldResult(OUString const& rResult)
xFieldProperties->setPropertyValue(
getPropertyName(bHasContent && sValue.isEmpty()? PROP_CONTENT : PROP_CURRENT_PRESENTATION),
uno::makeAny( rResult ));
+
+ if (xServiceInfo->supportsService(
+ "com.sun.star.text.TextField.DocInfo.CreateDateTime"))
+ {
+ // Creation time is const, don't try to update it.
+ xFieldProperties->setPropertyValue("IsFixed", uno::makeAny(true));
+ }
}
}
catch( const beans::UnknownPropertyException& )
More information about the Libreoffice-commits
mailing list