qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF subversion and git services (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QPID-7020) uint16 AMQP0-10 message properties decoded as uint8
Date Sun, 24 Jan 2016 12:54:39 GMT

    [ 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: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message