From 7c3d0bd28828694c8b5d905a4418808ee2d89b9a Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 15 May 2013 12:48:34 +0000 Subject: QPID-4846: prevent assertion when translating empty 0-10 message content into 1.0 git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1482795 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/amqp/Translation.cpp | 2 +- cpp/src/tests/interlink_tests.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) (limited to 'cpp') diff --git a/cpp/src/qpid/broker/amqp/Translation.cpp b/cpp/src/qpid/broker/amqp/Translation.cpp index 9d34e71e04..3191ff0a8a 100644 --- a/cpp/src/qpid/broker/amqp/Translation.cpp +++ b/cpp/src/qpid/broker/amqp/Translation.cpp @@ -230,7 +230,7 @@ void Translation::write(OutgoingFromQueue& out) qpid::amqp::MessageEncoder encoder(&buffer[0], buffer.size()); encoder.writeProperties(properties); encoder.writeApplicationProperties(applicationProperties); - encoder.writeBinary(content, &qpid::amqp::message::DATA); + if (content.size()) encoder.writeBinary(content, &qpid::amqp::message::DATA); out.write(&buffer[0], encoder.getPosition()); } else { QPID_LOG(error, "Could not write message data in AMQP 1.0 format"); diff --git a/cpp/src/tests/interlink_tests.py b/cpp/src/tests/interlink_tests.py index 1e7262051a..8886e63029 100755 --- a/cpp/src/tests/interlink_tests.py +++ b/cpp/src/tests/interlink_tests.py @@ -107,6 +107,37 @@ class AmqpBrokerTest(BrokerTest): def test_translate2(self): self.send_and_receive(send_config=Config(self.broker, version="amqp0-10")) + 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 + send_cmd = ["qpid-send", + "--broker", sconfig.url, + "--address=%s" % sconfig.address, + "--connection-options={protocol:%s}" % sconfig.version, + "--content-size=0", + "--messages=1", + "-P", "my-header=abc" + ] + sender = self.popen(send_cmd) + sender.wait() + receive_cmd = ["qpid-receive", + "--broker", rconfig.url, + "--address=%s" % rconfig.address, + "--connection-options={protocol:%s}" % rconfig.version, + "--messages=1", + "--print-content=false", "--print-headers=true" + ] + receiver = self.popen(receive_cmd, stdout=PIPE) + l = receiver.stdout.read() + assert "my-header:abc" in l + receiver.wait() + + def test_translate_empty_1(self): + self.send_and_receive_empty(recv_config=Config(self.broker, version="amqp0-10")) + + def test_translate_empty_2(self): + self.send_and_receive_empty(send_config=Config(self.broker, version="amqp0-10")) + def test_domain(self): brokerB = self.amqp_broker() self.agent.create("domain", "BrokerB", {"url":brokerB.host_port()}) -- cgit v1.2.1