Author: alg Date: Mon Nov 12 17:29:06 2012 New Revision: 1408362 URL: http://svn.apache.org/viewvc?rev=1408362&view=rev Log: Secured SlideSorterModel::DeleteSlide for negative page indices
Modified: incubator/ooo/trunk/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx Modified: incubator/ooo/trunk/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx?rev=1408362&r1=1408361&r2=1408362&view=diff ============================================================================== --- incubator/ooo/trunk/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx (original) +++ incubator/ooo/trunk/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx Mon Nov 12 17:29:06 2012 @@ -675,13 +675,36 @@ void SlideSorterModel::InsertSlide (SdPa void SlideSorterModel::DeleteSlide (const SdPage* pPage) { - const sal_Int32 nIndex (GetIndex(pPage)); - if (maPageDescriptors[nIndex]) - if (maPageDescriptors[nIndex]->GetPage() != pPage) - return; + sal_Int32 nIndex(0); - maPageDescriptors.erase(maPageDescriptors.begin()+nIndex); - UpdateIndices(nIndex); + // Caution, GetIndex() may be negative since it uses GetPageNumber()-1 + // for calculation, so do this only when page is inserted, else the + // GetPageNumber() will be zero and thus GetIndex() == -1 + if(pPage->IsInserted()) + { + nIndex = GetIndex(pPage); + } + else + { + // if not inserted, search for page + for(; nIndex < maPageDescriptors.size(); nIndex++) + { + if(maPageDescriptors[nIndex]->GetPage() == pPage) + { + break; + } + } + } + + if(nIndex >= 0 && nIndex < maPageDescriptors.size()) + { + if (maPageDescriptors[nIndex]) + if (maPageDescriptors[nIndex]->GetPage() != pPage) + return; + + maPageDescriptors.erase(maPageDescriptors.begin()+nIndex); + UpdateIndices(nIndex); + } OSL_TRACE("page removed"); }