Hey,
I'm implementing message disposition in node-amqp10 presently, and just ran
into a crash taking down qpidd. I imagine it's a bounds issue related to
the first and last values for the disposition frame, in my particular case
I've only sent two messages and I'm sending dispositions for each
individualls with first/last pairs: (0, 0), (1, 1).

Here's the backtrace:

Program received signal SIGSEGV, Segmentation fault.
pn_do_disposition (transport=0x7fffe4002fa0, frame_type=<optimized out>,
channel=<optimized out>,
    args=<optimized out>, payload=<optimized out>)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/transport/transport.c:1487
1487      pn_delivery_t *delivery = pni_delivery_map_get(deliveries, id);
(gdb) bt
#0  pn_do_disposition (transport=0x7fffe4002fa0, frame_type=<optimized
out>, channel=<optimized out>,
    args=<optimized out>, payload=<optimized out>)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/transport/transport.c:1487
#1  0x00007ffff430ea53 in pni_dispatch_action (payload=0x7fffffffd150,
args=0x7fffe4003190,
    channel=<optimized out>, frame_type=0 '\000', lcode=<optimized out>,
transport=0x7fffe4002fa0)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/dispatcher/dispatcher.c:74
#2  pni_dispatch_frame (args=0x7fffe4003190, transport=0x7fffe4002fa0,
frame=...)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/dispatcher/dispatcher.c:116
#3  pn_dispatcher_input (transport=transport@entry=0x7fffe4002fa0,
bytes=0x7fffe4009400 "", available=0,
    batch=batch@entry=true, halt=halt@entry=0x7fffe4003122)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/dispatcher/dispatcher.c:135
#4  0x00007ffff4314fbc in pn_input_read_amqp (transport=0x7fffe4002fa0,
layer=<optimized out>,
    bytes=<optimized out>, available=<optimized out>)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/transport/transport.c:1705
#5  0x00007ffff431507a in transport_consume (transport=transport@entry
=0x7fffe4002fa0)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/transport/transport.c:1637
#6  0x00007ffff4317ed2 in pn_transport_process
(transport=transport@entry=0x7fffe4002fa0,

    size=<optimized out>, size@entry=23)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/transport/transport.c:2701
#7  0x00007ffff4317feb in pn_transport_input (transport=0x7fffe4002fa0,
    bytes=0x7ffff7e1f027 "\177\377\377\377R", available=0)
    at
/home/mbroadst/Development/qpid-proton/proton-c/src/transport/transport.c:1609
#8  0x00007ffff458b273 in qpid::broker::amqp::Connection::decode(char
const*, unsigned long) ()
   from /usr/lib/x86_64-linux-gnu/qpid/daemon/amqp.so
#9  0x00007ffff74a5938 in
qpid::sys::AsynchIOHandler::readbuff(qpid::sys::AsynchIO&,
qpid::sys::AsynchIOBufferBase*) () from
/usr/lib/x86_64-linux-gnu/libqpidcommon.so.2
#10 0x00007ffff7425def in
qpid::sys::posix::AsynchIO::readable(qpid::sys::DispatchHandle&) ()
   from /usr/lib/x86_64-linux-gnu/libqpidcommon.so.2
#11 0x00007ffff74a94b3 in
qpid::sys::DispatchHandle::processEvent(qpid::sys::Poller::EventType) ()
   from /usr/lib/x86_64-linux-gnu/libqpidcommon.so.2
#12 0x00007ffff7449c7a in qpid::sys::Poller::run() () from
/usr/lib/x86_64-linux-gnu/libqpidcommon.so.2
#13 0x00007ffff79cc600 in qpid::broker::Broker::run() () from
/usr/lib/x86_64-linux-gnu/libqpidbroker.so.2
#14 0x00000000004054dc in
qpid::broker::QpiddBroker::execute(qpid::broker::QpiddOptions*) ()
#15 0x0000000000408d34 in qpid::broker::run_broker(int, char**, bool) ()
#16 0x00007ffff6812ec5 in __libc_start_main (main=0x404790 <main>, argc=3,
argv=0x7fffffffe658,
    init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>,
stack_end=0x7fffffffe648)
#17 0x00000000004049ac in _start ()

Cheers,
Matt

Reply via email to