[Coverity 1437923] Using invalid iterator in matroska_segment_seeker.cpp
Undefined behavior may result; the program may crash or subtly misbehave.
In mkv::SegmentSeeker::get_seekpoints_around(long, std::vector<mkv::SegmentSeeker::Seekpoint, std::allocatormkv::SegmentSeeker::Seekpoint> const &): An invalid or past-the-end iterator is being used (CWE-119)
222 iterator const it_begin = seekpoints.begin();
2. past_the_end: Function end creates an iterator.
3. assign: Assigning: it_end = seekpoints->end().
223 iterator const it_end = seekpoints.end();
224 iterator const it_middle = greatest_lower_bound( it_begin, it_end, needle );
225
4. Condition it_middle != it_end, taking false branch.
5. tested_end: it_middle testing equal to it_end.
226 if ( it_middle != it_end && (*it_middle).pts > pts)
227 // found nothing low enough, use the first one
228 return seekpoint_pair_t( *it_begin, Seekpoint() );
229
6. assign: Assigning: it_before = it_middle.
230 iterator it_before = it_middle;
7. assign: Assigning: <temporary> = it_middle.
8. assign: Assigning: it_after = (it_middle == it_end) ? __gnu_cxx::__normal_iterator<mkv::SegmentSeeker::Seekpoint const *, std::vector<mkv::SegmentSeeker::Seekpoint, std::allocator<mkv::SegmentSeeker::Seekpoint> > >(it_middle) : mkv::SegmentSeeker::get_seekpoints_around(long, std::vector<mkv::SegmentSeeker::Seekpoint, std::allocator<mkv::SegmentSeeker::Seekpoint> > const &)::iterator const(<unnamed>::next_(it_middle)).
231 iterator it_after = it_middle == it_end ? it_middle : next_( it_middle ) ;
232
CID 1437923: (#1 of 1): Using invalid iterator (INVALIDATE_ITERATOR)
9. deref_iterator: Dereferencing iterator it_before though it is already past the end of its container.
233 return seekpoint_pair_t( *it_before,
234 it_after == it_end ? Seekpoint() : *it_after
235 );