You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Sebb (JIRA)" <ji...@apache.org> on 2010/07/11 02:00:50 UTC

[jira] Created: (NET-329) TelnetInoutStream#__read() bug in the __receiveState handling for the _STATE_IAC state.

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.


[jira] Commented: (NET-329) TelnetInoutStream#__read() bug in the __receiveState handling for the _STATE_IAC state.

Posted by "Sebb (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/NET-329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12887125#action_12887125 ] 

Sebb commented on NET-329:
--------------------------

The proposed solution means that if IAC is followed by a command character other than  the ones tested in the switch then both will be swallowed.

This seems to be OK as it just means that those commands are not handled. I.e. they are all treated as IAC-NOP.

> 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.


[jira] Resolved: (NET-329) TelnetInoutStream#__read() bug in the __receiveState handling for the _STATE_IAC state.

Posted by "Sebb (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/NET-329?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sebb resolved NET-329.
----------------------

    Fix Version/s: 2.1
       Resolution: Fixed

> 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
>             Fix For: 2.1
>
>
> 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.