[ 
https://issues.apache.org/jira/browse/QPID-7020?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Moravec closed QPID-7020.
-------------------------------
    Assignee: Pavel Moravec

> 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
>            Assignee: Pavel Moravec
>             Fix For: qpid-cpp-next
>
>
> 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-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to