Browse Source

cmAlgorithms: Add early return in cmRemoveIndices.

Avoid derefencing the iterator and segfaulting if the range
is empty.
Stephen Kelly 10 năm trước cách đây
mục cha
commit
3ff95f3b0b
1 tập tin đã thay đổi với 5 bổ sung1 xóa
  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 remEnd = rem.end();
+  const typename Range::iterator rangeEnd = r.end();
+  if (remIt == remEnd)
+    {
+    return rangeEnd;
+    }
 
   typename Range::iterator writer = r.begin();
   std::advance(writer, *remIt);
@@ -244,7 +249,6 @@ typename Range::const_iterator cmRemoveIndices(Range& r, InputRange const& rem)
   typename InputRange::value_type prevRem = *remIt;
   ++remIt;
   size_t count = 1;
-  const typename Range::iterator rangeEnd = r.end();
   for ( ; writer != rangeEnd && remIt != remEnd; ++count, ++remIt)
     {
     std::advance(pivot, *remIt - prevRem);