mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-21 04:53:07 -04:00
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>
71 lines
2.3 KiB
Diff
71 lines
2.3 KiB
Diff
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 didn’t 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 didn’t 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
|
||
|