diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-01-28 16:32:35 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-01-29 12:53:20 +0100 |
commit | dca12cba56db610311422deb2cb676e9d765c457 (patch) | |
tree | 3c5a72ac2a0d2117f726c5334ce431e57f95a4d3 | |
parent | 0fdc89caed84f63c4c954951be80b11e417de726 (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.hxx | 2 | ||||
-rw-r--r-- | svl/source/items/style.cxx | 24 |
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; } |