[
https://issues.apache.org/jira/browse/QPID-7020?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15114297#comment-15114297
]
ASF subversion and git services commented on QPID-7020:
-------------------------------------------------------
Commit 1726487 from [~pmoravec] in branch 'qpid/trunk'
[ https://svn.apache.org/r1726487 ]
QPID-7020: uint16 AMQP0-10 message properties decoded as uint8
> uint16 AMQP0-10 message properties decoded as uint8
> ---------------------------------------------------
>
> Key: QPID-7020
> URL: https://issues.apache.org/jira/browse/QPID-7020
> Project: Qpid
> Issue Type: Bug
> Components: C++ Broker
> Affects Versions: qpid-cpp-0.34
> Reporter: Pavel Moravec
>
> Description of problem:
> MessageTransfer::processProperties has trivial typo in decoding uin16 message
> property type as uint8 variant:
> void MessageTransfer::processProperties(qpid::amqp::MapHandler& handler) const
> {
> ..
> switch (v.getType()) {
> case qpid::types::VAR_VOID:
> handler.handleVoid(key); break;
> case qpid::types::VAR_BOOL:
> handler.handleBool(key, v); break;
> case qpid::types::VAR_UINT8:
> handler.handleUint8(key, v); break;
> case qpid::types::VAR_UINT16:
> handler.handleUint8(key, v); break;
> ..
> See the latest line.
> Any attempt to call that line raises error:
> invalid conversion: Cannot convert from uint16 to uint8
> (/builddir/build/BUILD/qpid-cpp-0.34/src/qpid/types/Variant.cpp:280)
> One reproducer provided below.
> Version-Release number of selected component (if applicable):
> qpid-cpp-server-0.34-5.el6.x86_64
> How reproducible:
> 100%
> Steps to Reproduce:
> 1. Have this trivial program that creates queue message_queue, subscribes to
> the queue, bind to amq.match with x-match:any,number:10809 matcher rule:
> $ cat send_uint16_t.cpp
> #include <qpid/messaging/Connection.h>
> #include <qpid/messaging/Message.h>
> #include <qpid/messaging/Receiver.h>
> #include <qpid/messaging/Sender.h>
> #include <qpid/messaging/Session.h>
> #include <cstdlib>
> #include <iostream>
> #include <sstream>
> using namespace qpid::messaging;
> using namespace qpid::types;
> using std::stringstream;
> using std::string;
> int main(int argc, char** argv) {
> const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672";
>
> Connection connection(url, "");
> try {
> connection.open();
> Session session = connection.createSession();
> Receiver receiver = session.createReceiver("message_queue; {create:
> always, node:{type:queue, durable:false, x-bindings:[{exchange:'amq.match',
> queue:'message_queue', key:'key', arguments:{x-match:any,number:10809}}]}}");
> Sender sender = session.createSender("amq.match/key");
> Message msg("Some content");
> uint16_t number=10809;
> msg.setProperty("number", number);
> sender.send(msg);
> Message msg2 = receiver.fetch();
> std::cout << "Properties: " << msg2.getProperties() << std::endl
> << "Content: " << msg.getContent() << std::endl;
> session.close();
> connection.close();
> return 0;
> } catch(const std::exception& error) {
> std::cout << error.what() << std::endl;
> connection.close();
> }
> return 1;
> }
> 2. Compile it and run against a broker:
> g++ -Wall -lqpidclient -lqpidcommon -lqpidmessaging -lqpidtypes
> send_uint16_t.cpp -o send_uint16_t
> ./send_uint16_t
> 3. Check output and also qpid logs
> Actual results:
> output:
> 2016-01-24 13:46:30 [Client] warning Broker closed connection: 501, invalid
> conversion: Cannot convert from uint16 to uint8
> (/builddir/build/BUILD/qpid-cpp-0.34/src/qpid/types/Variant.cpp:280)
> framing-error: invalid conversion: Cannot convert from uint16 to uint8
> (/builddir/build/BUILD/qpid-cpp-0.34/src/qpid/types/Variant.cpp:280)
> qpid error:
> 2016-01-24 13:46:30 [Broker] error Connection exception: framing-error:
> invalid conversion: Cannot convert from uint16 to uint8
> (/builddir/build/BUILD/qpid-cpp-0.34/src/qpid/types/Variant.cpp:280)
> 2016-01-24 13:46:30 [Protocol] error Connection
> qpid.127.0.0.1:5672-127.0.0.1:33825 closed by error: invalid conversion:
> Cannot convert from uint16 to uint8
> (/builddir/build/BUILD/qpid-cpp-0.34/src/qpid/types/Variant.cpp:280)(501)
> Expected results:
> output:
> a message is received and printed to stdout
> qpid logs:
> no error
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]