From d369368ac30ffe6bb59377c03de4310e67578dd9 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Thu, 29 Mar 2018 21:02:32 -0400 Subject: [PATCH] Schema: Extra sanity check for [elseif] tags Probably not technically necessary as long as conditions are processed in order However, I think it's nice to play it safe --- src/serialization/tag.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/serialization/tag.cpp b/src/serialization/tag.cpp index e7441bf29614..279c70a2c1bf 100644 --- a/src/serialization/tag.cpp +++ b/src/serialization/tag.cpp @@ -557,10 +557,12 @@ void class_tag::add_filter(const config& cond_cfg) } int i = 1; for(auto elseif_cfg : cond_cfg.child_range("elseif")) { - config elseif_filter = elseif_cfg; + config elseif_filter = elseif_cfg, old_else_filter = else_filter; elseif_filter.clear_children("then"); - conditions_.emplace_back(elseif_cfg.child("then"), elseif_filter); else_filter.add_child("not", elseif_filter); + // Ensure it won't match for any of the preceding cases, either + elseif_filter.append_children(old_else_filter); + conditions_.emplace_back(elseif_cfg.child("then"), elseif_filter); const std::string name = formatter() << get_name() << "[elseif " << i++ << "]"; conditions_.back().set_name(name); }