summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2011-08-26 10:51:26 +0000
committerGordon Sim <gsim@apache.org>2011-08-26 10:51:26 +0000
commit49a80ddccc7152c06861106301d18e4a5d3a1660 (patch)
tree3a3c51fc08e011528cafe562cff7f2e87f3e0b8a /cpp
parent39d2d6b2fee0da6df2afb5a6b105ed24c5b3925d (diff)
downloadqpid-python-49a80ddccc7152c06861106301d18e4a5d3a1660.tar.gz
QPID-3455: Don't treat unspecified frame size as implying the minimum value. Prevent infinite loop when unable to decode frame in SASL security layer.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1162060 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/qpid/broker/ConnectionHandler.cpp2
-rw-r--r--cpp/src/qpid/sys/cyrus/CyrusSecurityLayer.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/ConnectionHandler.cpp b/cpp/src/qpid/broker/ConnectionHandler.cpp
index 948aa04417..015002a70c 100644
--- a/cpp/src/qpid/broker/ConnectionHandler.cpp
+++ b/cpp/src/qpid/broker/ConnectionHandler.cpp
@@ -192,7 +192,7 @@ void ConnectionHandler::Handler::secureOk(const string& response)
void ConnectionHandler::Handler::tuneOk(uint16_t /*channelmax*/,
uint16_t framemax, uint16_t heartbeat)
{
- connection.setFrameMax(framemax);
+ if (framemax) connection.setFrameMax(framemax);
connection.setHeartbeatInterval(heartbeat);
}
diff --git a/cpp/src/qpid/sys/cyrus/CyrusSecurityLayer.cpp b/cpp/src/qpid/sys/cyrus/CyrusSecurityLayer.cpp
index 3d868da64b..249b769051 100644
--- a/cpp/src/qpid/sys/cyrus/CyrusSecurityLayer.cpp
+++ b/cpp/src/qpid/sys/cyrus/CyrusSecurityLayer.cpp
@@ -57,6 +57,7 @@ size_t CyrusSecurityLayer::decode(const char* input, size_t size)
copied += count;
decodeBuffer.position += count;
size_t decodedSize = codec->decode(decodeBuffer.data, decodeBuffer.position);
+ if (decodedSize == 0) break;
if (decodedSize < decodeBuffer.position) {
::memmove(decodeBuffer.data, decodeBuffer.data + decodedSize, decodeBuffer.position - decodedSize);
}