summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2022-01-28 16:32:35 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-01-29 12:53:20 +0100
commitdca12cba56db610311422deb2cb676e9d765c457 (patch)
tree3c5a72ac2a0d2117f726c5334ce431e57f95a4d3
parent0fdc89caed84f63c4c954951be80b11e417de726 (diff)
fix loading file with very large number of styles
where nCurrentPosition was wrapping around Change-Id: I839215f3138d58884f03509b6341147ef28edb4c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129108 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> (cherry picked from commit 7f3682ecb8a40fe85b6525be9e73d49d76bb308b) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129073 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
-rw-r--r--include/svl/style.hxx2
-rw-r--r--svl/source/items/style.cxx24
2 files changed, 13 insertions, 13 deletions
diff --git a/include/svl/style.hxx b/include/svl/style.hxx
index 24656eb2318a..5427680b462a 100644
--- a/include/svl/style.hxx
+++ b/include/svl/style.hxx
@@ -214,7 +214,7 @@ private:
SVL_DLLPRIVATE bool IsTrivialSearch() const;
SfxStyleSheetBase* pCurrentStyle;
- sal_uInt16 nCurrentPosition;
+ sal_Int32 mnCurrentPosition;
bool bSearchUsed;
friend class SfxStyleSheetBasePool;
diff --git a/svl/source/items/style.cxx b/svl/source/items/style.cxx
index 950201bef962..233e88d2bb20 100644
--- a/svl/source/items/style.cxx
+++ b/svl/source/items/style.cxx
@@ -391,7 +391,7 @@ struct DoesStyleMatchStyleSheetPredicate final : public svl::StyleSheetPredicate
SfxStyleSheetIterator::SfxStyleSheetIterator(SfxStyleSheetBasePool *pBase,
SfxStyleFamily eFam, SfxStyleSearchBits n)
: pCurrentStyle(nullptr)
- , nCurrentPosition(0)
+ , mnCurrentPosition(0)
{
pBasePool=pBase;
nSearchFamily=eFam;
@@ -434,7 +434,7 @@ SfxStyleSheetBase* SfxStyleSheetIterator::operator[](sal_uInt16 nIdx)
if( IsTrivialSearch())
{
retval = pBasePool->pImpl->mxIndexedStyleSheets->GetStyleSheetByPosition(nIdx);
- nCurrentPosition = nIdx;
+ mnCurrentPosition = nIdx;
}
else if(nMask == SfxStyleSearchBits::All)
{
@@ -443,7 +443,7 @@ SfxStyleSheetBase* SfxStyleSheetIterator::operator[](sal_uInt16 nIdx)
pBasePool->pImpl->mxIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily).at(nIdx))
;
retval = ref.get();
- nCurrentPosition = nIdx;
+ mnCurrentPosition = nIdx;
}
else
{
@@ -452,7 +452,7 @@ SfxStyleSheetBase* SfxStyleSheetIterator::operator[](sal_uInt16 nIdx)
pBasePool->pImpl->mxIndexedStyleSheets->GetNthStyleSheetThatMatchesPredicate(nIdx, predicate);
if (ref.get() != nullptr)
{
- nCurrentPosition = pBasePool->pImpl->mxIndexedStyleSheets->FindStyleSheetPosition(*ref);
+ mnCurrentPosition = pBasePool->pImpl->mxIndexedStyleSheets->FindStyleSheetPosition(*ref);
retval = ref.get();
}
}
@@ -483,21 +483,21 @@ SfxStyleSheetBase* SfxStyleSheetIterator::Next()
if ( IsTrivialSearch() )
{
unsigned nStyleSheets = pBasePool->pImpl->mxIndexedStyleSheets->GetNumberOfStyleSheets();
- unsigned newPosition = nCurrentPosition +1;
+ unsigned newPosition = mnCurrentPosition +1;
if (nStyleSheets > newPosition)
{
- nCurrentPosition = newPosition;
- retval = pBasePool->pImpl->mxIndexedStyleSheets->GetStyleSheetByPosition(nCurrentPosition);
+ mnCurrentPosition = newPosition;
+ retval = pBasePool->pImpl->mxIndexedStyleSheets->GetStyleSheetByPosition(mnCurrentPosition);
}
}
else if(nMask == SfxStyleSearchBits::All)
{
- unsigned newPosition = nCurrentPosition +1;
+ unsigned newPosition = mnCurrentPosition +1;
const std::vector<unsigned>& familyVector =
pBasePool->pImpl->mxIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily);
if (familyVector.size() > newPosition)
{
- nCurrentPosition = newPosition;
+ mnCurrentPosition = newPosition;
unsigned stylePosition = familyVector[newPosition];
retval = pBasePool->pImpl->mxIndexedStyleSheets->GetStyleSheetByPosition(stylePosition);
}
@@ -507,10 +507,10 @@ SfxStyleSheetBase* SfxStyleSheetIterator::Next()
DoesStyleMatchStyleSheetPredicate predicate(this);
rtl::Reference< SfxStyleSheetBase > ref =
pBasePool->pImpl->mxIndexedStyleSheets->GetNthStyleSheetThatMatchesPredicate(
- 0, predicate, nCurrentPosition+1);
+ 0, predicate, mnCurrentPosition+1);
retval = ref.get();
if (retval != nullptr) {
- nCurrentPosition = pBasePool->pImpl->mxIndexedStyleSheets->FindStyleSheetPosition(*ref);
+ mnCurrentPosition = pBasePool->pImpl->mxIndexedStyleSheets->FindStyleSheetPosition(*ref);
}
}
pCurrentStyle = retval;
@@ -530,7 +530,7 @@ SfxStyleSheetBase* SfxStyleSheetIterator::Find(const OUString& rStr)
unsigned pos = positions.front();
SfxStyleSheetBase* pStyle = pBasePool->pImpl->mxIndexedStyleSheets->GetStyleSheetByPosition(pos);
- nCurrentPosition = pos;
+ mnCurrentPosition = pos;
pCurrentStyle = pStyle;
return pCurrentStyle;
}