From 3ff95f3b0b1eed95aa6e4d6baa59c68a047072ea Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 5 Mar 2015 23:14:27 +0100 Subject: [PATCH] cmAlgorithms: Add early return in cmRemoveIndices. Avoid derefencing the iterator and segfaulting if the range is empty. --- Source/cmAlgorithms.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h index b9d7e7889..be57da3dc 100644 --- a/Source/cmAlgorithms.h +++ b/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);