download.lst | 3 - external/libmwaw/0001-ofz-1037-resize-vector-correctly.patch.1 | 25 +++++++++ external/libmwaw/UnpackedTarball_libmwaw.mk | 1 sc/source/core/tool/interpr7.cxx | 6 ++ sc/source/ui/unoobj/funcuno.cxx | 2 sw/source/core/inc/rootfrm.hxx | 22 ++++++++ sw/source/core/layout/flylay.cxx | 2 sw/source/core/layout/frmtool.cxx | 2 sw/source/core/layout/trvlfrm.cxx | 26 +--------- 9 files changed, 64 insertions(+), 25 deletions(-)
New commits: commit 812ebb1a2f826af3ed597816198361fbbde79aa8 Author: Michael Stahl <mst...@redhat.com> Date: Fri Jun 9 18:03:40 2017 +0200 tdf#108118 sw: fix recursive layouting during SwCursorShell::Paint() The problem, in a nutshell, is that SwDrawContact::Changed() is called during layout, and recursively starts another layout that removes a drawing object that is being iterated over in frame #28 SwObjectFormatter::FormatObjsAtFrame_() from the layout. Apparently SwDrawContact::Changed() is by far the most dangerous function to call during layout; set the quite targeted flag SetCallbackActionEnabled() to prevent the recursion. 0 SwSortedObjs::Remove(SwAnchoredObject&) (this=0x73e4a00, _rAnchoredObj=...) at sw/source/core/layout/sortedobjs.cxx:228 1 SwFrame::RemoveDrawObj(SwAnchoredObject&) (this=0x9430e20, _rToRemoveObj=...) at sw/source/core/layout/fly.cxx:2076 2 SwDrawVirtObj::RemoveFromWriterLayout() (this=0x95ce130) at sw/source/core/draw/dcontact.cxx:2199 3 SwDrawContact::DisconnectObjFromLayout(SdrObject*) (this=0x70fef00, _pDrawObj=0x95ce130) at sw/source/core/draw/dcontact.cxx:1663 4 SwLayoutFrame::DestroyImpl() (this=0x91c6c60) at sw/source/core/layout/ssfrm.cxx:489 5 SwFrame::DestroyFrame(SwFrame*) (pFrame=0x91c6c60) at sw/source/core/layout/ssfrm.cxx:389 6 SwLayoutFrame::DestroyImpl() (this=0x9435cd0) at sw/source/core/layout/ssfrm.cxx:500 7 SwPageFrame::DestroyImpl() (this=0x9435cd0) at sw/source/core/layout/pagechg.cxx:270 8 SwFrame::DestroyFrame(SwFrame*) (pFrame=0x9435cd0) at sw/source/core/layout/ssfrm.cxx:389 9 SwRootFrame::RemovePage(SwPageFrame**, SwRemoveResult) (this=0x36b26f0, pDelRef=0x7ffeafbf2e38, eResult=SwRemoveResult::Prev) at sw/source/core/layout/pagechg.cxx:1351 10 SwRootFrame::RemoveSuperfluous() (this=0x36b26f0) at sw/source/core/layout/pagechg.cxx:1426 11 SwLayAction::InternalAction(OutputDevice*) (this=0x7ffeafbf3250, pRenderContext=0x3595030) at sw/source/core/layout/layact.cxx:502 12 SwLayAction::Action(OutputDevice*) (this=0x7ffeafbf3250, pRenderContext=0x3595030) at sw/source/core/layout/layact.cxx:351 13 SwViewShell::ImplEndAction(bool) (this=0x364cc00, bIdleEnd=false) at sw/source/core/view/viewsh.cxx:279 14 SwViewShell::EndAction(bool) (this=0x364cc00, bIdleEnd=false) at sw/inc/viewsh.hxx:605 15 SwCursorShell::EndAction(bool, bool) (this=0x364cc00, bIdleEnd=false, DoSetPosX=false) at sw/source/core/crsr/crsrsh.cxx:259 16 SwRootFrame::EndAllAction(bool) (this=0x36b26f0, bVirDev=false) at sw/source/core/layout/pagechg.cxx:1728 17 SwDrawContact::Changed(SdrObject const&, SdrUserCallType, tools::Rectangle const&) (this=0x70fef00, rObj=..., eType=SdrUserCallType::MoveOnly, rOldBoundRect=...) at sw/source/core/draw/dcontact.cxx:985 18 SdrObject::SendUserCall(SdrUserCallType, tools::Rectangle const&) const (this=0x95ce130, eUserCall=SdrUserCallType::MoveOnly, rBoundRect=...) at svx/source/svdraw/svdobj.cxx:2736 19 SdrObject::Move(Size const&) (this=0x95ce130, rSiz=Size = {...}) at svx/source/svdraw/svdobj.cxx:1482 20 SwDrawVirtObj::Move(Size const&) (this=0x95ce130, rSiz=Size = {...}) at sw/source/core/draw/dcontact.cxx:2366 21 SwAnchoredDrawObject::SetObjTop_(long) (this=0x95ce250, _nTop=777490) at sw/source/core/layout/anchoreddrawobject.cxx:677 22 SwAnchoredObject::SetObjTop(long) (this=0x95ce250, _nTop=777490) at sw/source/core/layout/anchoredobject.cxx:593 23 objectpositioning::SwToContentAnchoredObjectPosition::CalcPosition() (this=0x7ffeafbf3980) at sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx:739 24 SwAnchoredDrawObject::MakeObjPosAnchoredAtPara() (this=0x95ce250) at sw/source/core/layout/anchoreddrawobject.cxx:421 25 SwAnchoredDrawObject::MakeObjPos() (this=0x95ce250) at sw/source/core/layout/anchoreddrawobject.cxx:318 26 SwObjectFormatter::FormatObj_(SwAnchoredObject&) (this=0x90623d0, _rAnchoredObj=...) at sw/source/core/layout/objectformatter.cxx:374 27 SwObjectFormatterTextFrame::DoFormatObj(SwAnchoredObject&, bool) (this=0x90623d0, _rAnchoredObj=..., _bCheckForMovedFwd=false) at sw/source/core/layout/objectformattertxtfrm.cxx:126 28 SwObjectFormatter::FormatObjsAtFrame_(SwTextFrame*) (this=0x90623d0, _pMasterTextFrame=0x0) at sw/source/core/layout/objectformatter.cxx:443 29 SwObjectFormatterTextFrame::DoFormatObjs() (this=0x90623d0) at sw/source/core/layout/objectformattertxtfrm.cxx:328 30 SwObjectFormatter::FormatObjsAtFrame(SwFrame&, SwPageFrame const&, SwLayAction*) (_rAnchorFrame=..., _rPageFrame=..., _pLayAction=0x0) at sw/source/core/layout/objectformatter.cxx:191 31 SwHeadFootFrame::FormatSize(long, SwBorderAttrs const*) (this=0x91c6c60, nUL=663, pAttrs=0x8fbc530) at sw/source/core/layout/hffrm.cxx:263 32 SwHeadFootFrame::Format(OutputDevice*, SwBorderAttrs const*) (this=0x91c6c60, pRenderContext=0x3595030, pAttrs=0x8fbc530) at sw/source/core/layout/hffrm.cxx:416 33 SwLayoutFrame::MakeAll(OutputDevice*) (this=0x91c6c60) at sw/source/core/layout/calcmove.cxx:913 34 SwFrame::PrepareMake(OutputDevice*) (this=0x91c6c60, pRenderContext=0x3595030) at sw/source/core/layout/calcmove.cxx:346 35 SwFrame::Calc(OutputDevice*) const (this=0x91c6c60, pRenderContext=0x3595030) at sw/source/core/layout/trvlfrm.cxx:1783 36 lcl_FormatLay(SwLayoutFrame*) (pLay=0x91c6c60) at sw/source/core/layout/pagechg.cxx:360 37 lcl_FormatLay(SwLayoutFrame*) (pLay=0x9435cd0) at sw/source/core/layout/pagechg.cxx:357 38 SwPageFrame::PreparePage(bool) (this=0x9435cd0, bFootnote=false) at sw/source/core/layout/pagechg.cxx:456 39 (anonymous namespace)::doInsertPage(SwRootFrame*, SwPageFrame**, SwFrameFormat*, SwPageDesc*, bool, SwPageFrame**) (pRoot=0x36b26f0, pRefSibling=0x7ffeafbf43c8, pFormat=0x3076050, pDesc=0x3076010, bFootnote=false, pRefPage=0x7ffeafbf43d8) at sw/source/core/layout/pagechg.cxx:1210 40 SwFrame::InsertPage(SwPageFrame*, bool) (this=0x3620d70, pPrevPage=0x9227900, bFootnote=false) at sw/source/core/layout/pagechg.cxx:1269 41 SwFrame::GetNextLeaf(MakePageType) (this=0x3620d70, eMakePage=MAKEPAGE_INSERT) at sw/source/core/layout/flowfrm.cxx:994 42 SwFrame::GetLeaf(MakePageType, bool) (this=0x3620d70, eMakePage=MAKEPAGE_INSERT, bFwd=true) at sw/source/core/layout/flowfrm.cxx:797 43 SwFlowFrame::MoveFwd(bool, bool, bool) (this=0x3620e18, bMakePage=true, bPageBreak=false, bMoveAlways=false) at sw/source/core/layout/flowfrm.cxx:1851 44 SwContentFrame::MakeAll(OutputDevice*) (this=0x3620d70) at sw/source/core/layout/calcmove.cxx:1681 45 SwFrame::PrepareMake(OutputDevice*) (this=0x707a340, pRenderContext=0x3595030) at sw/source/core/layout/calcmove.cxx:312 46 SwFrame::Calc(OutputDevice*) const (this=0x707a340, pRenderContext=0x3595030) at sw/source/core/layout/trvlfrm.cxx:1783 47 GetFrameOfModify(SwRootFrame const*, SwModify const&, SwFrameType, Point const*, SwPosition const*, bool) (pLayout=0x36b26f0, rMod=..., nFrameType=(SwFrameType::Txt | SwFrameType::NoTxt), pPoint=0x707c6f0, pPos=0x707c720, bCalcFrame=true) at sw/source/core/layout/frmtool.cxx:3247 48 SwContentNode::getLayoutFrame(SwRootFrame const*, Point const*, SwPosition const*, bool) const (this=0x71328c0, _pRoot=0x36b26f0, pPoint=0x707c6f0, pPos=0x707c720, bCalcFrame=true) at sw/source/core/docnode/node.cxx:1118 49 SwRootFrame::CalcFrameRects(SwShellCursor&) (this=0x36b26f0, rCursor=...) at sw/source/core/layout/trvlfrm.cxx:2028 50 SwShellCursor::FillRects() (this=0x707c680) at sw/source/core/crsr/viscrs.cxx:609 51 SwSelPaintRects::Show(std::__debug::vector<rtl::OString, std::allocator<rtl::OString> >*) (this=0x707c680, pSelectionRectangles=0x7ffeafbf5570) at sw/source/core/crsr/viscrs.cxx:332 52 SwShellCursor::Show(SfxViewShell*) (this=0x707c680, pViewShell=0x0) at sw/source/core/crsr/viscrs.cxx:619 53 SwCursorShell::Paint(OutputDevice&, tools::Rectangle const&) (this=0x364cc00, rRenderContext=..., rRect=...) at sw/source/core/crsr/crsrsh.cxx:1283 54 SwEditWin::Paint(OutputDevice&, tools::Rectangle const&) (this=0x3595030, rRenderContext=..., rRect=...) at sw/source/uibase/docvw/edtwin2.cxx:476 Change-Id: I1b237f0f425e58bb95bae9f19019f26fe5da21fd (cherry picked from commit 2ca0360a6c75959bf61bd2ee0ef96b2729369a15) Reviewed-on: https://gerrit.libreoffice.org/38619 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> (cherry picked from commit 9fa193f1a17eac56c19f611c76c2cdd022487b9e) diff --git a/sw/source/core/inc/rootfrm.hxx b/sw/source/core/inc/rootfrm.hxx index e784efd9d51d..7ff6908b8441 100644 --- a/sw/source/core/inc/rootfrm.hxx +++ b/sw/source/core/inc/rootfrm.hxx @@ -420,6 +420,28 @@ inline void SwRootFrame::SetVirtPageNum( const bool bOf) const const_cast<SwRootFrame*>(this)->mbIsVirtPageNum = bOf; } +/// helper class to disable creation of an action by a callback event +/// in particular, change event from a drawing object (SwDrawContact::Changed()) +class DisableCallbackAction +{ + private: + SwRootFrame & m_rRootFrame; + bool m_bOldCallbackActionState; + + public: + explicit DisableCallbackAction(SwRootFrame & rRootFrame) + : m_rRootFrame(rRootFrame) + , m_bOldCallbackActionState(rRootFrame.IsCallbackActionEnabled()) + { + m_rRootFrame.SetCallbackActionEnabled(false); + } + + ~DisableCallbackAction() + { + m_rRootFrame.SetCallbackActionEnabled(m_bOldCallbackActionState); + } +}; + #endif // INCLUDED_SW_SOURCE_CORE_INC_ROOTFRM_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx index 85fc5b92e92c..4911850f58fa 100644 --- a/sw/source/core/layout/flylay.cxx +++ b/sw/source/core/layout/flylay.cxx @@ -800,7 +800,7 @@ void SwPageFrame::AppendDrawObjToPage( SwAnchoredObject& _rNewObj ) static_cast<SwRootFrame*>(GetUpper())->InvalidateBrowseWidth(); } - OSL_ENSURE( _rNewObj.GetAnchorFrame(), "anchored draw object without anchor" ); + assert(_rNewObj.GetAnchorFrame()); SwFlyFrame* pFlyFrame = const_cast<SwFlyFrame*>(_rNewObj.GetAnchorFrame()->FindFlyFrame()); if ( pFlyFrame && _rNewObj.GetDrawObj()->GetOrdNum() < pFlyFrame->GetVirtDrawObj()->GetOrdNum() ) diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx index 329c0816984d..f7f77366b704 100644 --- a/sw/source/core/layout/frmtool.cxx +++ b/sw/source/core/layout/frmtool.cxx @@ -3280,6 +3280,8 @@ SwFrame* GetFrameOfModify( const SwRootFrame* pLayout, SwModify const& rMod, SwF if( bCalcFrame ) { + // tdf#108118 prevent recursion + DisableCallbackAction a(*pTmpFrame->getRootFrame()); // - format parent Writer // fly frame, if it isn't been formatted yet. // Note: The Writer fly frame could be the frame itself. diff --git a/sw/source/core/layout/trvlfrm.cxx b/sw/source/core/layout/trvlfrm.cxx index 7cc66a0d5bca..e4b93bf0ef80 100644 --- a/sw/source/core/layout/trvlfrm.cxx +++ b/sw/source/core/layout/trvlfrm.cxx @@ -1449,28 +1449,6 @@ void SwPageFrame::GetContentPosition( const Point &rPt, SwPosition &rPos ) const } } -// #123110# - helper class to disable creation of an action -// by a callback event - e.g., change event from a drawing object -class DisableCallbackAction -{ - private: - SwRootFrame& mrRootFrame; - bool mbOldCallbackActionState; - - public: - explicit DisableCallbackAction( const SwRootFrame& _rRootFrame ) : - mrRootFrame( const_cast<SwRootFrame&>(_rRootFrame) ), - mbOldCallbackActionState( _rRootFrame.IsCallbackActionEnabled() ) - { - mrRootFrame.SetCallbackActionEnabled( false ); - } - - ~DisableCallbackAction() - { - mrRootFrame.SetCallbackActionEnabled( mbOldCallbackActionState ); - } -}; - /** Search the nearest Content to the passed point. * * Only search inside the BodyText. @@ -1483,7 +1461,7 @@ Point SwRootFrame::GetNextPrevContentPos( const Point& rPoint, bool bNext ) cons // #123110# - disable creation of an action by a callback // event during processing of this method. Needed because formatting is // triggered by this method. - DisableCallbackAction aDisableCallbackAction( *this ); + DisableCallbackAction aDisableCallbackAction(const_cast<SwRootFrame&>(*this)); //Search the first ContentFrame and his successor in the body area. //To be efficient (and not formatting too much) we'll start at the correct //page. @@ -2019,6 +1997,8 @@ void SwRootFrame::CalcFrameRects(SwShellCursor &rCursor) return; } + DisableCallbackAction a(*this); // the GetCharRect below may format + //First obtain the ContentFrames for the start and the end - those are needed //anyway. SwContentFrame const* pStartFrame = pStartPos->nNode.GetNode(). commit 5e23f8c94afedf9e08abade42d92bce8597f3124 Author: Eike Rathke <er...@redhat.com> Date: Thu Jun 15 13:05:16 2017 +0200 Resolves: tdf#104989 a matrix/array formula cell needs to have dimensions This is a combination of 2 commits. Resolves: tdf#104989 a matrix/array formula cell needs to have dimensions Most spreadsheet functions don't need it, but some may. (cherry picked from commit 033d018a3a1d345d61f3c4dc4da693cdd4004dea) Ensure all cases push an error return, tdf#104989 related (not the cause) A formula cell in matrix context could have no dimensions.. (which is the cause but elsewhere). (cherry picked from commit e6abe9c3d06d6776e05bef93b5e6f87b403ea967) 1a04f9808d8f5c802789e3db77052351b24c24c7 Change-Id: I954acaa0a64c4dac8d15acd5b3f404019a7e0bce Reviewed-on: https://gerrit.libreoffice.org/38832 Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Tested-by: Jenkins <c...@libreoffice.org> (cherry picked from commit b85a1921585d70323c1c10ea6a7d29f1aa00ed25) diff --git a/sc/source/core/tool/interpr7.cxx b/sc/source/core/tool/interpr7.cxx index 69eed575810b..b226717c2935 100644 --- a/sc/source/core/tool/interpr7.cxx +++ b/sc/source/core/tool/interpr7.cxx @@ -83,6 +83,11 @@ void ScInterpreter::ScFilterXML() } } + if (!nMatCols || !nMatRows) + { + PushNoValue(); + return; + } OUString aXPathExpression = GetString().getString(); OUString aString = GetString().getString(); @@ -124,6 +129,7 @@ void ScInterpreter::ScFilterXML() switch(pXPathObj->type) { case XPATH_UNDEFINED: + PushNoValue(); break; case XPATH_NODESET: { diff --git a/sc/source/ui/unoobj/funcuno.cxx b/sc/source/ui/unoobj/funcuno.cxx index 31f2e1eacb7b..e9dd22b0ba0a 100644 --- a/sc/source/ui/unoobj/funcuno.cxx +++ b/sc/source/ui/unoobj/funcuno.cxx @@ -611,6 +611,8 @@ uno::Any SAL_CALL ScFunctionAccess::callFunction( const OUString& aName, pDoc, aFormulaPos, aTokenArr, formula::FormulaGrammar::GRAM_API, (sal_uInt8)(mbArray ? MM_FORMULA : MM_NONE) ); pFormula = pDoc->SetFormulaCell(aFormulaPos, pFormula); + if (mbArray && pFormula) + pFormula->SetMatColsRows(1,1); // the cell dimensions (only one cell) // call GetMatrix before GetErrCode because GetMatrix always recalculates // if there is no matrix result commit 98ddf9a3ee9aa848798f8f2e5f3d576206195a2a Author: David Tardon <dtar...@redhat.com> Date: Thu Jun 15 16:02:48 2017 +0200 upload graphite 1.3.10 Change-Id: Ib70e1c08a11465f5a65be8cd0c892e8f7667b478 Reviewed-on: https://gerrit.libreoffice.org/38837 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Stahl <mst...@redhat.com> (cherry picked from commit 619d93c8f660b26e19f41c6908807819ac783958) Reviewed-on: https://gerrit.libreoffice.org/38845 (cherry picked from commit ac80b0687b4a9ed345be68e446dbf11258ef0b28) diff --git a/download.lst b/download.lst index 534c4b94f0a3..f34b4dffa27e 100644 --- a/download.lst +++ b/download.lst @@ -59,7 +59,8 @@ export FREEHAND_TARBALL := libfreehand-0.1.1.tar.bz2 export FREETYPE_TARBALL := dbf2caca1d3afd410a29217a9809d397-freetype-2.4.8.tar.bz2 export GLEW_TARBALL := 3941e9cab2f4f9d8faee3e8d57ae7664-glew-1.12.0.zip export GLM_TARBALL := bae83fa5dc7f081768daace6e199adc3-glm-0.9.4.6-libreoffice.zip -export GRAPHITE_TARBALL := 3069842a88b8f40c6b83ad2850cda293-graphite2-minimal-1.3.9.tgz +export GRAPHITE_MD5SUM := 9c499b8ec9f1b81fd0bb6a3b986f4b0f +export GRAPHITE_TARBALL := graphite2-minimal-1.3.10.tgz export HARFBUZZ_MD5SUM := 5986e1bfcd983d1f6caa53ef64c4abc5 export HARFBUZZ_TARBALL := harfbuzz-1.3.2.tar.bz2 export HSQLDB_TARBALL := 17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip commit d04ecbed2a9551bfcb0690a34ea7ddc6b019e5e7 Author: David Tardon <dtar...@redhat.com> Date: Thu Jun 15 13:17:40 2017 +0200 use correct size (cherry picked from commit d1ae31a1fc49ec7a68b2a07c5e5e97d95b346ca9) Change-Id: I620ada9b209bb2084eccaa81385beb6306d6a3d0 Reviewed-on: https://gerrit.libreoffice.org/38827 Reviewed-by: Michael Stahl <mst...@redhat.com> Tested-by: Michael Stahl <mst...@redhat.com> (cherry picked from commit 54e7b46718bf2f47c7f55a93cfbb23681429ffc6) diff --git a/external/libmwaw/0001-ofz-1037-resize-vector-correctly.patch.1 b/external/libmwaw/0001-ofz-1037-resize-vector-correctly.patch.1 new file mode 100644 index 000000000000..df64f7bcf4d2 --- /dev/null +++ b/external/libmwaw/0001-ofz-1037-resize-vector-correctly.patch.1 @@ -0,0 +1,25 @@ +From 68b3b74569881248bfb6cbb4266177cc253b292f Mon Sep 17 00:00:00 2001 +From: David Tardon <dtar...@redhat.com> +Date: Sat, 8 Apr 2017 14:03:29 +0200 +Subject: [PATCH] ofz#1037 resize vector correctly + +--- + src/lib/MsWrd1Parser.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/lib/MsWrd1Parser.cxx b/src/lib/MsWrd1Parser.cxx +index 63547e6..3626064 100644 +--- a/src/lib/MsWrd1Parser.cxx ++++ b/src/lib/MsWrd1Parser.cxx +@@ -902,7 +902,7 @@ bool MsWrd1Parser::readFootnoteCorrespondance(MWAWVec2i limits) + int id = fIt++->second; + fPos[1] = fIt==footnoteMap.end() ? m_state->m_eot : fIt->first; + if (id >= int(m_state->m_footnotesList.size())) +- m_state->m_footnotesList.resize(size_t(id),MWAWVec2l(0,0)); ++ m_state->m_footnotesList.resize(size_t(id)+1,MWAWVec2l(0,0)); + m_state->m_footnotesList[size_t(id)]=fPos; + } + ascii().addDelimiter(input->tell(),'|'); +-- +2.13.0 + diff --git a/external/libmwaw/UnpackedTarball_libmwaw.mk b/external/libmwaw/UnpackedTarball_libmwaw.mk index 17c3ec5f82c2..6803ee09d06d 100644 --- a/external/libmwaw/UnpackedTarball_libmwaw.mk +++ b/external/libmwaw/UnpackedTarball_libmwaw.mk @@ -37,6 +37,7 @@ endif $(eval $(call gb_UnpackedTarball_add_patches,libmwaw,\ external/libmwaw/0001-fix-build-with-msvc.patch.1 \ + external/libmwaw/0001-ofz-1037-resize-vector-correctly.patch.1 \ )) # vim: set noet sw=4 ts=4:
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits