Uploaded image for project: 'Qpid'
  1. Qpid
  2. QPID-7981

[Java Broker] [AMQP1.0] Handle erroneous null termini cases

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: qpid-java-broker-7.0.0
    • Component/s: Broker-J
    • Labels:
      None

      Description

      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.

      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)
      

      The second is if the Source (again not mandatory) is omitted:

      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)
      

      -Default source and target to empty objects appears to resolve the problem.-
      The protocol tests should be strengthen to cover these cases.

      (updated: 2017-10-24 - renamed JIRA title following discussions below to more accurately capture the problem)

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              kwall Keith Wall
            • Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: