From 78320e81ab4ac39b04ebd8fb759a62afd7f28a64 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 24 Jun 2026 13:46:06 +0100 Subject: Be more precise about protocol versions in spanningtree. --- modules/spanningtree/compat.cpp | 51 ++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 24 deletions(-) (limited to 'modules/spanningtree/compat.cpp') diff --git a/modules/spanningtree/compat.cpp b/modules/spanningtree/compat.cpp index 61359fde4..4285154d9 100644 --- a/modules/spanningtree/compat.cpp +++ b/modules/spanningtree/compat.cpp @@ -111,35 +111,38 @@ bool TreeSocket::PreProcessNewProtocolMessage(User*& who, std::string& cmd, Comm bool TreeSocket::PreProcessOldProtocolMessage(User*& who, std::string& cmd, CommandBase::Params& params) { - if (insp::casemapped_equals(cmd, "CHGHOST") || insp::casemapped_equals(cmd, "CHGIDENT") || insp::casemapped_equals(cmd, "CHGNAME")) + if (proto_version == PROTO_INSPIRCD_4) { - if (params.size() < 2) - return false; // Malformed. + if (insp::casemapped_equals(cmd, "CHGHOST") || insp::casemapped_equals(cmd, "CHGIDENT") || insp::casemapped_equals(cmd, "CHGNAME")) + { + if (params.size() < 2) + return false; // Malformed. - // CHG* and SET* were merged in v5. - cmd.replace(0, 3, "SET"); - } - else if (insp::casemapped_equals(cmd, "ENCAP")) - { - if (params.size() < 2) - return false; // Malformed. + // CHG* and SET* were merged in v5. + cmd.replace(0, 3, "SET"); + } + else if (insp::casemapped_equals(cmd, "ENCAP")) + { + if (params.size() < 2) + return false; // Malformed. - // : ENCAP [...]; - CommandBase::Params newparams(params.begin() + 2, params.end()); - if (!PreProcessOldProtocolMessage(who, params[1], newparams)) - return false; // Malformed. + // : ENCAP [...]; + CommandBase::Params newparams(params.begin() + 2, params.end()); + if (!PreProcessOldProtocolMessage(who, params[1], newparams)) + return false; // Malformed. - params.erase(params.begin() + 2, params.end()); - params.insert(params.end(), newparams.begin(), newparams.end()); - } - else if (insp::casemapped_equals(cmd, "IJOIN")) - { - if (params.size() < 3) - return false; // Malformed. + params.erase(params.begin() + 2, params.end()); + params.insert(params.end(), newparams.begin(), newparams.end()); + } + else if (insp::casemapped_equals(cmd, "IJOIN")) + { + if (params.size() < 3) + return false; // Malformed. - // : IJOIN [ ] - // ^^^^^^^^ New in 1207 - params.insert(params.begin() + 2, "0"); + // : IJOIN [ ] + // ^^^^^^^^ New in 1207 + params.insert(params.begin() + 2, "0"); + } } return true; } -- cgit v1.3.1-10-gc9f91