From ebbfc33fdf739e8f6f7a70cec6e3e34c9c5b2fce Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Fri, 20 Sep 2013 15:43:57 +0000 Subject: QPID-5149: truncate over large routing keys when translating from 1.0 to 0-10 git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1525043 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/amqp/Translation.cpp | 7 ++++++- qpid/cpp/src/tests/interlink_tests.py | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'qpid/cpp') diff --git a/qpid/cpp/src/qpid/broker/amqp/Translation.cpp b/qpid/cpp/src/qpid/broker/amqp/Translation.cpp index cf85c1f05a..2f15ff6658 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Translation.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/Translation.cpp @@ -260,7 +260,12 @@ boost::intrusive_ptr Translation dp->setPriority(message->getPriority()); if (message->isPersistent()) dp->setDeliveryMode(2); if (message->getRoutingKey().size()) { - dp->setRoutingKey(message->getRoutingKey()); + if (message->getRoutingKey().size() > std::numeric_limits::max()) { + //have to truncate routing key as it is specified to be a str8 + dp->setRoutingKey(message->getRoutingKey().substr(0,std::numeric_limits::max())); + } else { + dp->setRoutingKey(message->getRoutingKey()); + } props->getApplicationHeaders().setString(SUBJECT_KEY, message->getRoutingKey()); } diff --git a/qpid/cpp/src/tests/interlink_tests.py b/qpid/cpp/src/tests/interlink_tests.py index 1724607533..608d4ac890 100755 --- a/qpid/cpp/src/tests/interlink_tests.py +++ b/qpid/cpp/src/tests/interlink_tests.py @@ -128,6 +128,9 @@ class AmqpBrokerTest(BrokerTest): def test_translate2(self): self.send_and_receive(send_config=Config(self.broker, version="amqp0-10")) + def test_translate_with_large_routingkey(self): + self.send_and_receive(send_config=Config(self.broker, address="amq.topic/a.%s" % ("x" * 256), version="amqp1.0"), recv_config=Config(self.broker, address="amq.topic/a.*", version="amqp0-10"), wait_for_receiver=True) + def send_and_receive_empty(self, send_config=None, recv_config=None): sconfig = send_config or self.default_config rconfig = recv_config or self.default_config -- cgit v1.2.1