commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sebb (JIRA)" <j...@apache.org>
Subject [jira] Created: (NET-329) TelnetInoutStream#__read() bug in the __receiveState handling for the _STATE_IAC state.
Date Sun, 11 Jul 2010 00:00:50 GMT
TelnetInoutStream#__read() bug in the __receiveState handling for the _STATE_IAC state.
---------------------------------------------------------------------------------------

                 Key: NET-329
                 URL: https://issues.apache.org/jira/browse/NET-329
             Project: Commons Net
          Issue Type: Sub-task
    Affects Versions: 2.0
            Reporter: Sebb


Moved from NET-89:

Also, in TelnetInputStream#__read() there is a bug in the __receiveState
handling for the _STATE_IAC state. When a second consecutive IAC (0x255) is
received to encode the single 0x255 character, read does not return 0x255 but
instead move on to reading the next char in the stream.

The current code reads:

{code}
case _STATE_IAC:
    switch (ch)
    {
    case TelnetCommand.WILL:
        __receiveState = _STATE_WILL;
        continue;
    case TelnetCommand.WONT:
        __receiveState = _STATE_WONT;
        continue;
    case TelnetCommand.DO:
        __receiveState = _STATE_DO;
        continue;
    case TelnetCommand.DONT:
        __receiveState = _STATE_DONT;
        continue;
    /* TERMINAL-TYPE option (start)*/
    case TelnetCommand.SB:
        __suboption_count = 0;
        __receiveState = _STATE_SB;
        continue;
    /* TERMINAL-TYPE option (end)*/
    case TelnetCommand.IAC:
        __receiveState = _STATE_DATA;
        break;
    default:
        break;
    }
    __receiveState = _STATE_DATA;
    continue;
case _STATE_WILL:
{code}

but it should be:

{code}
case _STATE_IAC:
    switch (ch)
    {
    case TelnetCommand.WILL:
        __receiveState = _STATE_WILL;
        continue;
    case TelnetCommand.WONT:
        __receiveState = _STATE_WONT;
        continue;
    case TelnetCommand.DO:
        __receiveState = _STATE_DO;
        continue;
    case TelnetCommand.DONT:
        __receiveState = _STATE_DONT;
        continue;
    /* TERMINAL-TYPE option (start)*/
    case TelnetCommand.SB:
        __suboption_count = 0;
        __receiveState = _STATE_SB;
        continue;
    /* TERMINAL-TYPE option (end)*/
    case TelnetCommand.IAC:
        __receiveState = _STATE_DATA;
        break; // exit to enclosing switch to return from read
    default:
        __receiveState = _STATE_DATA;           
        continue; // move on the next char
    }
    break; // exit and return from read
case _STATE_WILL:
{code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message