Skip to content

Commit

Permalink
Fix crash if a tag has conditions but no subtags
Browse files Browse the repository at this point in the history
  • Loading branch information
CelticMinstrel committed Mar 16, 2018
1 parent 6558669 commit 465d9e6
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 14 deletions.
18 changes: 5 additions & 13 deletions src/serialization/tag.cpp
Expand Up @@ -541,15 +541,11 @@ bool class_condition::matches(const config& cfg) const
void class_tag::tag_iterator::init(const class_tag& base_tag)
{
current = base_tag.tags_.begin();
if(current != base_tag.tags_.end()) {
condition_queue.push(&base_tag);
}
condition_queue.push(&base_tag);
}

void class_tag::tag_iterator::increment()
{
++current;
while(current== condition_queue.front()->tags_.end()) {
void class_tag::tag_iterator::ensure_valid_or_end() {
while(current == condition_queue.front()->tags_.end()) {
condition_queue.pop();
if(condition_queue.empty()) {
return;
Expand All @@ -563,14 +559,10 @@ void class_tag::tag_iterator::increment()
void class_tag::key_iterator::init(const class_tag& base_tag)
{
current = base_tag.keys_.begin();
if(current != base_tag.keys_.end()) {
condition_queue.push(&base_tag);
}
condition_queue.push(&base_tag);
}

void class_tag::key_iterator::increment()
{
++current;
void class_tag::key_iterator::ensure_valid_or_end() {
while(current == condition_queue.front()->keys_.end()) {
condition_queue.pop();
if(condition_queue.empty()) {
Expand Down
8 changes: 7 additions & 1 deletion src/serialization/tag.hpp
Expand Up @@ -270,14 +270,20 @@ class class_tag
{
init(base_tag);
push_new_tag_conditions(base_tag);
ensure_valid_or_end();
}
// Construct an end iterator
// That weird expression is to get a reference to an "invalid" config.
iterator() : match(config().child("a")) {}
private:
friend class boost::iterator_core_access;
void init(const class_tag& base_tag);
void increment();
void ensure_valid_or_end();
void increment()
{
++current;
ensure_valid_or_end();
}
void push_new_tag_conditions(const class_tag& tag)
{
for(const auto& condition : tag.conditions_) {
Expand Down

0 comments on commit 465d9e6

Please sign in to comment.