瀏覽代碼

cmAlgorithms: Add early return in cmRemoveIndices.

Avoid derefencing the iterator and segfaulting if the range
is empty.
Stephen Kelly 10 年之前
父節點
當前提交
3ff95f3b0b
共有 1 個文件被更改,包括 5 次插入1 次删除
  1. 5 1
      Source/cmAlgorithms.h

+ 5 - 1
Source/cmAlgorithms.h

@@ -237,6 +237,11 @@ typename Range::const_iterator cmRemoveIndices(Range& r, InputRange const& rem)
 {
 {
   typename InputRange::const_iterator remIt = rem.begin();
   typename InputRange::const_iterator remIt = rem.begin();
   typename InputRange::const_iterator remEnd = rem.end();
   typename InputRange::const_iterator remEnd = rem.end();
+  const typename Range::iterator rangeEnd = r.end();
+  if (remIt == remEnd)
+    {
+    return rangeEnd;
+    }
 
 
   typename Range::iterator writer = r.begin();
   typename Range::iterator writer = r.begin();
   std::advance(writer, *remIt);
   std::advance(writer, *remIt);
@@ -244,7 +249,6 @@ typename Range::const_iterator cmRemoveIndices(Range& r, InputRange const& rem)
   typename InputRange::value_type prevRem = *remIt;
   typename InputRange::value_type prevRem = *remIt;
   ++remIt;
   ++remIt;
   size_t count = 1;
   size_t count = 1;
-  const typename Range::iterator rangeEnd = r.end();
   for ( ; writer != rangeEnd && remIt != remEnd; ++count, ++remIt)
   for ( ; writer != rangeEnd && remIt != remEnd; ++count, ++remIt)
     {
     {
     std::advance(pivot, *remIt - prevRem);
     std::advance(pivot, *remIt - prevRem);