Justin M. McNutt: wrote :
<I've got this telnet packet that makes ethereal (and tethereal) hang when trying to 
decode it.  Thanks to editcap, I was able to show <that it is this packet and only 
this packet that is creating the problem (attached).


The problem seems to be in the Telnet dissector in the telnet_sub_option subroutine.
The following lines seems to cause this:

  /* Search for an IAC. */
  len = tvb_length_remaining(tvb, offset);
  offset = tvb_find_guint8(tvb, offset, len, TN_IAC);
  if (offset == -1) {
    /* None found - run to the end of the packet. */
    offset += len;
  }

offset is 1344 at one stage and then offset is set to 32 (-1 + 33) and the dissector 
ends up looping through the packet forever.
.....  FF FF FF FA .................

On way to solve this could be to instead use a temporar variable instead of 
overwriting the offset variable
temp_offset = tvb_find_guint8(tvb,offset,len,TN_IAC) 
and only copy temp_offset  to the offset variable when temp_offset  is not equal to -1.
However there might be a better solution.

Regards,
  Martin


Reply via email to