filter/source/config/cache/filtercache.cxx | 4 - filter/source/config/cache/filtercache.hxx | 2 i18npool/inc/localedata.hxx | 2 i18npool/source/localedata/localedata.cxx | 2 linguistic/source/lngsvcmgr.cxx | 2 scripting/source/dlgprov/dlgprov.cxx | 2 scripting/source/dlgprov/dlgprov.hxx | 2 sw/source/uibase/app/apphdl.cxx | 33 +++++------ vcl/source/gdi/alpha.cxx | 6 +- vcl/source/gdi/pngread.cxx | 83 +++++++++++++---------------- 10 files changed, 63 insertions(+), 75 deletions(-)
New commits: commit 610d995c3a6aa406ee93052e613a4cfe1a8888c6 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 09:45:15 2017 +0000 ofz#395 leak in Bitmap::AcquireWriteAccess Change-Id: Id67f0b8e82e0730eb35a14a6080bfa5b15d365c8 diff --git a/vcl/source/gdi/pngread.cxx b/vcl/source/gdi/pngread.cxx index 8b00675..c0a0007 100644 --- a/vcl/source/gdi/pngread.cxx +++ b/vcl/source/gdi/pngread.cxx @@ -76,9 +76,11 @@ private: std::vector<sal_uInt8>::iterator maDataIter; std::unique_ptr<Bitmap> mpBmp; - Bitmap::ScopedWriteAccess mpAcc; + Bitmap::ScopedWriteAccess mxAcc; std::unique_ptr<Bitmap> mpMaskBmp; + Bitmap::ScopedWriteAccess mxMaskAcc; std::unique_ptr<AlphaMask> mpAlphaMask; + AlphaMask::ScopedWriteAccess mxAlphaAcc; BitmapWriteAccess* mpMaskAcc; ZCodec mpZCodec; @@ -418,17 +420,10 @@ BitmapEx PNGReaderImpl::GetBitmapEx( const Size& rPreviewSizeHint ) } // release write access of the bitmaps - mpAcc.reset(); - - if ( mpMaskAcc ) - { - if ( mpAlphaMask ) - mpAlphaMask->ReleaseAccess( mpMaskAcc ); - else if ( mpMaskBmp ) - Bitmap::ReleaseAccess( mpMaskAcc ); - - mpMaskAcc = nullptr; - } + mxAcc.reset(); + mxMaskAcc.reset(); + mxAlphaAcc.reset(); + mpMaskAcc = nullptr; // return the resulting BitmapEx BitmapEx aRet; @@ -657,16 +652,17 @@ bool PNGReaderImpl::ImplReadHeader( const Size& rPreviewSizeHint ) return false; mpBmp = o3tl::make_unique<Bitmap>( maTargetSize, mnTargetDepth ); - mpAcc = Bitmap::ScopedWriteAccess(*mpBmp); - if( !mpAcc ) + mxAcc = Bitmap::ScopedWriteAccess(*mpBmp); + if (!mxAcc) return false; if ( mbAlphaChannel ) { mpAlphaMask = o3tl::make_unique<AlphaMask>( maTargetSize ); mpAlphaMask->Erase( 128 ); - mpMaskAcc = mpAlphaMask->AcquireWriteAccess(); - if( !mpMaskAcc ) + mxAlphaAcc = AlphaMask::ScopedWriteAccess(*mpAlphaMask); + mpMaskAcc = mxAlphaAcc.get(); + if (!mpMaskAcc) return false; } @@ -691,9 +687,9 @@ void PNGReaderImpl::ImplGetGrayPalette( sal_uInt16 nBitDepth ) if( nBitDepth == 2 ) nPaletteEntryCount = 16; - mpAcc->SetPaletteEntryCount( nPaletteEntryCount ); + mxAcc->SetPaletteEntryCount( nPaletteEntryCount ); for ( sal_uInt32 i = 0, nStart = 0; nStart < 256; i++, nStart += nAdd ) - mpAcc->SetPaletteColor( (sal_uInt16)i, BitmapColor( mpColorTable[ nStart ], + mxAcc->SetPaletteColor( (sal_uInt16)i, BitmapColor( mpColorTable[ nStart ], mpColorTable[ nStart ], mpColorTable[ nStart ] ) ); } @@ -701,17 +697,17 @@ bool PNGReaderImpl::ImplReadPalette() { sal_uInt16 nCount = static_cast<sal_uInt16>( mnChunkLen / 3 ); - if ( ( ( mnChunkLen % 3 ) == 0 ) && ( ( 0 < nCount ) && ( nCount <= 256 ) ) && mpAcc ) + if ( ( ( mnChunkLen % 3 ) == 0 ) && ( ( 0 < nCount ) && ( nCount <= 256 ) ) && mxAcc ) { mbPalette = true; - mpAcc->SetPaletteEntryCount( (sal_uInt16) nCount ); + mxAcc->SetPaletteEntryCount( (sal_uInt16) nCount ); for ( sal_uInt16 i = 0; i < nCount; i++ ) { sal_uInt8 nRed = mpColorTable[ *maDataIter++ ]; sal_uInt8 nGreen = mpColorTable[ *maDataIter++ ]; sal_uInt8 nBlue = mpColorTable[ *maDataIter++ ]; - mpAcc->SetPaletteColor( i, Color( nRed, nGreen, nBlue ) ); + mxAcc->SetPaletteColor( i, Color( nRed, nGreen, nBlue ) ); } } else @@ -781,12 +777,14 @@ bool PNGReaderImpl::ImplReadTransparent() if( bNeedAlpha) { mpAlphaMask = o3tl::make_unique<AlphaMask>( maTargetSize ); - mpMaskAcc = mpAlphaMask->AcquireWriteAccess(); + mxAlphaAcc = AlphaMask::ScopedWriteAccess(*mpAlphaMask); + mpMaskAcc = mxAlphaAcc.get(); } else { mpMaskBmp = o3tl::make_unique<Bitmap>( maTargetSize, 1 ); - mpMaskAcc = mpMaskBmp->AcquireWriteAccess(); + mxMaskAcc = Bitmap::ScopedWriteAccess(*mpMaskBmp); + mpMaskAcc = mxMaskAcc.get(); } mbTransparent = (mpMaskAcc != nullptr); if( !mbTransparent ) @@ -832,9 +830,9 @@ void PNGReaderImpl::ImplGetBackground() if ( mnChunkLen == 1 ) { sal_uInt16 nCol = *maDataIter++; - if ( nCol < mpAcc->GetPaletteEntryCount() ) + if ( nCol < mxAcc->GetPaletteEntryCount() ) { - mpAcc->Erase( mpAcc->GetPaletteColor( (sal_uInt8)nCol ) ); + mxAcc->Erase( mxAcc->GetPaletteColor( (sal_uInt8)nCol ) ); break; } } @@ -849,7 +847,7 @@ void PNGReaderImpl::ImplGetBackground() // the color type 0 and 4 is always greyscale, // so the return value can be used as index sal_uInt8 nIndex = ImplScaleColor(); - mpAcc->Erase( mpAcc->GetPaletteColor( nIndex ) ); + mxAcc->Erase( mxAcc->GetPaletteColor( nIndex ) ); } } break; @@ -862,7 +860,7 @@ void PNGReaderImpl::ImplGetBackground() sal_uInt8 nRed = ImplScaleColor(); sal_uInt8 nGreen = ImplScaleColor(); sal_uInt8 nBlue = ImplScaleColor(); - mpAcc->Erase( Color( nRed, nGreen, nBlue ) ); + mxAcc->Erase( Color( nRed, nGreen, nBlue ) ); } } break; @@ -1147,9 +1145,9 @@ void PNGReaderImpl::ImplDrawScanline( sal_uInt32 nXStart, sal_uInt32 nXAdd ) const sal_uInt32 nY = mnYpos >> mnPreviewShift; sal_uInt8* pTmp = mpInflateInBuf + 1; - if ( mpAcc->HasPalette() ) // alphachannel is not allowed by pictures including palette entries + if ( mxAcc->HasPalette() ) // alphachannel is not allowed by pictures including palette entries { - switch ( mpAcc->GetBitCount() ) + switch ( mxAcc->GetBitCount() ) { case 1 : { @@ -1314,8 +1312,8 @@ void PNGReaderImpl::ImplDrawScanline( sal_uInt32 nXStart, sal_uInt32 nXAdd ) { int nLineBytes = maOrigSize.Width(); if (mbPalette) - SanitizePaletteIndexes(pTmp, nLineBytes, mpAcc); - mpAcc->CopyScanline( nY, pTmp, ScanlineFormat::N8BitPal, nLineBytes ); + SanitizePaletteIndexes(pTmp, nLineBytes, mxAcc); + mxAcc->CopyScanline( nY, pTmp, ScanlineFormat::N8BitPal, nLineBytes ); } else { @@ -1406,7 +1404,7 @@ void PNGReaderImpl::ImplDrawScanline( sal_uInt32 nXStart, sal_uInt32 nXAdd ) // copy scanlines directly to bitmaps for content and alpha; use the formats which // are able to copy directly to BitmapBuffer - mpAcc->CopyScanline(nY, mpScanline, ScanlineFormat::N24BitTcBgr, maOrigSize.Width() * 3); + mxAcc->CopyScanline(nY, mpScanline, ScanlineFormat::N24BitTcBgr, maOrigSize.Width() * 3); mpMaskAcc->CopyScanline(nY, mpScanlineAlpha, ScanlineFormat::N8BitPal, maOrigSize.Width()); } else @@ -1538,7 +1536,7 @@ void PNGReaderImpl::ImplDrawScanline( sal_uInt32 nXStart, sal_uInt32 nXAdd ) // copy scanline directly to bitmap for content; use the format which is able to // copy directly to BitmapBuffer - mpAcc->CopyScanline(nY, mpScanline, ScanlineFormat::N24BitTcBgr, maOrigSize.Width() * 3); + mxAcc->CopyScanline(nY, mpScanline, ScanlineFormat::N24BitTcBgr, maOrigSize.Width() * 3); } else { @@ -1593,7 +1591,7 @@ void PNGReaderImpl::ImplSetPixel( sal_uInt32 nY, sal_uInt32 nX, const BitmapColo return; nX >>= mnPreviewShift; - mpAcc->SetPixel( nY, nX, rBitmapColor ); + mxAcc->SetPixel( nY, nX, rBitmapColor ); } void PNGReaderImpl::ImplSetPixel( sal_uInt32 nY, sal_uInt32 nX, sal_uInt8 nPalIndex ) @@ -1603,7 +1601,7 @@ void PNGReaderImpl::ImplSetPixel( sal_uInt32 nY, sal_uInt32 nX, sal_uInt8 nPalIn return; nX >>= mnPreviewShift; - mpAcc->SetPixelIndex( nY, nX, nPalIndex ); + mxAcc->SetPixelIndex( nY, nX, nPalIndex ); } void PNGReaderImpl::ImplSetTranspPixel( sal_uInt32 nY, sal_uInt32 nX, const BitmapColor& rBitmapColor, bool bTrans ) @@ -1613,7 +1611,7 @@ void PNGReaderImpl::ImplSetTranspPixel( sal_uInt32 nY, sal_uInt32 nX, const Bitm return; nX >>= mnPreviewShift; - mpAcc->SetPixel( nY, nX, rBitmapColor ); + mxAcc->SetPixel( nY, nX, rBitmapColor ); if ( bTrans ) mpMaskAcc->SetPixel( nY, nX, mcTranspColor ); @@ -1629,7 +1627,7 @@ void PNGReaderImpl::ImplSetAlphaPixel( sal_uInt32 nY, sal_uInt32 nX, return; nX >>= mnPreviewShift; - mpAcc->SetPixelIndex( nY, nX, nPalIndex ); + mxAcc->SetPixelIndex( nY, nX, nPalIndex ); mpMaskAcc->SetPixelIndex( nY, nX, ~nAlpha ); } @@ -1641,7 +1639,7 @@ void PNGReaderImpl::ImplSetAlphaPixel( sal_uInt32 nY, sal_uInt32 nX, return; nX >>= mnPreviewShift; - mpAcc->SetPixel( nY, nX, rBitmapColor ); + mxAcc->SetPixel( nY, nX, rBitmapColor ); if (!mpMaskAcc) return; mpMaskAcc->SetPixelIndex( nY, nX, ~nAlpha ); commit 3cd6485ee95ed2b2c4cf8cd7b45a573a0aced175 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 09:31:27 2017 +0000 BitmapWriteAccess* -> Bitmap::ScopedWriteAccess Change-Id: I5b3980d8eecc61a6f63aa64a1b05c30afa2f57f7 diff --git a/vcl/source/gdi/pngread.cxx b/vcl/source/gdi/pngread.cxx index 1d4a6c3..8b00675 100644 --- a/vcl/source/gdi/pngread.cxx +++ b/vcl/source/gdi/pngread.cxx @@ -76,7 +76,7 @@ private: std::vector<sal_uInt8>::iterator maDataIter; std::unique_ptr<Bitmap> mpBmp; - BitmapWriteAccess* mpAcc; + Bitmap::ScopedWriteAccess mpAcc; std::unique_ptr<Bitmap> mpMaskBmp; std::unique_ptr<AlphaMask> mpAlphaMask; BitmapWriteAccess* mpMaskAcc; @@ -167,7 +167,6 @@ public: PNGReaderImpl::PNGReaderImpl( SvStream& rPNGStream ) : mrPNGStream( rPNGStream ), - mpAcc ( nullptr ), mpMaskAcc ( nullptr ), mpInflateInBuf ( nullptr ), mpScanPrior ( nullptr ), @@ -419,11 +418,7 @@ BitmapEx PNGReaderImpl::GetBitmapEx( const Size& rPreviewSizeHint ) } // release write access of the bitmaps - if ( mpAcc ) - { - Bitmap::ReleaseAccess( mpAcc ); - mpAcc = nullptr; - } + mpAcc.reset(); if ( mpMaskAcc ) { @@ -662,7 +657,7 @@ bool PNGReaderImpl::ImplReadHeader( const Size& rPreviewSizeHint ) return false; mpBmp = o3tl::make_unique<Bitmap>( maTargetSize, mnTargetDepth ); - mpAcc = mpBmp->AcquireWriteAccess(); + mpAcc = Bitmap::ScopedWriteAccess(*mpBmp); if( !mpAcc ) return false; @@ -1120,9 +1115,9 @@ void PNGReaderImpl::ImplApplyFilter() namespace { - void SanitizePaletteIndexes(sal_uInt8* pEntries, int nLen, BitmapWriteAccess* pAcc) + void SanitizePaletteIndexes(sal_uInt8* pEntries, int nLen, const Bitmap::ScopedWriteAccess& rAcc) { - sal_uInt16 nPaletteEntryCount = pAcc->GetPaletteEntryCount(); + sal_uInt16 nPaletteEntryCount = rAcc->GetPaletteEntryCount(); for (int nX = 0; nX < nLen; ++nX) { if (pEntries[nX] >= nPaletteEntryCount) commit b3bddf8b75226326a39f92f8fcb1745569b86caa Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 09:17:21 2017 +0000 Bitmap::Convert->Convert Change-Id: Id8e6c4d7290eabdc32991bad1e8cda1f06c751f2 diff --git a/vcl/source/gdi/alpha.cxx b/vcl/source/gdi/alpha.cxx index 1289016..dc4b507 100644 --- a/vcl/source/gdi/alpha.cxx +++ b/vcl/source/gdi/alpha.cxx @@ -30,7 +30,7 @@ AlphaMask::AlphaMask( const Bitmap& rBitmap ) : Bitmap( rBitmap ) { if( !!rBitmap ) - Bitmap::Convert( BMP_CONVERSION_8BIT_GREYS ); + Convert( BMP_CONVERSION_8BIT_GREYS ); } AlphaMask::AlphaMask( const AlphaMask& rAlphaMask ) : @@ -59,7 +59,7 @@ AlphaMask& AlphaMask::operator=( const Bitmap& rBitmap ) *static_cast<Bitmap*>(this) = rBitmap; if( !!rBitmap ) - Bitmap::Convert( BMP_CONVERSION_8BIT_GREYS ); + Convert( BMP_CONVERSION_8BIT_GREYS ); return *this; } @@ -154,7 +154,7 @@ void AlphaMask::ReleaseAccess( BitmapReadAccess* pAccess ) if( pAccess ) { Bitmap::ReleaseAccess( pAccess ); - Bitmap::Convert( BMP_CONVERSION_8BIT_GREYS ); + Convert( BMP_CONVERSION_8BIT_GREYS ); } } commit 01392c4a60e1bcba839a06471300312593e15de4 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 09:03:39 2017 +0000 WaE: -Wunused-function with dbconnectivity disabled Change-Id: Ief9a3b478d904dd12f51dc7e4373a8273f209635 diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx index 816f0f2..eaaabf9 100644 --- a/sw/source/uibase/app/apphdl.cxx +++ b/sw/source/uibase/app/apphdl.cxx @@ -114,24 +114,6 @@ using namespace ::com::sun::star; #include <shells.hrc> -namespace -{ - bool lcl_hasAllComponentsAvailable() - { - try - { - return css::sdb::TextConnectionSettings::create(comphelper::getProcessComponentContext()).is(); - } - catch (css::uno::Exception & e) - { - SAL_INFO( - "sw.core", - "assuming Base to be missing; caught " << e.Message); - return false; - } - } -} - SFX_IMPL_INTERFACE(SwModule, SfxModule) void SwModule::InitInterface_Impl() @@ -408,6 +390,21 @@ SwMailMergeWizardExecutor::~SwMailMergeWizardExecutor() OSL_ENSURE( m_pWizard == nullptr, "SwMailMergeWizardExecutor: m_pWizard must be Null!" ); } +bool lcl_hasAllComponentsAvailable() +{ + try + { + return css::sdb::TextConnectionSettings::create(comphelper::getProcessComponentContext()).is(); + } + catch (css::uno::Exception & e) + { + SAL_INFO( + "sw.core", + "assuming Base to be missing; caught " << e.Message); + return false; + } +} + void SwMailMergeWizardExecutor::ExecuteMailMergeWizard( const SfxItemSet * pArgs ) { if(!lcl_hasAllComponentsAvailable()) commit 7aad85c4f5bfd33ce7fdb17643ae16b6b87f7632 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 09:01:02 2017 +0000 coverity#1398524 Uncaught exception Change-Id: I5654f1123fc7dea3ea132141863cd65cf184e360 diff --git a/linguistic/source/lngsvcmgr.cxx b/linguistic/source/lngsvcmgr.cxx index 9ac9656..35cc6e7 100644 --- a/linguistic/source/lngsvcmgr.cxx +++ b/linguistic/source/lngsvcmgr.cxx @@ -2018,7 +2018,7 @@ uno::Sequence< OUString > LngSvcMgr::getSupportedServiceNames_Static() uno::Reference< uno::XInterface > SAL_CALL LngSvcMgr_CreateInstance( const uno::Reference< lang::XMultiServiceFactory > & /*rSMgr*/ ) - throw(uno::Exception) + throw(uno::Exception, std::exception) { uno::Reference< uno::XInterface > xService = static_cast<cppu::OWeakObject*>(new LngSvcMgr); return xService; commit 5b99067d8d6f0fee926405c6e14dbb9d10c7368e Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 09:00:13 2017 +0000 coverity#1398525 Uncaught exception Change-Id: Ic7d2ae5d597ad589b86ec27e2645c543e08121ad diff --git a/filter/source/config/cache/filtercache.cxx b/filter/source/config/cache/filtercache.cxx index 86d092e..671b0ba 100644 --- a/filter/source/config/cache/filtercache.cxx +++ b/filter/source/config/cache/filtercache.cxx @@ -1512,10 +1512,9 @@ void FilterCache::impl_loadSet(const css::uno::Reference< css::container::XNameA } } - void FilterCache::impl_readPatchUINames(const css::uno::Reference< css::container::XNameAccess >& xNode, CacheItem& rItem) - throw(css::uno::Exception) + throw(css::uno::Exception, std::exception) { // SAFE -> ---------------------------------- @@ -1573,7 +1572,6 @@ void FilterCache::impl_readPatchUINames(const css::uno::Reference< css::containe rItem[PROPNAME_UINAME] = pUIName->second; } - void FilterCache::impl_savePatchUINames(const css::uno::Reference< css::container::XNameReplace >& xNode, const CacheItem& rItem) throw(css::uno::Exception) diff --git a/filter/source/config/cache/filtercache.hxx b/filter/source/config/cache/filtercache.hxx index 35ade19..650f996 100644 --- a/filter/source/config/cache/filtercache.hxx +++ b/filter/source/config/cache/filtercache.hxx @@ -861,7 +861,7 @@ class FilterCache : public BaseLock /** TODO */ void impl_readPatchUINames(const css::uno::Reference< css::container::XNameAccess >& xNode, CacheItem& rItem) - throw(css::uno::Exception); + throw(css::uno::Exception, std::exception); /** TODO */ commit 001f85ffa45d0a46b3eea48a5c60597ea03afd42 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 08:59:07 2017 +0000 coverity#1398526 Uncaught exception Change-Id: I6b1d5b0049ec744ed87e13300e1f01a94f88202c diff --git a/i18npool/inc/localedata.hxx b/i18npool/inc/localedata.hxx index ae33218..636b627 100644 --- a/i18npool/inc/localedata.hxx +++ b/i18npool/inc/localedata.hxx @@ -132,7 +132,7 @@ private: getCalendarItemByName(const OUString& name, const css::lang::Locale& rLocale, const css::uno::Sequence< css::i18n::Calendar2 >& calendarsSeq, - sal_Int16 item) throw( css::uno::RuntimeException ); + sal_Int16 item) throw( css::uno::RuntimeException, std::exception ); /// Helper to obtain a sequence of days, months, gmonths or eras. css::uno::Sequence< css::i18n::CalendarItem2 > getCalendarItems( diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx index e2b9aa6..f57b953 100644 --- a/i18npool/source/localedata/localedata.cxx +++ b/i18npool/source/localedata/localedata.cxx @@ -601,7 +601,7 @@ oslGenericFunction SAL_CALL lcl_LookupTableHelper::getFunctionSymbolByName( Sequence< CalendarItem2 > &LocaleDataImpl::getCalendarItemByName(const OUString& name, const Locale& rLocale, const Sequence< Calendar2 >& calendarsSeq, sal_Int16 item) - throw(RuntimeException) + throw(RuntimeException, std::exception) { if (!ref_name.equals(name)) { OUString aLocStr, id; commit 52f6b1f49e29d1398be70561701d798502e57f3c Author: Caolán McNamara <caol...@redhat.com> Date: Tue Jan 10 08:58:07 2017 +0000 coverity#1398527 Uncaught exception Change-Id: Id1c0273f7430ba525f231ed5bb9311c732935640 diff --git a/scripting/source/dlgprov/dlgprov.cxx b/scripting/source/dlgprov/dlgprov.cxx index 2a41e8e..8267d5f 100644 --- a/scripting/source/dlgprov/dlgprov.cxx +++ b/scripting/source/dlgprov/dlgprov.cxx @@ -615,7 +615,7 @@ namespace dlgprov Reference < XControl > DialogProviderImpl::createDialogImpl( const OUString& URL, const Reference< XInterface >& xHandler, const Reference< XWindowPeer >& xParent, bool bDialogProviderMode ) - throw (IllegalArgumentException, RuntimeException) + throw (IllegalArgumentException, RuntimeException, std::exception) { // if the dialog is located in a document, the document must already be open! diff --git a/scripting/source/dlgprov/dlgprov.hxx b/scripting/source/dlgprov/dlgprov.hxx index 868b7df..f88d0c0 100644 --- a/scripting/source/dlgprov/dlgprov.hxx +++ b/scripting/source/dlgprov/dlgprov.hxx @@ -106,7 +106,7 @@ namespace dlgprov const css::uno::Reference< css::uno::XInterface >& xHandler, const css::uno::Reference< css::awt::XWindowPeer >& xParent, bool bDialogProviderMode ) - throw (css::lang::IllegalArgumentException, css::uno::RuntimeException); + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception); public: explicit DialogProviderImpl(
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits