Examples of errors detected by the V783 diagnostic
V783. Possible dereference of invalid iterator 'X'.
Rosegarden
V783 Dereferencing of the invalid iterator 'i' might take place. IconStackedWidget.cpp 126
void
IconStackedWidget::slotPageSelect()
{
iconbuttons::iterator i = m_iconButtons.begin();
int index = 0;
while (((*i)->isChecked() == false) &&
(i != m_iconButtons.end())) {
++i;
index++;
}
m_pagePanel->setCurrentIndex(index);
}
Rosegarden
V783 Dereferencing of the invalid iterator 'beatTimeTs.end()' might take place. CreateTempoMapFromSegmentCommand.cpp 119
void
CreateTempoMapFromSegmentCommand::initialise(Segment *s)
{
....
std::vector<timeT> beatTimeTs;
....
for (int i = m_composition->...At(*beatTimeTs.begin() - 1) + 1;
i <= m_composition->...At(*beatTimeTs.end() - 1); ++i){
....
}
Similar errors can be found in some other places:
- V783 Dereferencing of the invalid iterator 'm_segments.end()' might take place. StaffHeader.cpp 250
0 A.D.
V783 CWE-119 Dereferencing of the invalid iterator 'segments.end()' might take place. CCmpRallyPointRenderer.cpp 1290
void CCmpRallyPointRenderer::MergeVisibilitySegments(
std::deque<SVisibilitySegment>& segments)
{
....
segments.erase(segments.end());
....
}
qdEngine
V783 [CWE-119, CERT-CTR51-CPP] Dereferencing of the invalid iterator 'it1' might take place. qd_condition_group.cpp 58
bool qdConditionGroup::remove_condition(int condition_id)
{
for(conditions_container_t::iterator it = conditions_.begin();
it != conditions_.end();
++it)
{
if(*it > condition_id)
(*it)--;
}
conditions_container_t::iterator it1 = std::find(conditions_.begin(),
conditions_.end(),
condition_id);
if(it1 != conditions_.end())
return false;
conditions_.erase(it1);
return true;
}