summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-11-03 10:49:38 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-11-03 16:54:06 +0100
commit45780815b2ae9d07a249a7d84d332c8b402317a5 (patch)
tree0fc1d0a8b35238b29880b4cb4feb5f9bdc61a1d3
parentd659b79d409b64da11b8a89a2995c97543cc42d6 (diff)
ofz: fix leak
Change-Id: I5984a8b7ef2d978c118d4e65e686027b1e510bd9 Reviewed-on: https://gerrit.libreoffice.org/44251 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sc/source/filter/html/htmlpars.cxx180
-rw-r--r--sc/source/filter/inc/eeparser.hxx8
-rw-r--r--sc/source/filter/inc/htmlpars.hxx12
-rw-r--r--sc/source/filter/rtf/eeimpars.cxx16
-rw-r--r--sc/source/filter/rtf/rtfparse.cxx39
5 files changed, 111 insertions, 144 deletions
diff --git a/sc/source/filter/html/htmlpars.cxx b/sc/source/filter/html/htmlpars.cxx
index 054a22685345..5cbbf7a299bc 100644
--- a/sc/source/filter/html/htmlpars.cxx
+++ b/sc/source/filter/html/htmlpars.cxx
@@ -229,18 +229,6 @@ ScHTMLLayoutParser::~ScHTMLLayoutParser()
{
ScHTMLTableStackEntry* pS = aTableStack.top();
aTableStack.pop();
-
- bool found = false;
- for (ScEEParseEntry* p : maList)
- {
- if ( pS->pCellEntry == p )
- {
- found = true;
- break;
- }
- }
- if ( !found )
- delete pS->pCellEntry;
if ( pS->pLocalColOffset != pLocalColOffset )
delete pS->pLocalColOffset;
delete pS;
@@ -313,12 +301,12 @@ void ScHTMLLayoutParser::NewActEntry( ScEEParseEntry* pE )
{
if ( !pE->aSel.HasRange() )
{ // Completely empty, following text ends up in the same paragraph!
- pActEntry->aSel.nStartPara = pE->aSel.nEndPara;
- pActEntry->aSel.nStartPos = pE->aSel.nEndPos;
+ mxActEntry->aSel.nStartPara = pE->aSel.nEndPara;
+ mxActEntry->aSel.nStartPos = pE->aSel.nEndPos;
}
}
- pActEntry->aSel.nEndPara = pActEntry->aSel.nStartPara;
- pActEntry->aSel.nEndPos = pActEntry->aSel.nStartPos;
+ mxActEntry->aSel.nEndPara = mxActEntry->aSel.nStartPara;
+ mxActEntry->aSel.nEndPos = mxActEntry->aSel.nStartPos;
}
void ScHTMLLayoutParser::EntryEnd( ScEEParseEntry* pE, const ESelection& rSel )
@@ -491,7 +479,7 @@ void ScHTMLLayoutParser::Adjust()
SCROW nCurRow = 0;
sal_uInt16 nPageWidth = (sal_uInt16) aPageSize.Width();
InnerMap* pTab = nullptr;
- for (ScEEParseEntry* pE : maList)
+ for (auto& pE : maList)
{
if ( pE->nTab < nTab )
{ // Table finished
@@ -590,7 +578,7 @@ void ScHTMLLayoutParser::Adjust()
// Real column
(void)SeekOffset( &maColOffset, pE->nOffset, &pE->nCol, nOffsetTolerance );
SCCOL nColBeforeSkip = pE->nCol;
- SkipLocked( pE, false );
+ SkipLocked(pE.get(), false);
if ( pE->nCol != nColBeforeSkip )
{
SCCOL nCount = (SCCOL)maColOffset.size();
@@ -645,7 +633,6 @@ sal_uInt16 ScHTMLLayoutParser::GetWidth( ScEEParseEntry* pE )
void ScHTMLLayoutParser::SetWidths()
{
- ScEEParseEntry* pE;
SCCOL nCol;
if ( !nTableWidth )
nTableWidth = (sal_uInt16) aPageSize.Width();
@@ -664,7 +651,7 @@ void ScHTMLLayoutParser::SetWidths()
nTableWidth = (sal_uInt16)(pLocalColOffset->back() - pLocalColOffset->front());
for ( size_t i = nFirstTableCell, nListSize = maList.size(); i < nListSize; ++i )
{
- pE = maList[ i ];
+ auto& pE = maList[ i ];
if ( pE->nTab == nTable )
{
pE->nOffset = (sal_uInt16) (*pLocalColOffset)[pE->nCol - nColCntStart];
@@ -684,7 +671,7 @@ void ScHTMLLayoutParser::SetWidths()
pOffsets[0] = nColOffsetStart;
for ( size_t i = nFirstTableCell, nListSize = maList.size(); i < nListSize; ++i )
{
- pE = maList[ i ];
+ auto& pE = maList[ i ];
if ( pE->nTab == nTable && pE->nWidth )
{
nCol = pE->nCol - nColCntStart;
@@ -755,7 +742,7 @@ void ScHTMLLayoutParser::SetWidths()
for ( size_t i = nFirstTableCell, nListSize = maList.size(); i < nListSize; ++i )
{
- pE = maList[ i ];
+ auto& pE = maList[ i ];
if ( pE->nTab == nTable )
{
nCol = pE->nCol - nColCntStart;
@@ -780,12 +767,12 @@ void ScHTMLLayoutParser::SetWidths()
}
for ( size_t i = nFirstTableCell, nListSize = maList.size(); i < nListSize; ++i )
{
- pE = maList[ i ];
+ auto& pE = maList[ i ];
if ( pE->nTab == nTable )
{
if ( !pE->nWidth )
{
- pE->nWidth = GetWidth( pE );
+ pE->nWidth = GetWidth(pE.get());
OSL_ENSURE( pE->nWidth, "SetWidths: pE->nWidth == 0" );
}
MakeCol( &maColOffset, pE->nOffset, pE->nWidth, nOffsetTolerance, nOffsetTolerance );
@@ -827,30 +814,19 @@ void ScHTMLLayoutParser::CloseEntry( const HtmlImportInfo* pInfo )
if ( bTabInTabCell )
{ // From the stack in TableOff
bTabInTabCell = false;
- bool found = false;
- for (ScEEParseEntry* p : maList)
- {
- if ( pActEntry == p )
- {
- found = true;
- break;
- }
- }
- if ( !found )
- delete pActEntry;
- NewActEntry( maList.back() ); // New free flying pActEntry
+ NewActEntry(maList.back().get()); // New free flying mxActEntry
return ;
}
- if ( pActEntry->nTab == 0 )
- pActEntry->nWidth = (sal_uInt16) aPageSize.Width();
- Colonize( pActEntry );
- nColCnt = pActEntry->nCol + pActEntry->nColOverlap;
+ if (mxActEntry->nTab == 0)
+ mxActEntry->nWidth = (sal_uInt16) aPageSize.Width();
+ Colonize(mxActEntry.get());
+ nColCnt = mxActEntry->nCol + mxActEntry->nColOverlap;
if ( nMaxCol < nColCnt )
nMaxCol = nColCnt; // TableStack MaxCol
if ( nColMax < nColCnt )
nColMax = nColCnt; // Global MaxCol for ScEEParser GetDimensions!
- EntryEnd( pActEntry, pInfo->aSelection );
- ESelection& rSel = pActEntry->aSel;
+ EntryEnd(mxActEntry.get(), pInfo->aSelection);
+ ESelection& rSel = mxActEntry->aSel;
while ( rSel.nStartPara < rSel.nEndPara
&& pEdit->GetTextLen( rSel.nStartPara ) == 0 )
{ // Strip preceding empty paragraphs
@@ -867,9 +843,9 @@ void ScHTMLLayoutParser::CloseEntry( const HtmlImportInfo* pInfo )
rSel.nEndPara = rSel.nStartPara;
}
if ( rSel.HasRange() )
- pActEntry->aItemSet.Put( SfxBoolItem( ATTR_LINEBREAK, true ) );
- maList.push_back( pActEntry );
- NewActEntry( pActEntry ); // New free flying pActEntry
+ mxActEntry->aItemSet.Put( SfxBoolItem( ATTR_LINEBREAK, true ) );
+ maList.push_back(mxActEntry);
+ NewActEntry(mxActEntry.get()); // New free flying mxActEntry
}
IMPL_LINK( ScHTMLLayoutParser, HTMLImportHdl, HtmlImportInfo&, rInfo, void )
@@ -957,12 +933,12 @@ void ScHTMLLayoutParser::TableDataOn( HtmlImportInfo* pInfo )
{
case HtmlOptionId::COLSPAN:
{
- pActEntry->nColOverlap = ( SCCOL ) rOption.GetString().toInt32();
+ mxActEntry->nColOverlap = (SCCOL)rOption.GetString().toInt32();
}
break;
case HtmlOptionId::ROWSPAN:
{
- pActEntry->nRowOverlap = ( SCROW ) rOption.GetString().toInt32();
+ mxActEntry->nRowOverlap = (SCROW)rOption.GetString().toInt32();
}
break;
case HtmlOptionId::ALIGN:
@@ -979,7 +955,7 @@ void ScHTMLLayoutParser::TableDataOn( HtmlImportInfo* pInfo )
else
eVal = SvxCellHorJustify::Standard;
if ( eVal != SvxCellHorJustify::Standard )
- pActEntry->aItemSet.Put( SvxHorJustifyItem( eVal, ATTR_HOR_JUSTIFY) );
+ mxActEntry->aItemSet.Put(SvxHorJustifyItem(eVal, ATTR_HOR_JUSTIFY));
}
break;
case HtmlOptionId::VALIGN:
@@ -994,41 +970,41 @@ void ScHTMLLayoutParser::TableDataOn( HtmlImportInfo* pInfo )
eVal = SvxCellVerJustify::Bottom;
else
eVal = SvxCellVerJustify::Standard;
- pActEntry->aItemSet.Put( SvxVerJustifyItem( eVal, ATTR_VER_JUSTIFY) );
+ mxActEntry->aItemSet.Put(SvxVerJustifyItem(eVal, ATTR_VER_JUSTIFY));
}
break;
case HtmlOptionId::WIDTH:
{
- pActEntry->nWidth = GetWidthPixel( rOption );
+ mxActEntry->nWidth = GetWidthPixel(rOption);
}
break;
case HtmlOptionId::BGCOLOR:
{
Color aColor;
rOption.GetColor( aColor );
- pActEntry->aItemSet.Put(
- SvxBrushItem( aColor, ATTR_BACKGROUND ) );
+ mxActEntry->aItemSet.Put(SvxBrushItem(aColor, ATTR_BACKGROUND));
}
break;
case HtmlOptionId::SDVAL:
{
- pActEntry->pValStr.reset( new OUString( rOption.GetString() ) );
+ mxActEntry->pValStr.reset(new OUString(rOption.GetString()));
}
break;
case HtmlOptionId::SDNUM:
{
- pActEntry->pNumStr.reset( new OUString( rOption.GetString() ) );
+ mxActEntry->pNumStr.reset(new OUString(rOption.GetString()));
}
break;
default: break;
}
}
- pActEntry->nCol = nColCnt;
- pActEntry->nRow = nRowCnt;
- pActEntry->nTab = nTable;
+
+ mxActEntry->nCol = nColCnt;
+ mxActEntry->nRow = nRowCnt;
+ mxActEntry->nTab = nTable;
if ( bHorJustifyCenterTH )
- pActEntry->aItemSet.Put(
+ mxActEntry->aItemSet.Put(
SvxHorJustifyItem( SvxCellHorJustify::Center, ATTR_HOR_JUSTIFY) );
}
@@ -1057,14 +1033,14 @@ void ScHTMLLayoutParser::TableOn( HtmlImportInfo* pInfo )
if ( ++nTableLevel > 1 )
{ // Table in Table
sal_uInt16 nTmpColOffset = nColOffset; // Will be changed in Colonize()
- Colonize( pActEntry );
+ Colonize(mxActEntry.get());
aTableStack.push( new ScHTMLTableStackEntry(
- pActEntry, xLockedList, pLocalColOffset, nFirstTableCell,
+ mxActEntry, xLockedList, pLocalColOffset, nFirstTableCell,
nRowCnt, nColCntStart, nMaxCol, nTable,
nTableWidth, nColOffset, nColOffsetStart,
bFirstRow ) );
sal_uInt16 nLastWidth = nTableWidth;
- nTableWidth = GetWidth( pActEntry );
+ nTableWidth = GetWidth(mxActEntry.get());
if ( nTableWidth == nLastWidth && nMaxCol - nColCntStart > 1 )
{ // There must be more than one, so this one cannot be enough
nTableWidth = nLastWidth / static_cast<sal_uInt16>((nMaxCol - nColCntStart));
@@ -1106,22 +1082,19 @@ void ScHTMLLayoutParser::TableOn( HtmlImportInfo* pInfo )
nColOffsetStart = nColOffset;
}
- ScEEParseEntry* pE = nullptr;
- if (maList.size())
- pE = maList.back();
- NewActEntry( pE ); // New free flying pActEntry
+ NewActEntry(!maList.empty() ? maList.back().get() : nullptr); // New free flying mxActEntry
xLockedList = new ScRangeList;
}
else
{ // Simple table at the document level
- EntryEnd( pActEntry, pInfo->aSelection );
- if ( pActEntry->aSel.HasRange() )
+ EntryEnd(mxActEntry.get(), pInfo->aSelection);
+ if (mxActEntry->aSel.HasRange())
{ // Flying text left
CloseEntry( pInfo );
NextRow( pInfo );
}
aTableStack.push( new ScHTMLTableStackEntry(
- pActEntry, xLockedList, pLocalColOffset, nFirstTableCell,
+ mxActEntry, xLockedList, pLocalColOffset, nFirstTableCell,
nRowCnt, nColCntStart, nMaxCol, nTable,
nTableWidth, nColOffset, nColOffsetStart,
bFirstRow ) );
@@ -1179,7 +1152,7 @@ void ScHTMLLayoutParser::TableOff( const HtmlImportInfo* pInfo )
ScHTMLTableStackEntry* pS = aTableStack.top();
aTableStack.pop();
- ScEEParseEntry* pE = pS->pCellEntry;
+ auto& pE = pS->xCellEntry;
SCROW nRows = nRowCnt - pS->nRowCnt;
if ( nRows > 1 )
{ // Insert size of table at this position
@@ -1295,10 +1268,9 @@ void ScHTMLLayoutParser::TableOff( const HtmlImportInfo* pInfo )
xLockedList = pS->xLockedList;
delete pLocalColOffset;
pLocalColOffset = pS->pLocalColOffset;
- delete pActEntry;
- // pActEntry is kept around if a table is started in the same row
+ // mxActEntry is kept around if a table is started in the same row
// (anything's possible in HTML); will be deleted by CloseEntry
- pActEntry = pE;
+ mxActEntry = pE;
delete pS;
}
bTabInTabCell = true;
@@ -1322,8 +1294,8 @@ void ScHTMLLayoutParser::TableOff( const HtmlImportInfo* pInfo )
void ScHTMLLayoutParser::Image( HtmlImportInfo* pInfo )
{
- pActEntry->maImageList.push_back( o3tl::make_unique<ScHTMLImage>() );
- ScHTMLImage* pImage = pActEntry->maImageList.back().get();
+ mxActEntry->maImageList.push_back(o3tl::make_unique<ScHTMLImage>());
+ ScHTMLImage* pImage = mxActEntry->maImageList.back().get();
const HTMLOptions& rOptions = static_cast<HTMLParser*>(pInfo->pParser)->GetOptions();
for (const auto & rOption : rOptions)
{
@@ -1336,12 +1308,12 @@ void ScHTMLLayoutParser::Image( HtmlImportInfo* pInfo )
break;
case HtmlOptionId::ALT:
{
- if ( !pActEntry->bHasGraphic )
+ if (!mxActEntry->bHasGraphic)
{ // ALT text only if not any image loaded
- if (!pActEntry->aAltText.isEmpty())
- pActEntry->aAltText += "; ";
+ if (!mxActEntry->aAltText.isEmpty())
+ mxActEntry->aAltText += "; ";
- pActEntry->aAltText += rOption.GetString();
+ mxActEntry->aAltText += rOption.GetString();
}
}
break;
@@ -1383,10 +1355,10 @@ void ScHTMLLayoutParser::Image( HtmlImportInfo* pInfo )
delete pGraphic;
return ; // Bad luck
}
- if ( !pActEntry->bHasGraphic )
+ if (!mxActEntry->bHasGraphic)
{ // discard any ALT text in this cell if we have any image
- pActEntry->bHasGraphic = true;
- (pActEntry->aAltText).clear();
+ mxActEntry->bHasGraphic = true;
+ mxActEntry->aAltText.clear();
}
pImage->aFilterName = rFilter.GetImportFormatName( nFormat );
pImage->pGraphic.reset( pGraphic );
@@ -1396,20 +1368,20 @@ void ScHTMLLayoutParser::Image( HtmlImportInfo* pInfo )
pImage->aSize = pDefaultDev->LogicToPixel( pGraphic->GetPrefSize(),
pGraphic->GetPrefMapMode() );
}
- if ( pActEntry->maImageList.size() > 0 )
+ if (mxActEntry->maImageList.size() > 0)
{
long nWidth = 0;
- for (std::unique_ptr<ScHTMLImage> & pI : pActEntry->maImageList)
+ for (std::unique_ptr<ScHTMLImage> & pI : mxActEntry->maImageList)
{
if ( pI->nDir & nHorizontal )
nWidth += pI->aSize.Width() + 2 * pI->aSpace.X();
else
nWidth = 0;
}
- if ( pActEntry->nWidth
+ if ( mxActEntry->nWidth
&& (nWidth + pImage->aSize.Width() + 2 * pImage->aSpace.X()
- >= pActEntry->nWidth) )
- pActEntry->maImageList.back()->nDir = nVertical;
+ >= mxActEntry->nWidth) )
+ mxActEntry->maImageList.back()->nDir = nVertical;
}
}
@@ -1453,13 +1425,13 @@ void ScHTMLLayoutParser::AnchorOn( HtmlImportInfo* pInfo )
for (const auto & rOption : rOptions)
{
if( rOption.GetToken() == HtmlOptionId::NAME )
- pActEntry->pName.reset( new OUString(rOption.GetString()) );
+ mxActEntry->pName.reset(new OUString(rOption.GetString()));
}
}
bool ScHTMLLayoutParser::IsAtBeginningOfText( const HtmlImportInfo* pInfo )
{
- ESelection& rSel = pActEntry->aSel;
+ ESelection& rSel = mxActEntry->aSel;
return rSel.nStartPara == rSel.nEndPara &&
rSel.nStartPara <= pInfo->aSelection.nEndPara &&
pEdit->GetTextLen( rSel.nStartPara ) == 0;
@@ -1490,7 +1462,7 @@ void ScHTMLLayoutParser::FontOn( HtmlImportInfo* pInfo )
aFontName += aFName;
}
if ( !aFontName.isEmpty() )
- pActEntry->aItemSet.Put( SvxFontItem( FAMILY_DONTKNOW,
+ mxActEntry->aItemSet.Put( SvxFontItem( FAMILY_DONTKNOW,
aFontName, EMPTY_OUSTRING, PITCH_DONTKNOW,
RTL_TEXTENCODING_DONTKNOW, ATTR_FONT ) );
}
@@ -1502,7 +1474,7 @@ void ScHTMLLayoutParser::FontOn( HtmlImportInfo* pInfo )
nSize = 1;
else if ( nSize > SC_HTML_FONTSIZES )
nSize = SC_HTML_FONTSIZES;
- pActEntry->aItemSet.Put( SvxFontHeightItem(
+ mxActEntry->aItemSet.Put( SvxFontHeightItem(
maFontHeights[nSize-1], 100, ATTR_FONT_HEIGHT ) );
}
break;
@@ -1510,7 +1482,7 @@ void ScHTMLLayoutParser::FontOn( HtmlImportInfo* pInfo )
{
Color aColor;
rOption.GetColor( aColor );
- pActEntry->aItemSet.Put( SvxColorItem( aColor, ATTR_FONT_COLOR ) );
+ mxActEntry->aItemSet.Put( SvxColorItem( aColor, ATTR_FONT_COLOR ) );
}
break;
default: break;
@@ -1568,7 +1540,7 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
if ( bInCell )
CloseEntry( pInfo );
// Do not set bInCell to true, TableDataOn does that
- pActEntry->aItemSet.Put(
+ mxActEntry->aItemSet.Put(
SvxWeightItem( WEIGHT_BOLD, ATTR_FONT_WEIGHT) );
SAL_FALLTHROUGH;
}
@@ -1605,8 +1577,8 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
break;
case HtmlTokenId::PARABREAK_OFF:
{ // We continue vertically after an image
- if ( pActEntry->maImageList.size() > 0 )
- pActEntry->maImageList.back()->nDir = nVertical;
+ if (mxActEntry->maImageList.size() > 0)
+ mxActEntry->maImageList.back()->nDir = nVertical;
}
break;
case HtmlTokenId::ANCHOR_ON:
@@ -1623,7 +1595,7 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
{
// TODO: Remember current font size and increase by 1
if ( IsAtBeginningOfText( pInfo ) )
- pActEntry->aItemSet.Put( SvxFontHeightItem(
+ mxActEntry->aItemSet.Put( SvxFontHeightItem(
maFontHeights[3], 100, ATTR_FONT_HEIGHT ) );
}
break;
@@ -1631,7 +1603,7 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
{
// TODO: Remember current font size and decrease by 1
if ( IsAtBeginningOfText( pInfo ) )
- pActEntry->aItemSet.Put( SvxFontHeightItem(
+ mxActEntry->aItemSet.Put( SvxFontHeightItem(
maFontHeights[0], 100, ATTR_FONT_HEIGHT ) );
}
break;
@@ -1639,7 +1611,7 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
case HtmlTokenId::STRONG_ON :
{
if ( IsAtBeginningOfText( pInfo ) )
- pActEntry->aItemSet.Put( SvxWeightItem( WEIGHT_BOLD,
+ mxActEntry->aItemSet.Put( SvxWeightItem( WEIGHT_BOLD,
ATTR_FONT_WEIGHT ) );
}
break;
@@ -1652,7 +1624,7 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
case HtmlTokenId::VARIABLE_ON :
{
if ( IsAtBeginningOfText( pInfo ) )
- pActEntry->aItemSet.Put( SvxPostureItem( ITALIC_NORMAL,
+ mxActEntry->aItemSet.Put( SvxPostureItem( ITALIC_NORMAL,
ATTR_FONT_POSTURE ) );
}
break;
@@ -1660,9 +1632,9 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
{
if ( IsAtBeginningOfText( pInfo ) )
{
- pActEntry->aItemSet.Put( SvxWeightItem( WEIGHT_BOLD,
+ mxActEntry->aItemSet.Put( SvxWeightItem( WEIGHT_BOLD,
ATTR_FONT_WEIGHT ) );
- pActEntry->aItemSet.Put( SvxPostureItem( ITALIC_NORMAL,
+ mxActEntry->aItemSet.Put( SvxPostureItem( ITALIC_NORMAL,
ATTR_FONT_POSTURE ) );
}
}
@@ -1670,7 +1642,7 @@ void ScHTMLLayoutParser::ProcToken( HtmlImportInfo* pInfo )
case HtmlTokenId::UNDERLINE_ON :
{
if ( IsAtBeginningOfText( pInfo ) )
- pActEntry->aItemSet.Put( SvxUnderlineItem( LINESTYLE_SINGLE,
+ mxActEntry->aItemSet.Put( SvxUnderlineItem( LINESTYLE_SINGLE,
ATTR_FONT_UNDERLINE ) );
}
break;
@@ -1906,7 +1878,7 @@ ScHTMLTable::ScHTMLTable( ScHTMLTable& rParentTable, const HtmlImportInfo& rInfo
ScHTMLTable::ScHTMLTable(
SfxItemPool& rPool,
EditEngine& rEditEngine,
- std::vector< ScEEParseEntry* >& rEEParseList,
+ std::vector<std::shared_ptr<ScEEParseEntry>>& rEEParseList,
ScHTMLTableId& rnUnusedId, ScHTMLParser* pParser
) :
mpParentTable( nullptr ),
@@ -2347,7 +2319,7 @@ void ScHTMLTable::ImplPushEntryToVector( ScHTMLEntryVector& rEntryVector, ScHTML
// HTML entry list does not own the entries
rEntryVector.push_back( rxEntry.get() );
// mrEEParseList (reference to member of ScEEParser) owns the entries
- mrEEParseList.push_back( rxEntry.release() );
+ mrEEParseList.push_back(std::shared_ptr<ScEEParseEntry>(rxEntry.release()));
}
bool ScHTMLTable::PushEntry( ScHTMLEntryPtr& rxEntry )
@@ -2784,7 +2756,7 @@ void ScHTMLTable::RecalcDocPos( const ScHTMLPos& rBasePos )
ScHTMLGlobalTable::ScHTMLGlobalTable(
SfxItemPool& rPool,
EditEngine& rEditEngine,
- std::vector< ScEEParseEntry* >& rEEParseVector,
+ std::vector<std::shared_ptr<ScEEParseEntry>>& rEEParseVector,
ScHTMLTableId& rnUnusedId,
ScHTMLParser* pParser
) :
diff --git a/sc/source/filter/inc/eeparser.hxx b/sc/source/filter/inc/eeparser.hxx
index 37125ae4b2ca..9419e5e850e9 100644
--- a/sc/source/filter/inc/eeparser.hxx
+++ b/sc/source/filter/inc/eeparser.hxx
@@ -101,8 +101,8 @@ protected:
EditEngine* pEdit;
SfxItemPool* pPool;
SfxItemPool* pDocPool;
- ::std::vector< ScEEParseEntry* > maList;
- ScEEParseEntry* pActEntry;
+ std::vector<std::shared_ptr<ScEEParseEntry>> maList;
+ std::shared_ptr<ScEEParseEntry> mxActEntry;
ColWidthsMap maColWidths;
int nRtfLastToken;
SCCOL nColCnt;
@@ -124,8 +124,8 @@ public:
{ nCols = nColMax; nRows = nRowMax; }
size_t ListSize() const{ return maList.size(); }
- ScEEParseEntry* ListEntry( size_t index ) { return maList[ index ]; }
- const ScEEParseEntry* ListEntry( size_t index ) const { return maList[ index ]; }
+ ScEEParseEntry* ListEntry( size_t index ) { return maList[index].get(); }
+ const ScEEParseEntry* ListEntry( size_t index ) const { return maList[index].get(); }
};
#endif
diff --git a/sc/source/filter/inc/htmlpars.hxx b/sc/source/filter/inc/htmlpars.hxx
index 5e318aac6115..46bd7d7de699 100644
--- a/sc/source/filter/inc/htmlpars.hxx
+++ b/sc/source/filter/inc/htmlpars.hxx
@@ -98,7 +98,7 @@ typedef o3tl::sorted_vector<sal_uLong> ScHTMLColOffset;
struct ScHTMLTableStackEntry
{
ScRangeListRef xLockedList;
- ScEEParseEntry* pCellEntry;
+ std::shared_ptr<ScEEParseEntry> xCellEntry;
ScHTMLColOffset* pLocalColOffset;
sal_uLong nFirstTableCell;
SCROW nRowCnt;
@@ -109,14 +109,14 @@ struct ScHTMLTableStackEntry
sal_uInt16 nColOffset;
sal_uInt16 nColOffsetStart;
bool bFirstRow;
- ScHTMLTableStackEntry( ScEEParseEntry* pE,
+ ScHTMLTableStackEntry( std::shared_ptr<ScEEParseEntry>& rE,
const ScRangeListRef& rL, ScHTMLColOffset* pTO,
sal_uLong nFTC,
SCROW nRow,
SCCOL nStart, SCCOL nMax, sal_uInt16 nTab,
sal_uInt16 nTW, sal_uInt16 nCO, sal_uInt16 nCOS,
bool bFR )
- : xLockedList( rL ), pCellEntry( pE ),
+ : xLockedList( rL ), xCellEntry(rE),
pLocalColOffset( pTO ),
nFirstTableCell( nFTC ),
nRowCnt( nRow ),
@@ -427,7 +427,7 @@ protected:
explicit ScHTMLTable(
SfxItemPool& rPool,
EditEngine& rEditEngine,
- ::std::vector< ScEEParseEntry* >& rEEParseList,
+ std::vector<std::shared_ptr<ScEEParseEntry>>& rEEParseList,
ScHTMLTableId& rnUnusedId, ScHTMLParser* pParser );
/** Fills all empty cells in this and nested tables with dummy parse entries. */
@@ -526,7 +526,7 @@ private:
ScRangeList maVMergedCells; /// List of all vertically merged cells.
ScRangeList maUsedCells; /// List of all used cells.
EditEngine& mrEditEngine; /// Edit engine (from ScEEParser).
- ::std::vector< ScEEParseEntry* >& mrEEParseList; /// List that owns the parse entries (from ScEEParser).
+ std::vector<std::shared_ptr<ScEEParseEntry>>& mrEEParseList; /// List that owns the parse entries (from ScEEParser).
ScHTMLEntryMap maEntryMap; /// List of entries for each cell.
ScHTMLEntryVector* mpCurrEntryVector; /// Current entry vector from map for faster access.
ScHTMLEntryPtr mxCurrEntry; /// Working entry, not yet inserted in a list.
@@ -549,7 +549,7 @@ public:
explicit ScHTMLGlobalTable(
SfxItemPool& rPool,
EditEngine& rEditEngine,
- ::std::vector< ScEEParseEntry* >& rEEParseList,
+ std::vector<std::shared_ptr<ScEEParseEntry>>& rEEParseList,
ScHTMLTableId& rnUnusedId, ScHTMLParser* pParser );
virtual ~ScHTMLGlobalTable() override;
diff --git a/sc/source/filter/rtf/eeimpars.cxx b/sc/source/filter/rtf/eeimpars.cxx
index 0680767a042f..f84cc987ef8d 100644
--- a/sc/source/filter/rtf/eeimpars.cxx
+++ b/sc/source/filter/rtf/eeimpars.cxx
@@ -625,12 +625,8 @@ ScEEParser::ScEEParser( EditEngine* pEditP ) :
ScEEParser::~ScEEParser()
{
- delete pActEntry;
- while ( !maList.empty() )
- {
- delete maList.back();
- maList.pop_back();
- }
+ mxActEntry.reset();
+ maList.clear();
// Don't delete Pool until the lists have been deleted
pPool->SetSecondaryPool( nullptr );
@@ -639,10 +635,10 @@ ScEEParser::~ScEEParser()
}
void ScEEParser::NewActEntry( const ScEEParseEntry* pE )
-{ // New free-flying pActEntry
- pActEntry = new ScEEParseEntry( pPool );
- pActEntry->aSel.nStartPara = (pE ? pE->aSel.nEndPara + 1 : 0);
- pActEntry->aSel.nStartPos = 0;
+{ // New free-flying mxActEntry
+ mxActEntry.reset(new ScEEParseEntry(pPool));
+ mxActEntry->aSel.nStartPara = (pE ? pE->aSel.nEndPara + 1 : 0);
+ mxActEntry->aSel.nStartPos = 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/rtf/rtfparse.cxx b/sc/source/filter/rtf/rtfparse.cxx
index 49ad81fcb518..1b091aa6234a 100644
--- a/sc/source/filter/rtf/rtfparse.cxx
+++ b/sc/source/filter/rtf/rtfparse.cxx
@@ -64,7 +64,7 @@ ErrCode ScRTFParser::Read( SvStream& rStream, const OUString& rBaseURL )
{
if ( !maList.empty() )
{
- ScEEParseEntry* pE = maList.back();
+ auto& pE = maList.back();
if ( // Completely empty
( pE->aSel.nStartPara == pE->aSel.nEndPara
&& pE->aSel.nStartPos == pE->aSel.nEndPos
@@ -128,10 +128,9 @@ void ScRTFParser::ColAdjust()
if ( nStartAdjust != (sal_uLong)~0 )
{
SCCOL nCol = 0;
- ScEEParseEntry* pE;
- for ( size_t i = nStartAdjust, nListSize = maList.size(); i < nListSize; ++ i )
+ for (size_t i = nStartAdjust, nListSize = maList.size(); i < nListSize; ++i)
{
- pE = maList[ i ];
+ auto& pE = maList[i];
if ( pE->nCol == 0 )
nCol = 0;
pE->nCol = nCol;
@@ -333,28 +332,28 @@ void ScRTFParser::ProcToken( RtfImportInfo* pInfo )
pActDefault = pInsDefault;
if ( pActDefault->nColOverlap > 0 )
{ // Not merged with preceding
- pActEntry->nCol = pActDefault->nCol;
- pActEntry->nColOverlap = pActDefault->nColOverlap;
- pActEntry->nTwips = pActDefault->nTwips;
- pActEntry->nRow = nRowCnt;
- pActEntry->aItemSet.Set( pActDefault->aItemSet );
- EntryEnd( pActEntry, pInfo->aSelection );
+ mxActEntry->nCol = pActDefault->nCol;
+ mxActEntry->nColOverlap = pActDefault->nColOverlap;
+ mxActEntry->nTwips = pActDefault->nTwips;
+ mxActEntry->nRow = nRowCnt;
+ mxActEntry->aItemSet.Set(pActDefault->aItemSet);
+ EntryEnd(mxActEntry.get(), pInfo->aSelection);
if ( nStartAdjust == (sal_uLong)~0 )
nStartAdjust = maList.size();
- maList.push_back( pActEntry );
- NewActEntry( pActEntry ); // New free-flying pActEntry
+ maList.push_back(mxActEntry);
+ NewActEntry(mxActEntry.get()); // New free-flying mxActEntry
}
else
{ // Assign current Twips to MergeCell
if ( !maList.empty() )
{
- ScEEParseEntry* pE = maList.back();
+ auto& pE = maList.back();
pE->nTwips = pActDefault->nTwips;
}
- // Adjust selection of free-flying pActEntry
+ // Adjust selection of free-flying mxActEntry
// Paragraph -1 due to separated text in EditEngine during parsing
- pActEntry->aSel.nStartPara = pInfo->aSelection.nEndPara - 1;
+ mxActEntry->aSel.nStartPara = pInfo->aSelection.nEndPara - 1;
}
pActDefault = nullptr;
@@ -375,11 +374,11 @@ void ScRTFParser::ProcToken( RtfImportInfo* pInfo )
if ( !pActDefault )
{ // text not in table
ColAdjust(); // close the processing table
- pActEntry->nCol = 0;
- pActEntry->nRow = nRowCnt;
- EntryEnd( pActEntry, pInfo->aSelection );
- maList.push_back( pActEntry );
- NewActEntry( pActEntry ); // new pActEntry
+ mxActEntry->nCol = 0;
+ mxActEntry->nRow = nRowCnt;
+ EntryEnd(mxActEntry.get(), pInfo->aSelection);
+ maList.push_back(mxActEntry);
+ NewActEntry(mxActEntry.get()); // new mxActEntry
NextRow();
}
nRtfLastToken = pInfo->nToken;