sw/source/core/docnode/ndtbl.cxx | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-)
New commits: commit 4e3dfc1460aa7600643056f10b93f403c1454ffd Author: karthik <[email protected]> AuthorDate: Mon Feb 16 15:20:52 2026 +0530 Commit: Caolán McNamara <[email protected]> CommitDate: Tue Feb 17 09:51:09 2026 +0100 sw: Fix memory leak in lcl_SetDfltBoxAttr `DfltBoxAttrMap_t` is no longer needed as cache. This is related to 513bfbd476113f648090a8275cece4dc04ba0463 Change-Id: I5115502c69dc7f33d8c70541c8f36e8860e5282e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199512 Tested-by: Caolán McNamara <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Jenkins diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx index ed164d208cb5..53b3af1d3140 100644 --- a/sw/source/core/docnode/ndtbl.cxx +++ b/sw/source/core/docnode/ndtbl.cxx @@ -149,36 +149,24 @@ static void lcl_SetDfltBoxAttr( SwFrameFormat& rFormat, sal_uInt8 nId ) typedef std::map<SwFrameFormat *, SwTableBoxFormat *> DfltBoxAttrMap_t; typedef std::vector<DfltBoxAttrMap_t *> DfltBoxAttrList_t; -static void lcl_SetDfltBoxAttr(SwTableBox& rBox, size_t row, - size_t col, size_t nRows, size_t nCols, sal_uInt8 const nId, +static void lcl_SetDfltBoxAttr(SwTableBox& rBox, size_t row, size_t col, size_t nRows, size_t nCols, + sal_uInt8 const nId, SwTableAutoFormat const* const pAutoFormat = nullptr) { - DfltBoxAttrMap_t* pMap = new DfltBoxAttrMap_t; - - SwTableBoxFormat* pNewTableBoxFormat = nullptr; SwFrameFormat* pBoxFrameFormat = rBox.GetFrameFormat(); - DfltBoxAttrMap_t::iterator const iter(pMap->find(pBoxFrameFormat)); - if (pMap->end() != iter) - { - pNewTableBoxFormat = iter->second; - } - else - { - SwDoc& rDoc = pBoxFrameFormat->GetDoc(); - // format does not exist, so create it - pNewTableBoxFormat = rDoc.MakeTableBoxFormat(); - pNewTableBoxFormat->SetFormatAttr( pBoxFrameFormat->GetAttrSet().Get( RES_FRM_SIZE ) ); - if( pAutoFormat ) - pAutoFormat->UpdateToSet(const_cast<SfxItemSet&>(static_cast<SfxItemSet const&>( - pNewTableBoxFormat->GetAttrSet())), - row, col, nRows, nCols, rDoc.GetNumberFormatter()); - else - ::lcl_SetDfltBoxAttr( *pNewTableBoxFormat, nId ); + SwDoc& rDoc = pBoxFrameFormat->GetDoc(); + SwTableBoxFormat* pNewTableBoxFormat = rDoc.MakeTableBoxFormat(); + pNewTableBoxFormat->SetFormatAttr(pBoxFrameFormat->GetAttrSet().Get(RES_FRM_SIZE)); - (*pMap)[pBoxFrameFormat] = pNewTableBoxFormat; - } - rBox.ChgFrameFormat( pNewTableBoxFormat ); + if (pAutoFormat) + pAutoFormat->UpdateToSet(const_cast<SfxItemSet&>(static_cast<SfxItemSet const&>( + pNewTableBoxFormat->GetAttrSet())), + row, col, nRows, nCols, rDoc.GetNumberFormatter()); + else + ::lcl_SetDfltBoxAttr(*pNewTableBoxFormat, nId); + + rBox.ChgFrameFormat(pNewTableBoxFormat); } static SwTableBoxFormat *lcl_CreateDfltBoxFormat( SwDoc &rDoc, std::vector<SwTableBoxFormat*> &rBoxFormatArr,
