From f10f690cdd3ea96dc0f2700f9daea8127f5537bf Mon Sep 17 00:00:00 2001 From: Kenneth Anthony Giusti Date: Tue, 27 Apr 2010 15:19:14 +0000 Subject: QPID-2556: fix conversion of signed integers in maps and lists. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@938506 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qmf/engine/ValueImpl.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'cpp/src/qmf/engine/ValueImpl.cpp') diff --git a/cpp/src/qmf/engine/ValueImpl.cpp b/cpp/src/qmf/engine/ValueImpl.cpp index 72c68c420b..c58c28e166 100644 --- a/cpp/src/qmf/engine/ValueImpl.cpp +++ b/cpp/src/qmf/engine/ValueImpl.cpp @@ -121,10 +121,14 @@ void ValueImpl::initMap(const FieldTable& ft) case 0x22 : subval->setUint(fvalue.get()); break; } insert(name.c_str(), subval); - } else if ((amqType & 0xCF) == 0x01) { + } else if (amqType == 0x31) { // int64 Value* subval(new Value(TYPE_INT64)); subval->setInt64(fvalue.get()); insert(name.c_str(), subval); + } else if ((amqType & 0xCF) == 0x01) { // 0x01:int8, 0x11:int16, 0x21:int21 + Value* subval(new Value(TYPE_INT32)); + subval->setInt((int32_t)fvalue.get()); + insert(name.c_str(), subval); } else if (amqType == 0x85 || amqType == 0x95) { Value* subval(new Value(TYPE_LSTR)); subval->setString(fvalue.get().c_str()); @@ -233,15 +237,19 @@ void ValueImpl::initList(const List& fl) } else if ((amqType & 0xCF) == 0x02) { Value* subval(new Value(TYPE_UINT32)); switch (amqType) { - case 0x02 : subval->setUint(fvalue.get()); break; - case 0x12 : subval->setUint(fvalue.get()); break; - case 0x22 : subval->setUint(fvalue.get()); break; + case 0x02 : subval->setUint(fvalue.get()); break; // uint8 + case 0x12 : subval->setUint(fvalue.get()); break; // uint16 + case 0x22 : subval->setUint(fvalue.get()); break; // uint32 } appendToList(subval); - } else if ((amqType & 0xCF) == 0x01) { + } else if (amqType == 0x31) { // int64 Value* subval(new Value(TYPE_INT64)); subval->setInt64(fvalue.get()); appendToList(subval); + } else if ((amqType & 0xCF) == 0x01) { // 0x01:int8, 0x11:int16, 0x21:int32 + Value* subval(new Value(TYPE_INT32)); + subval->setInt((int32_t)fvalue.get()); + appendToList(subval); } else if (amqType == 0x85 || amqType == 0x95) { Value* subval(new Value(TYPE_LSTR)); subval->setString(fvalue.get().c_str()); -- cgit v1.2.1