mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-01 06:25:34 +00:00
[trac847] Don't increment invalid iterator
The problem was, it was increased after invalidating once before checking the condition again. It is probably harmless, but according to the letter not legal.
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
|
||||
//
|
||||
// Permission to use, copy, modify, and/or distribute this software for any
|
||||
@@ -50,7 +49,7 @@ ResponseScrubber::Category ResponseScrubber::addressCheck(
|
||||
unsigned int
|
||||
ResponseScrubber::scrubSection(Message& message,
|
||||
const vector<const Name*>& names,
|
||||
const NameComparisonResult::NameRelation connection,
|
||||
const NameComparisonResult::NameRelation connection,
|
||||
const Message::Section section)
|
||||
{
|
||||
unsigned int count = 0; // Count of RRsets removed
|
||||
@@ -74,22 +73,23 @@ ResponseScrubber::scrubSection(Message& message,
|
||||
|
||||
// Start looking at the remaining entries in the section.
|
||||
removed = false;
|
||||
for (; (i != message.endSection(section)) && (!removed); ++i) {
|
||||
for (; i != message.endSection(section); ++i) {
|
||||
|
||||
// Loop through the list of names given and see if any are in the
|
||||
// given relationship with the QNAME of this RRset
|
||||
bool nomatch = true;
|
||||
for (vector<const Name*>::const_iterator n = names.begin();
|
||||
((n != names.end()) && nomatch); ++n) {
|
||||
((n != names.end())); ++n) {
|
||||
NameComparisonResult result = (*i)->getName().compare(**n);
|
||||
NameComparisonResult::NameRelation relationship =
|
||||
result.getRelation();
|
||||
if ((relationship == NameComparisonResult::EQUAL) ||
|
||||
(relationship == connection)) {
|
||||
|
||||
|
||||
// RRset in the specified relationship, so a match has
|
||||
// been found
|
||||
nomatch = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +98,7 @@ ResponseScrubber::scrubSection(Message& message,
|
||||
message.removeRRset(section, i);
|
||||
++count; // One more RRset removed
|
||||
removed = true; // Something was removed
|
||||
break; // It invalidated the iterators, start again
|
||||
} else {
|
||||
|
||||
// There was a match so this is one more entry we can skip next
|
||||
|
Reference in New Issue
Block a user