Robbie Gemmell created QPID-6193:
------------------------------------

             Summary: [Java broker] AMQP 1.0 Open frames with channel-max above 
the signed short range leads to failure
                 Key: QPID-6193
                 URL: https://issues.apache.org/jira/browse/QPID-6193
             Project: Qpid
          Issue Type: Bug
          Components: Java Broker
    Affects Versions: 0.30
            Reporter: Robbie Gemmell


The broker defaults channel-max to 255 or whatever has been configured.

When processing the Open frame sent by the peer, the broker attempts to use the 
sent channel-max value if it is lower than the configured default.
{noformat}
    public synchronized void receiveOpen(short channel, Open open)
    {

        _channelMax = open.getChannelMax() == null ? _channelMax
                : open.getChannelMax().shortValue() < _channelMax
                        ? open.getChannelMax().shortValue()
                        : _channelMax;

        if (_receivingSessions == null)
        {
            _receivingSessions = new SessionEndpoint[_channelMax + 1];
            _sendingSessions = new SessionEndpoint[_channelMax + 1];
        }
{noformat}

The logic doesnt handle channel-max being an unsigned short, meaning its use of 
getChannelMax().shortValue() may yield negative values for those outwith the 
signed range upper limit. 

For example, if the peer sends 65535 (possibly be default due to setting a 
later field in its Open frame) this will yield -1, which then has 1 added to it 
to create a 0-length array, leading to ArrayIndexOutOfBoundsException when the 
first Begin frame arrives. The following is output to stdout when this occurs:

{noformat}
[Broker] BRK-1004 : Qpid Broker Ready
00 53 11 c0 0b 05 40 52 01 43 43 70 00 00 04 00 
java.lang.ArrayIndexOutOfBoundsException: 0
        at 
org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receiveBegin(ConnectionEndpoint.java:569)
        at org.apache.qpid.amqp_1_0.type.transport.Begin.invoke(Begin.java:226)
        at 
org.apache.qpid.amqp_1_0.transport.ConnectionEndpoint.receive(ConnectionEndpoint.java:802)
        at 
org.apache.qpid.amqp_1_0.framing.FrameHandler.parse(FrameHandler.java:241)
        at 
org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL$4.run(ProtocolEngine_1_0_0_SASL.java:384)
        at 
org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL$4.run(ProtocolEngine_1_0_0_SASL.java:380)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
        at 
org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL.received(ProtocolEngine_1_0_0_SASL.java:379)
        at 
org.apache.qpid.server.protocol.v1_0.ProtocolEngine_1_0_0_SASL.received(ProtocolEngine_1_0_0_SASL.java:66)
        at 
org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:153)
        at 
org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:51)
        at 
org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:161)
        at java.lang.Thread.run(Thread.java:745)
{noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to