diff options
| author | Gordon Sim <gsim@apache.org> | 2013-05-15 12:48:34 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2013-05-15 12:48:34 +0000 |
| commit | 7c3d0bd28828694c8b5d905a4418808ee2d89b9a (patch) | |
| tree | 4cf1025f614494026068f6834a1bf3f706fab138 /cpp | |
| parent | bb320784c58b2d412c65291998d67b39cc94ee55 (diff) | |
| download | qpid-python-7c3d0bd28828694c8b5d905a4418808ee2d89b9a.tar.gz | |
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
Diffstat (limited to 'cpp')
| -rw-r--r-- | cpp/src/qpid/broker/amqp/Translation.cpp | 2 | ||||
| -rwxr-xr-x | cpp/src/tests/interlink_tests.py | 31 |
2 files changed, 32 insertions, 1 deletions
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()}) |
