Bug 1059785 - [amqp1.0] Client is not finished when incorrect type is given for a property value
Summary: [amqp1.0] Client is not finished when incorrect type is given for a property ...
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat Enterprise MRG
Classification: Red Hat
Component: qpid-cpp
Version: Development
Hardware: Unspecified
OS: Unspecified
medium
low
Target Milestone: 3.0
: ---
Assignee: Gordon Sim
QA Contact: Ernie
URL:
Whiteboard:
Depends On:
Blocks: 1010399
TreeView+ depends on / blocked
 
Reported: 2014-01-30 16:14 UTC by Petr Matousek
Modified: 2015-01-21 12:56 UTC (History)
6 users (show)

Fixed In Version: qpid-cpp-0.22-35
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2015-01-21 12:56:01 UTC
Target Upstream Version:


Attachments (Terms of Use)


Links
System ID Priority Status Summary Last Updated
Apache JIRA QPID-5529 None None None Never
Red Hat Bugzilla 975444 None None None Never

Internal Links: 975444

Description Petr Matousek 2014-01-30 16:14:21 UTC
Description of problem:

When incorrect type is given for a property value, (ie. string
instead of timestamp), sender's application never ends its execution, ie: 

# $cppapi/spout --connection-options "{  protocol : 'amqp1.0' }"
--property "x-amqp-absolute-expiry-time=test"  amq.direct
invalid conversion: Cannot convert test
(/builddir/build/BUILD/qpid-0.22/cpp/src/qpid/types/Variant.cpp:132)
<client not finished> 

Although the exception is expected, the application shall end its
execution.

Version-Release number of selected component (if applicable):
qpid-cpp-*-0.22-33

How reproducible:
100%

Steps to Reproduce:
1. ./spout --connection-options "{  protocol : 'amqp1.0' }"  --property "x-amqp-group-sequence=test"  amq.direct

OR
1.  qpid-send --connection-options "{  protocol : 'amqp1.0' }"  --property "x-amqp-absolute-expiry-time=test"  -a amq.direct

etc.

Actual results:
Client is not finished when incorrect type is given for a property value.

Expected results:
Client reports an exception and ends its execution, return value is non-zero.

Additional info:
stack trace:
Thread 2 (Thread 0x7fecb5aac700 (LWP 3819)):
#0  0x0000003a326e9163 in epoll_wait () at
../sysdeps/unix/syscall-template.S:82
#1  0x00000032dcf4c1ed in qpid::sys::Poller::wait (this=0x1bf0220,
timeout=...) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/sys/epoll/EpollPoller.cpp:566
#2  0x00000032dcf4c8c1 in qpid::sys::Poller::run (this=0x1bf0220) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/sys/epoll/EpollPoller.cpp:518
#3  0x00000032dcf41bca in qpid::sys::(anonymous namespace)::runRunnable
(p=<value optimized out>) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/sys/posix/Thread.cpp:35
#4  0x0000003a32e079d1 in start_thread (arg=0x7fecb5aac700) at
pthread_create.c:301
#5  0x0000003a326e8b6d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:115

Thread 1 (Thread 0x7fecb5ef5840 (LWP 3818)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at
../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:183
#1  0x00000032dd83d4f9 in wait (this=0x1bf8150) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/sys/posix/Condition.h:63
#2  wait (this=0x1bf8150) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/sys/Monitor.h:41
#3  qpid::messaging::amqp::ConnectionContext::wait (this=0x1bf8150) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp:484

#4  0x00000032dd83eed9 in qpid::messaging::amqp::ConnectionContext::wait
(this=0x1bf8150, ssn=...) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp:494

#5  0x00000032dd840fd9 in
qpid::messaging::amqp::ConnectionContext::close (this=0x1bf8150) at
/usr/src/debug/qpid-0.22/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp:156

#6  0x0000000000409be4 in main ()

Comment 1 Gordon Sim 2014-01-31 12:27:29 UTC
Fixed upstream: https://svn.apache.org/r1563122

Comment 4 Ernie 2014-03-07 16:48:10 UTC
Verified for RHEL 6.5 i686
qpid-jca-0.22-2.el6.noarch
python-qpid-qmf-0.22-27.el6.i686
qpid-proton-c-devel-0.6-1.el6.i686
python-qpid-0.22-11.el6.noarch
qpid-proton-c-0.6-1.el6.i686
qpid-qmf-0.22-27.el6.i686
perl-qpid-0.22-7.el6.i686
qpid-snmpd-1.0.0-15.el6.i686
qpid-cpp-client-devel-0.22-35.el6.i686
qpid-cpp-server-linearstore-0.22-35.el6.i686
qpid-cpp-client-0.22-35.el6.i686
qpid-tools-0.22-8.el6.noarch
qpid-cpp-server-ha-0.22-35.el6.i686
qpid-java-client-0.22-6.el6.noarch
ruby-qpid-qmf-0.22-27.el6.i686
qpid-java-common-0.22-6.el6.noarch
qpid-cpp-server-0.22-35.el6.i686
qpid-jca-xarecovery-0.22-2.el6.noarch

Verified for RHEL 6.5 x86_64
qpid-cpp-server-0.22-35.el6.x86_64
python-qpid-0.22-11.el6.noarch
qpid-proton-c-0.6-1.el6.x86_64
qpid-cpp-client-0.22-35.el6.x86_64
qpid-qmf-0.22-27.el6.x86_64
python-qpid-qmf-0.22-27.el6.x86_64
qpid-tools-0.22-8.el6.noarch
qpid-cpp-client-devel-0.22-35.el6.x86_64

Output is now:
>./spout --connection-options "{ protocol : 'amqp1.0' }" --property "x-amqp-absolute-expiry-time=test"  amq.direct
invalid conversion: Cannot convert test (/builddir/build/BUILD/qpid-0.22/cpp/src/qpid/types/Variant.cpp:132)
>

and the spout client ends cleanly with return value of 1
>echo $?
1


Note You need to log in before you can comment on or make changes to this bug.