summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-05-15 12:48:34 +0000
committerGordon Sim <gsim@apache.org>2013-05-15 12:48:34 +0000
commit7c3d0bd28828694c8b5d905a4418808ee2d89b9a (patch)
tree4cf1025f614494026068f6834a1bf3f706fab138 /cpp
parentbb320784c58b2d412c65291998d67b39cc94ee55 (diff)
downloadqpid-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.cpp2
-rwxr-xr-xcpp/src/tests/interlink_tests.py31
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()})