summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-10-17 16:40:28 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-10-18 20:07:48 +0200
commit473c1b05f7a7a5500a2e15b911263b546792b013 (patch)
tree15a4385cb9c769b4cc48a394cea6f392c0517173 /lotuswordpro
parent11485a500196af7a2533787f4faf32e14693f480 (diff)
ofz#26357 Timeout in lwpfuzzer, 12s -> 1.3s
Change-Id: I1f1e2f1727b698d761adaf0d388d731fc80e280f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104467 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/Library_lwpft.mk1
-rw-r--r--lotuswordpro/source/filter/lwprowlayout.cxx7
-rw-r--r--lotuswordpro/source/filter/lwptablelayout.cxx19
-rw-r--r--lotuswordpro/source/filter/lwptablelayout.hxx10
4 files changed, 19 insertions, 18 deletions
diff --git a/lotuswordpro/Library_lwpft.mk b/lotuswordpro/Library_lwpft.mk
index f35568d3647b..e7536e9f7a64 100644
--- a/lotuswordpro/Library_lwpft.mk
+++ b/lotuswordpro/Library_lwpft.mk
@@ -37,6 +37,7 @@ $(eval $(call gb_Library_use_libraries,lwpft,\
$(eval $(call gb_Library_use_externals,lwpft,\
boost_headers \
+ mdds_headers \
icui18n \
icuuc \
icu_headers \
diff --git a/lotuswordpro/source/filter/lwprowlayout.cxx b/lotuswordpro/source/filter/lwprowlayout.cxx
index 3321f294469e..9590e41d9670 100644
--- a/lotuswordpro/source/filter/lwprowlayout.cxx
+++ b/lotuswordpro/source/filter/lwprowlayout.cxx
@@ -238,9 +238,7 @@ void LwpRowLayout::ConvertRow(rtl::Reference<XFTable> const & pXFTable,sal_uInt8
m_ConnCellList[nMarkConnCell]->GetColID());
//set all cell in this merge cell to cellsmap
- for (sal_uInt16 nRowLoop = crowid; nRowLoop < nRowMark; nRowLoop++)
- for (sal_uInt16 nColLoop = i; nColLoop < nColID+1; nColLoop++)
- pTableLayout->SetCellsMap(nRowLoop,nColLoop, xXFCell.get());
+ pTableLayout->SetCellsMap(crowid, i, nRowMark - 1, nColID, xXFCell.get());
i += m_ConnCellList[nMarkConnCell]->GetNumcols();
nMarkConnCell = FindNextMarkConnCell(static_cast<sal_uInt16>(nMarkConnCell),nEndCol);
@@ -433,8 +431,7 @@ void LwpRowLayout::ConvertCommonRow(rtl::Reference<XFTable> const & pXFTable, sa
}
xRow->AddCell(xCell);
- for (sal_uInt8 j=nCellStartCol;j<=nCellEndCol;j++)
- pTableLayout->SetCellsMap(crowid,j, xCell.get());//set to cellsmap
+ pTableLayout->SetCellsMap(crowid, nCellStartCol, crowid, nCellEndCol, xCell.get()); //set to cellsmap
}
pXFTable->AddRow(xRow);
diff --git a/lotuswordpro/source/filter/lwptablelayout.cxx b/lotuswordpro/source/filter/lwptablelayout.cxx
index 5ea2d42db9a4..2494501ff3d9 100644
--- a/lotuswordpro/source/filter/lwptablelayout.cxx
+++ b/lotuswordpro/source/filter/lwptablelayout.cxx
@@ -1402,16 +1402,17 @@ void LwpTableLayout::ConvertDefaultRow(rtl::Reference<XFTable> const & pXFTable,
pXFTable->AddRow(xRow);
}
+
/**
* @short set cell map info
* @param pXFCell - pointer to xfcell
* @param nRow - row id
* @param nCol - column id
*/
-void LwpTableLayout::SetCellsMap(sal_uInt16 nRow, sal_uInt8 nCol, XFCell* pXFCell)
+void LwpTableLayout::SetCellsMap(sal_uInt16 nRow1, sal_uInt8 nCol1,
+ sal_uInt16 nRow2, sal_uInt8 nCol2, XFCell* pXFCell)
{
- // combine the 16bit nRow and 8bit nCol into a single 32bit number
- m_CellsMap.insert(std::make_pair((nRow << 8) | nCol, pXFCell));
+ m_CellsMap.insert({{nRow1, nCol1}, {nRow2, nCol2}}, pXFCell);
}
/**
@@ -1422,17 +1423,17 @@ void LwpTableLayout::SetCellsMap(sal_uInt16 nRow, sal_uInt8 nCol, XFCell* pXFCel
*/
XFCell* LwpTableLayout::GetCellsMap(sal_uInt16 nRow, sal_uInt8 nCol)
{
- RowCol pos = (nRow << 8) | nCol;
- auto iter = m_CellsMap.find(pos);
- if (iter == m_CellsMap.end())
- return nullptr;
- return iter->second;
+ auto results = m_CellsMap.search({{nRow, nCol}, {nRow, nCol}}, rt_type::search_type::overlap);
+ if (results.begin() == results.end())
+ return nullptr;
+ // return the last thing inserted for this position
+ return *std::prev(results.end());
}
/**
* @descr Get row layout by row id
* @param nRow - row id
*/
- LwpRowLayout* LwpTableLayout::GetRowLayout(sal_uInt16 nRow)
+LwpRowLayout* LwpTableLayout::GetRowLayout(sal_uInt16 nRow)
{
LwpObjectID *pRowID = &GetChildHead();
LwpRowLayout * pRowLayout = dynamic_cast<LwpRowLayout *>(pRowID->obj().get());
diff --git a/lotuswordpro/source/filter/lwptablelayout.hxx b/lotuswordpro/source/filter/lwptablelayout.hxx
index 21ab84ec1c67..fe8312414587 100644
--- a/lotuswordpro/source/filter/lwptablelayout.hxx
+++ b/lotuswordpro/source/filter/lwptablelayout.hxx
@@ -64,10 +64,11 @@
#include "lwplayout.hxx"
#include <xfilter/xftable.hxx>
+#include <mdds/rtree.hpp>
+
#include <vector>
#include <map>
#include <memory>
-#include <unordered_map>
class XFTableStyle;
class XFTable;
@@ -148,7 +149,7 @@ public:
void ConvertTable(rtl::Reference<XFTable> const & pXFTable, sal_uInt16 nStartRow,
sal_uInt16 nEndRow,sal_uInt8 nStartCol,sal_uInt8 nEndCol);
const OUString& GetDefaultRowStyleName() const {return m_DefaultRowStyleName;}
- void SetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol,XFCell* pXFCell);
+ void SetCellsMap(sal_uInt16 nRow1, sal_uInt8 nCol1, sal_uInt16 nRow2, sal_uInt8 nCol2, XFCell* pXFCell);
XFCell* GetCellsMap(sal_uInt16 nRow,sal_uInt8 nCol);
const std::map<sal_uInt16,LwpRowLayout*>& GetRowsMap() const {return m_RowsMap;}
LwpRowLayout* GetRowLayout(sal_uInt16 nRow);
@@ -165,8 +166,9 @@ private:
void SplitConflictCells();
rtl::Reference<XFTable> m_pXFTable;
bool m_bConverted;
- typedef sal_Int32 RowCol;
- std::unordered_map<RowCol, XFCell*> m_CellsMap;
+
+ using rt_type = mdds::rtree<int, XFCell*>;
+ rt_type m_CellsMap;
void PutCellVals(LwpFoundry* pFoundry, LwpObjectID aTableID);
};