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

[Java Broker] In AMQP 1.0 gracefully handle non-compliant performatives

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • qpid-java-broker-7.0.0
    • Broker-J
    • None

    Description

      Currently the amqp 1.0 codec does not enforce mandatory fields. Often this causes problems later in the code like NullPointerExceptions
      One example is when sending an empty Begin without any of the mandatory fields:

      2017-04-07 14:46:55,804 DEBUG [IO-/127.0.0.1:39032] (o.a.q.s.p.frame) - RECV[/127.0.0.1:39032|37] : Begin{}
      2017-04-07 14:46:55,805 WARN  [IO-/127.0.0.1:39032] (o.a.q.s.p.v.f.FrameHandler) - Unexpected exception handling frame
      java.lang.NullPointerException: null
              at org.apache.qpid.server.protocol.v1_0.Session_1_0.<init>(Session_1_0.java:182)
              at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receiveBegin(AMQPConnection_1_0Impl.java:622)
              at org.apache.qpid.server.protocol.v1_0.type.transport.Begin.invoke(Begin.java:224)
              at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receive(AMQPConnection_1_0Impl.java:318)
              at org.apache.qpid.server.protocol.v1_0.framing.FrameHandler.parse(FrameHandler.java:167)
              at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl$9.run(AMQPConnection_1_0Impl.java:1195)
              at java.security.AccessController.doPrivileged(Native Method)
              at org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:1168)
              at org.apache.qpid.server.transport.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:129)
              at org.apache.qpid.server.transport.NonBlockingConnection.processAmqpData(NonBlockingConnection.java:592)
              at org.apache.qpid.server.transport.NonBlockingConnectionPlainDelegate.processData(NonBlockingConnectionPlainDelegate.java:58)
              at org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:482)
              at org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:269)
              at org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:124)
              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:1142)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
              at java.lang.Thread.run(Thread.java:745)
      2017-04-07 14:46:55,808 DEBUG [IO-/127.0.0.1:39032] (o.a.q.s.p.frame) - SEND[/127.0.0.1:39032|0] : Close{error=Error{condition=connection-forced,description=java.lang.NullPointerException}}
      

      The correct behaviour would be to close the connection with a decode-error

      Attachments

        Activity

          People

            Unassigned Unassigned
            lorenz.quack Lorenz Quack
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: