diff options
author | louiz’ <louiz@louiz.org> | 2020-02-25 23:30:29 +0100 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2020-02-25 23:30:29 +0100 |
commit | c35e1aaa768c2d331ce4699245f820d6bbfcea7c (patch) | |
tree | 3b697303f3a5cc3ecb51da80612deef1775b5d76 | |
parent | 440e04c6ba1dfae2d6fbb55b120763e3d0da6cd1 (diff) | |
parent | 4b0fb8b37e5d2ff79da1c568ca38d4c8905dc9eb (diff) | |
download | biboumi-c35e1aaa768c2d331ce4699245f820d6bbfcea7c.tar.gz biboumi-c35e1aaa768c2d331ce4699245f820d6bbfcea7c.tar.bz2 biboumi-c35e1aaa768c2d331ce4699245f820d6bbfcea7c.tar.xz biboumi-c35e1aaa768c2d331ce4699245f820d6bbfcea7c.zip |
Merge branch 'v8'
-rw-r--r-- | src/identd/identd_server.hpp | 1 | ||||
-rw-r--r-- | src/identd/identd_socket.cpp | 8 | ||||
-rw-r--r-- | src/network/tcp_client_socket_handler.cpp | 6 | ||||
-rw-r--r-- | src/network/tcp_client_socket_handler.hpp | 2 |
4 files changed, 11 insertions, 6 deletions
diff --git a/src/identd/identd_server.hpp b/src/identd/identd_server.hpp index b1c8ec8..55fe225 100644 --- a/src/identd/identd_server.hpp +++ b/src/identd/identd_server.hpp @@ -24,6 +24,7 @@ class IdentdServer: public TcpSocketServer<IdentdSocket> if (this->poller->is_managing_socket(this->socket)) this->poller->remove_socket_handler(this->socket); ::close(this->socket); + this->sockets.clear(); } void clean() { diff --git a/src/identd/identd_socket.cpp b/src/identd/identd_socket.cpp index 92cd80b..7688bbe 100644 --- a/src/identd/identd_socket.cpp +++ b/src/identd/identd_socket.cpp @@ -25,10 +25,12 @@ void IdentdSocket::parse_in_buffer(const std::size_t) std::istringstream line(this->in_buf.substr(0, line_end)); this->consume_in_buffer(line_end + 1); - uint16_t local_port; - uint16_t remote_port; + uint16_t local_port{}; + uint16_t remote_port{}; char sep; line >> local_port >> sep >> remote_port; + if (line.fail()) // Data did not match the expected format, ignore the line entirely + continue; const auto& xmpp = this->server.get_biboumi_component(); auto response = this->generate_answer(xmpp, local_port, remote_port); @@ -47,7 +49,7 @@ std::string IdentdSocket::generate_answer(const BiboumiComponent& biboumi, uint1 { for (const auto& pair: bridge->get_irc_clients()) { - if (pair.second->match_port_pairt(local, remote)) + if (pair.second->match_port_pair(local, remote)) { std::ostringstream os; os << local << " , " << remote << " : USERID : OTHER : " << hash_jid(bridge->get_bare_jid()) << "\r\n"; diff --git a/src/network/tcp_client_socket_handler.cpp b/src/network/tcp_client_socket_handler.cpp index 6f67f02..7d1029f 100644 --- a/src/network/tcp_client_socket_handler.cpp +++ b/src/network/tcp_client_socket_handler.cpp @@ -260,8 +260,10 @@ std::string TCPClientSocketHandler::get_port() const return this->port; } -bool TCPClientSocketHandler::match_port_pairt(const uint16_t local, const uint16_t remote) const +bool TCPClientSocketHandler::match_port_pair(const uint16_t local, const uint16_t remote) const { + if (!this->is_connected()) + return false; const auto remote_port = static_cast<uint16_t>(std::stoi(this->port)); - return this->is_connected() && local == this->local_port && remote == remote_port; + return local == this->local_port && remote == remote_port; } diff --git a/src/network/tcp_client_socket_handler.hpp b/src/network/tcp_client_socket_handler.hpp index 74caca9..38d8b84 100644 --- a/src/network/tcp_client_socket_handler.hpp +++ b/src/network/tcp_client_socket_handler.hpp @@ -34,7 +34,7 @@ class TCPClientSocketHandler: public TCPSocketHandler /** * Whether or not this connection is using the two given TCP ports. */ - bool match_port_pairt(const uint16_t local, const uint16_t remote) const; + bool match_port_pair(const uint16_t local, const uint16_t remote) const; protected: bool hostname_resolution_failed; |