Stop IAC IAC from being swallowed in telnet (fix due to Robert de Bath)
[sgt/putty] / telnet.c
index b6e4802..20341cd 100644 (file)
--- a/telnet.c
+++ b/telnet.c
@@ -171,7 +171,6 @@ static void s_write (void *buf, int len) {
 static void c_write (char *buf, int len) {
     while (len--) {
        int new_head = (inbuf_head + 1) & INBUF_MASK;
-       int c = (unsigned char) *buf;
        if (new_head != inbuf_reap) {
            inbuf[inbuf_head] = *buf++;
            inbuf_head = new_head;
@@ -411,7 +410,12 @@ static void do_telnet_read (char *buf, int len) {
            else if (c == WILL) telnet_state = SEENWILL;
            else if (c == WONT) telnet_state = SEENWONT;
            else if (c == SB) telnet_state = SEENSB;
-           else telnet_state = TOPLEVEL;/* ignore _everything_ else! */
+           else {
+               /* ignore (and print) everything else */
+               b[0] = c;
+               c_write(b,1);
+               telnet_state = TOPLEVEL;
+           }
            break;
          case SEENWILL:
            proc_rec_opt (WILL, c);