Keith Wall created QPID-7981: -------------------------------- Summary: [Java Broker] [AMQP1.0] Protocol layer assumes source and target are not null. Key: QPID-7981 URL: https://issues.apache.org/jira/browse/QPID-7981 Project: Qpid Issue Type: Bug Components: Java Broker Reporter: Keith Wall
Testing the Broker against Rhea's {{example/helloworld.js}} shows that the AMQP 1.0 protocol layer fails in at least two places. The first is if the {{Target}} (not mandatory) is omitted from the incoming attach. {noformat} 2017-10-21 18:13:20,609 DEBUG [IO-/10.211.55.13:52033] (o.a.q.s.p.frame) - RECV[/10.211.55.13:52033|0] : Attach{name=7e65e0a0-961f-e941-b42b-262380143f76,handle=0,role=receiver,source=Source{address=examples}} 2017-10-21 18:13:20,622 DEBUG [IO-/10.211.55.13:52033] (o.a.q.s.p.v.LinkImpl) - Error attaching link java.lang.NullPointerException: null at org.apache.qpid.server.protocol.v1_0.SendingLinkEndpoint.createConsumerTarget(SendingLinkEndpoint.java:209) at org.apache.qpid.server.protocol.v1_0.SendingLinkEndpoint.attachReceived(SendingLinkEndpoint.java:636) at org.apache.qpid.server.protocol.v1_0.SendingLinkEndpoint.establishLink(SendingLinkEndpoint.java:352) at org.apache.qpid.server.protocol.v1_0.AbstractLinkEndpoint.receiveAttach(AbstractLinkEndpoint.java:131) at org.apache.qpid.server.protocol.v1_0.LinkImpl.attach(LinkImpl.java:106) at org.apache.qpid.server.protocol.v1_0.Session_1_0.receiveAttach(Session_1_0.java:210) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receiveAttach(AMQPConnection_1_0Impl.java:435) at org.apache.qpid.server.protocol.v1_0.type.transport.Attach.invoke(Attach.java:366) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:517) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$receive$0(AMQPConnection_1_0Impl.java:469) at java.security.AccessController.doPrivileged(Native Method) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receive(AMQPConnection_1_0Impl.java:463) at org.apache.qpid.server.protocol.v1_0.framing.FrameHandler.parse(FrameHandler.java:211) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$received$11(AMQPConnection_1_0Impl.java:1316) at java.security.AccessController.doPrivileged(Native Method) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:1291) at org.apache.qpid.server.transport.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:134) at org.apache.qpid.server.transport.NonBlockingConnection.processAmqpData(NonBlockingConnection.java:606) at org.apache.qpid.server.transport.NonBlockingConnectionTLSDelegate.processData(NonBlockingConnectionTLSDelegate.java:136) at org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:496) at org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:270) at org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:134) at org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:563) at org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:354) at org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:97) at org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:521) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.qpid.server.bytebuffer.QpidByteBuffer.lambda$null$0(QpidByteBuffer.java:1396) at java.lang.Thread.run(Thread.java:748) {noformat} The second is if the {{Source}} (again not mandatory) is omitted: {noformat} 2017-10-21 18:19:52,556 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.v.f.FrameHandler) - RECV 89 bytes 2017-10-21 18:19:52,557 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - RECV[/10.211.55.13:52035|0] : Attach{name=c2c65769-7d3b-5440-b8fb-f00badbddd0d,handle=1,role=sender,target=Target{address=examples},initialDeliveryCount=0} 2017-10-21 18:19:52,562 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - SEND[/10.211.55.13:52035|0] : Attach{name=c2c65769-7d3b-5440-b8fb-f00badbddd0d,handle=1,role=receiver,target=Target{address=examples,durable=none,capabilities=[REJECT_UNROUTABLE, DELAYED_DELIVERY]},unsettled={},maxMessageSize=1000000000,offeredCapabilities=[REJECT_UNROUTABLE, DELAYED_DELIVERY],properties={}} 2017-10-21 18:19:52,565 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - SEND[/10.211.55.13:52035|0] : Flow{nextIncomingId=0,incomingWindow=8192,nextOutgoingId=0,outgoingWindow=2048,handle=1,deliveryCount=0,linkCredit=20000,echo=false} 2017-10-21 18:19:52,566 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.v.f.FrameHandler) - RECV 0 bytes 2017-10-21 18:19:52,566 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.t.NonBlockingConnection) - Written 430 bytes 2017-10-21 18:19:52,568 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.t.NonBlockingConnection) - Read 0 byte(s) 2017-10-21 18:19:52,570 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.t.NonBlockingConnection) - Read 82 byte(s) 2017-10-21 18:19:52,571 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.v.f.FrameHandler) - RECV 53 bytes 2017-10-21 18:19:52,571 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - RECV[/10.211.55.13:52035|0] : Transfer{handle=1,deliveryId=0,deliveryTag=\x00,messageFormat=0,settled=false} 2017-10-21 18:19:52,580 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.QpidServiceLoader) - Found 3 implementations of interface org.apache.qpid.server.plugin.MessageFormat 2017-10-21 18:19:52,604 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.m.AbstractConfiguredObject) - authorise returned DEFER 2017-10-21 18:19:52,604 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.m.AbstractConfiguredObject) - authorise returned DEFER, returing default: ALLOWED 2017-10-21 18:19:52,608 WARN [IO-/10.211.55.13:52035] (o.a.q.s.p.v.f.FrameHandler) - Unexpected exception handling frame java.lang.NullPointerException: null at org.apache.qpid.server.protocol.v1_0.StandardReceivingLinkEndpoint.receiveDelivery(StandardReceivingLinkEndpoint.java:262) at org.apache.qpid.server.protocol.v1_0.AbstractReceivingLinkEndpoint.receiveTransfer(AbstractReceivingLinkEndpoint.java:163) at org.apache.qpid.server.protocol.v1_0.Session_1_0.receiveTransfer(Session_1_0.java:572) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receiveTransfer(AMQPConnection_1_0Impl.java:794) at org.apache.qpid.server.protocol.v1_0.type.transport.Transfer.invoke(Transfer.java:295) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:517) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$receive$0(AMQPConnection_1_0Impl.java:469) at java.security.AccessController.doPrivileged(Native Method) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receive(AMQPConnection_1_0Impl.java:463) at org.apache.qpid.server.protocol.v1_0.framing.FrameHandler.parse(FrameHandler.java:211) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$received$11(AMQPConnection_1_0Impl.java:1316) at java.security.AccessController.doPrivileged(Native Method) at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:1291) at org.apache.qpid.server.transport.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:134) at org.apache.qpid.server.transport.NonBlockingConnection.processAmqpData(NonBlockingConnection.java:606) at org.apache.qpid.server.transport.NonBlockingConnectionTLSDelegate.processData(NonBlockingConnectionTLSDelegate.java:136) at org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:496) at org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:270) at org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:134) at org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:563) at org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:354) at org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:97) at org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:521) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.qpid.server.bytebuffer.QpidByteBuffer.lambda$null$0(QpidByteBuffer.java:1396) at java.lang.Thread.run(Thread.java:748) {noformat} Default source and target to empty objects appears to resolve the problem. The protocol tests should be strengthen to cover these cases/ -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org