summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/framing/FieldTable.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2008-05-01 15:28:12 +0000
committerGordon Sim <gsim@apache.org>2008-05-01 15:28:12 +0000
commit6c6529551ad6dd8b768067ed097d0a0bc742e6b0 (patch)
treecfba31b87d5b14d7345e9cdbac4530cd5a26c6bd /cpp/src/qpid/framing/FieldTable.cpp
parent21add4795ac36d76a8b2f47e442c3250d7d9114c (diff)
downloadqpid-python-6c6529551ad6dd8b768067ed097d0a0bc742e6b0.tar.gz
QPID-989: fix decode of zero sized map
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@652558 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/framing/FieldTable.cpp')
-rw-r--r--cpp/src/qpid/framing/FieldTable.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/cpp/src/qpid/framing/FieldTable.cpp b/cpp/src/qpid/framing/FieldTable.cpp
index 1f8ffa72bc..bd20c10c37 100644
--- a/cpp/src/qpid/framing/FieldTable.cpp
+++ b/cpp/src/qpid/framing/FieldTable.cpp
@@ -132,19 +132,21 @@ void FieldTable::encode(Buffer& buffer) const{
void FieldTable::decode(Buffer& buffer){
uint32_t len = buffer.getLong();
- uint32_t available = buffer.available();
- uint32_t count = buffer.getLong();
- if (available < len)
- throw IllegalArgumentException(QPID_MSG("Not enough data for field table."));
- uint32_t leftover = available - len;
- while(buffer.available() > leftover && count--){
- std::string name;
- ValuePtr value(new FieldValue);
-
- buffer.getShortString(name);
- value->decode(buffer);
- values[name] = ValuePtr(value);
- }
+ if (len) {
+ uint32_t available = buffer.available();
+ if (available < len)
+ throw IllegalArgumentException(QPID_MSG("Not enough data for field table."));
+ uint32_t count = buffer.getLong();
+ uint32_t leftover = available - len;
+ while(buffer.available() > leftover && count--){
+ std::string name;
+ ValuePtr value(new FieldValue);
+
+ buffer.getShortString(name);
+ value->decode(buffer);
+ values[name] = ValuePtr(value);
+ }
+ }
}