diff options
Diffstat (limited to 'Applications')
-rw-r--r-- | Applications/IRCClient/IRCClient.cpp | 24 | ||||
-rw-r--r-- | Applications/IRCClient/IRCClient.h | 3 |
2 files changed, 21 insertions, 6 deletions
diff --git a/Applications/IRCClient/IRCClient.cpp b/Applications/IRCClient/IRCClient.cpp index bf8d8c1119..2677fc9143 100644 --- a/Applications/IRCClient/IRCClient.cpp +++ b/Applications/IRCClient/IRCClient.cpp @@ -388,7 +388,7 @@ void IRCClient::handle_user_input_in_server(const String& input) return handle_user_command(input); } -bool IRCClient::is_nick_prefix(char ch) const +bool IRCClient::is_nick_prefix(char ch) { switch (ch) { case '@': @@ -401,6 +401,18 @@ bool IRCClient::is_nick_prefix(char ch) const return false; } +bool IRCClient::is_channel_prefix(char ch) +{ + switch (ch) { + case '&': + case '#': + case '+': + case '!': + return true; + } + return false; +} + static bool has_ctcp_payload(const StringView& string) { return string.length() >= 2 && string[0] == 0x01 && string[string.length() - 1] == 0x01; @@ -742,9 +754,10 @@ void IRCClient::handle_user_command(const String& input) if (command == "/TOPIC") { if (parts.size() < 2) return; + if (parts[1].is_empty()) + return; - // FIXME: channel name validation should be abstracted away into a validation function - if (parts[1].starts_with("&") || parts[1].starts_with("#") || parts[1].starts_with("+") || parts[1].starts_with("!")) { + if (is_channel_prefix(parts[1][0])) { if (parts.size() < 3) return; auto channel = parts[1]; @@ -763,9 +776,10 @@ void IRCClient::handle_user_command(const String& input) if (command == "/KICK") { if (parts.size() < 2) return; + if (parts[1].is_empty()) + return; - // FIXME: channel name validation should be abstracted away into a validation function - if (parts[1].starts_with("&") || parts[1].starts_with("#") || parts[1].starts_with("+") || parts[1].starts_with("!")) { + if (is_channel_prefix(parts[1][0])) { if (parts.size() < 3) return; auto channel = parts[1]; diff --git a/Applications/IRCClient/IRCClient.h b/Applications/IRCClient/IRCClient.h index b9eadecbea..b462f69a91 100644 --- a/Applications/IRCClient/IRCClient.h +++ b/Applications/IRCClient/IRCClient.h @@ -60,7 +60,8 @@ public: void part_channel(const String&); void change_nick(const String&); - bool is_nick_prefix(char) const; + static bool is_nick_prefix(char); + static bool is_channel_prefix(char); IRCWindow* current_window() { return aid_get_active_window(); } const IRCWindow* current_window() const { return aid_get_active_window(); } |