summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-08-02 16:46:47 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-08-03 10:13:55 +0200
commit071d14324c2c5c85ed8fe7a0e8bb2ae77d1538f9 (patch)
treeea67604cdb5aa445ac2e7715d9bcfd803a2f8b50
parent4f891d874c8e748ec9a6680f8d12df41ab846aa4 (diff)
tdf#119007 Crash when paste table from web
regression from commit 510033783a9921eef507d424fc5adf6e2696bc4a loplugin:useuniqueptr in ScHTMLLayoutParser Change-Id: I3c6f04ac2c8f188856ec4c9eb6bf520fa03ee97a Reviewed-on: https://gerrit.libreoffice.org/58480 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sc/source/filter/html/htmlpars.cxx15
-rw-r--r--sc/source/filter/inc/htmlpars.hxx6
2 files changed, 8 insertions, 13 deletions
diff --git a/sc/source/filter/html/htmlpars.cxx b/sc/source/filter/html/htmlpars.cxx
index 788c851a5732..09d042e1b18e 100644
--- a/sc/source/filter/html/htmlpars.cxx
+++ b/sc/source/filter/html/htmlpars.cxx
@@ -226,12 +226,7 @@ ScHTMLLayoutParser::ScHTMLLayoutParser(
ScHTMLLayoutParser::~ScHTMLLayoutParser()
{
while ( !aTableStack.empty() )
- {
- ScHTMLTableStackEntry* pS = aTableStack.top().get();
- if ( pS->pLocalColOffset != pLocalColOffset.get() )
- delete pS->pLocalColOffset;
aTableStack.pop();
- }
pLocalColOffset.reset();
if ( pTables )
{
@@ -1032,7 +1027,7 @@ void ScHTMLLayoutParser::TableOn( HtmlImportInfo* pInfo )
sal_uInt16 nTmpColOffset = nColOffset; // Will be changed in Colonize()
Colonize(mxActEntry.get());
aTableStack.push( o3tl::make_unique<ScHTMLTableStackEntry>(
- mxActEntry, xLockedList, pLocalColOffset.get(), nFirstTableCell,
+ mxActEntry, xLockedList, std::move(pLocalColOffset), nFirstTableCell,
nRowCnt, nColCntStart, nMaxCol, nTable,
nTableWidth, nColOffset, nColOffsetStart,
bFirstRow ) );
@@ -1088,7 +1083,7 @@ void ScHTMLLayoutParser::TableOn( HtmlImportInfo* pInfo )
NextRow( pInfo );
}
aTableStack.push( o3tl::make_unique<ScHTMLTableStackEntry>(
- mxActEntry, xLockedList, pLocalColOffset.get(), nFirstTableCell,
+ mxActEntry, xLockedList, std::move(pLocalColOffset), nFirstTableCell,
nRowCnt, nColCntStart, nMaxCol, nTable,
nTableWidth, nColOffset, nColOffsetStart,
bFirstRow ) );
@@ -1238,7 +1233,7 @@ void ScHTMLLayoutParser::TableOff( const HtmlImportInfo* pInfo )
{
sal_uInt16 nOldOffset = pE->nOffset + pE->nWidth;
sal_uInt16 nNewOffset = pE->nOffset + nTableWidth;
- ModifyOffset( pS->pLocalColOffset, nOldOffset, nNewOffset, nOffsetTolerance );
+ ModifyOffset( pS->pLocalColOffset.get(), nOldOffset, nNewOffset, nOffsetTolerance );
sal_uInt16 nTmp = nNewOffset - pE->nOffset - pE->nWidth;
pE->nWidth = nNewOffset - pE->nOffset;
pS->nTableWidth = pS->nTableWidth + nTmp;
@@ -1257,7 +1252,7 @@ void ScHTMLLayoutParser::TableOff( const HtmlImportInfo* pInfo )
nColOffsetStart = pS->nColOffsetStart;
bFirstRow = pS->bFirstRow;
xLockedList = pS->xLockedList;
- pLocalColOffset.reset( pS->pLocalColOffset );
+ pLocalColOffset = std::move( pS->pLocalColOffset );
// mxActEntry is kept around if a table is started in the same row
// (anything's possible in HTML); will be deleted by CloseEntry
mxActEntry = pE;
@@ -1274,7 +1269,7 @@ void ScHTMLLayoutParser::TableOff( const HtmlImportInfo* pInfo )
{
std::unique_ptr<ScHTMLTableStackEntry> pS = std::move(aTableStack.top());
aTableStack.pop();
- pLocalColOffset.reset( pS->pLocalColOffset );
+ pLocalColOffset = std::move( pS->pLocalColOffset );
}
}
}
diff --git a/sc/source/filter/inc/htmlpars.hxx b/sc/source/filter/inc/htmlpars.hxx
index bac9257f9d5d..2518e68631d2 100644
--- a/sc/source/filter/inc/htmlpars.hxx
+++ b/sc/source/filter/inc/htmlpars.hxx
@@ -99,7 +99,7 @@ struct ScHTMLTableStackEntry
{
ScRangeListRef xLockedList;
std::shared_ptr<ScEEParseEntry> xCellEntry;
- ScHTMLColOffset* pLocalColOffset;
+ std::unique_ptr<ScHTMLColOffset> pLocalColOffset;
sal_uLong nFirstTableCell;
SCROW nRowCnt;
SCCOL nColCntStart;
@@ -110,14 +110,14 @@ struct ScHTMLTableStackEntry
sal_uInt16 nColOffsetStart;
bool bFirstRow;
ScHTMLTableStackEntry( const std::shared_ptr<ScEEParseEntry>& rE,
- const ScRangeListRef& rL, ScHTMLColOffset* pTO,
+ const ScRangeListRef& rL, std::unique_ptr<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 ), xCellEntry(rE),
- pLocalColOffset( pTO ),
+ pLocalColOffset( std::move(pTO) ),
nFirstTableCell( nFTC ),
nRowCnt( nRow ),
nColCntStart( nStart ), nMaxCol( nMax ),