From 50ed4bea1348e2a8f7e2df82cb3148798862011c Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Mon, 23 Aug 2010 21:04:33 +0000 Subject: Check for and abort invalid catchup connections. Detect attempt to make a catch-up connection while we are not expecting an update. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@988312 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/cluster/Connection.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/cluster/Connection.cpp') diff --git a/cpp/src/qpid/cluster/Connection.cpp b/cpp/src/qpid/cluster/Connection.cpp index 923d66ad34..e76cebf68d 100644 --- a/cpp/src/qpid/cluster/Connection.cpp +++ b/cpp/src/qpid/cluster/Connection.cpp @@ -257,7 +257,7 @@ void Connection::closed() { close(); cluster.updateInClosed(); } - else if (catchUp) { + else if (catchUp && cluster.isExpectingUpdate()) { QPID_LOG(critical, cluster << " catch-up connection closed prematurely " << *this); cluster.leave(); } @@ -304,6 +304,10 @@ size_t Connection::decode(const char* data, size_t size) { const char* ptr = data; const char* end = data + size; if (catchUp) { // Handle catch-up locally. + if (!cluster.isExpectingUpdate()) { + QPID_LOG(error, "Rejecting unexpected catch-up connection."); + abort(); // Cluster is not expecting catch-up connections. + } bool wasOpen = connection->isOpen(); Buffer buf(const_cast(ptr), size); ptr += size; -- cgit v1.2.1