You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2012/11/12 18:51:35 UTC

svn commit: r1408375 - /incubator/ooo/branches/alg/aw080/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx

Author: alg
Date: Mon Nov 12 17:51:34 2012
New Revision: 1408375

URL: http://svn.apache.org/viewvc?rev=1408375&view=rev
Log:
Secured SlideSorterModel::DeleteSlide for negative page indices

Modified:
    incubator/ooo/branches/alg/aw080/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx

Modified: incubator/ooo/branches/alg/aw080/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx?rev=1408375&r1=1408374&r2=1408375&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx (original)
+++ incubator/ooo/branches/alg/aw080/main/sd/source/ui/slidesorter/model/SlideSorterModel.cxx Mon Nov 12 17:51:34 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");
 }