Files
guru/net-im/biboumi/files/biboumi-9.0_rc1-split-cap-on-space.patch
Ronny (tastytea) Gutbrod 7b39f68de4 net-im/biboumi: Revbump 9.0_rc1-r1; Add CAP message patch.
Patches a bug that prevented connections to FreeNode.
From <https://lab.louiz.org/louiz/biboumi/-/commit/b98434b>.

Signed-off-by: Ronny (tastytea) Gutbrod <gentoo@tastytea.de>
2020-08-24 19:44:04 +02:00

71 lines
2.3 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From b98434b5d04d1ada9b24475e17ee8947d96ad1e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?louiz=E2=80=99?= <louiz@louiz.org>
Date: Sun, 16 Aug 2020 16:05:15 +0200
Subject: [PATCH] In CAP messages, handle the last arg as a list of
capabilities
Instead of just one. This fixes the issue of the "trailing whitespace" since we
now split it on ' '
Fix #3442
---
src/irc/irc_client.cpp | 25 ++++++++++++++-----------
tests/utils.cpp | 3 +++
2 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp
index 3ae5ac6..5f0d9b9 100644
--- a/src/irc/irc_client.cpp
+++ b/src/irc/irc_client.cpp
@@ -1340,19 +1340,22 @@ long int IrcClient::get_throttle_limit() const
void IrcClient::on_cap(const IrcMessage &message)
{
const auto& sub_command = message.arguments[1];
- const auto& cap = message.arguments[2];
- auto it = this->capabilities.find(cap);
- if (it == this->capabilities.end())
+ const auto& caps = utils::split(message.arguments[2], ' ', false);
+ for (const auto& cap: caps)
{
- log_warning("Received a CAP message for something we didnt ask, or that we already handled.");
- return;
+ auto it = this->capabilities.find(cap);
+ if (it == this->capabilities.end())
+ {
+ log_warning("Received a CAP message for something we didnt ask, or that we already handled: [", cap, "]");
+ return;
+ }
+ Capability& capability = it->second;
+ if (sub_command == "ACK")
+ capability.on_ack();
+ else if (sub_command == "NACK")
+ capability.on_nack();
+ this->capabilities.erase(it);
}
- Capability& capability = it->second;
- if (sub_command == "ACK")
- capability.on_ack();
- else if (sub_command == "NACK")
- capability.on_nack();
- this->capabilities.erase(it);
if (this->capabilities.empty())
this->cap_end();
}
diff --git a/tests/utils.cpp b/tests/utils.cpp
index 6de19f0..6151733 100644
--- a/tests/utils.cpp
+++ b/tests/utils.cpp
@@ -28,6 +28,9 @@ TEST_CASE("String split")
CHECK(splitted.size() == 2);
CHECK(splitted[0] == "");
CHECK(splitted[1] == "a");
+ splitted = utils::split("multi-prefix ", ' ');
+ CHECK(splitted[0] == "multi-prefix");
+ CHECK(splitted.size() == 1);
}
TEST_CASE("tolower")
--
2.26.2