From 25b10d97e66a74d4e5a5571afb1b8369c31eefca Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 27 Apr 2010 08:54:24 +0200 Subject: telnet: prevent SEGV if we are requested TELOPT_NEW_ENVIRON. Signed-off-by: Denys Vlasenko --- networking/telnet.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'networking') diff --git a/networking/telnet.c b/networking/telnet.c index 09f75cc84..ec3db0c5e 100644 --- a/networking/telnet.c +++ b/networking/telnet.c @@ -299,7 +299,7 @@ static void put_iac_subopt(byte c, char *str) static void put_iac_subopt_autologin(void) { int len = strlen(G.autologin) + 6; // (2 + 1 + 1 + strlen + 2) - const char *user = "USER"; + const char *p = "USER"; if (G.iaclen + len > IACBUFSIZE) iac_flush(); @@ -310,13 +310,14 @@ static void put_iac_subopt_autologin(void) put_iac(TELQUAL_IS); put_iac(NEW_ENV_VAR); - while (*user) - put_iac(*user++); + while (*p) + put_iac(*p++); put_iac(NEW_ENV_VALUE); - while (*G.autologin) - put_iac(*G.autologin++); + p = G.autologin; + while (*p) + put_iac(*p++); put_iac(IAC); put_iac(SE); @@ -441,7 +442,6 @@ static void to_sga(void) static void to_ttype(void) { /* Tell server we will (or won't) do TTYPE */ - if (G.ttype) put_iac2(WILL, TELOPT_TTYPE); else @@ -453,7 +453,6 @@ static void to_ttype(void) static void to_new_environ(void) { /* Tell server we will (or will not) do AUTOLOGIN */ - if (G.autologin) put_iac2(WILL, TELOPT_NEW_ENVIRON); else @@ -505,12 +504,12 @@ static int subneg(byte c) G.telstate = TS_SUB2; #if ENABLE_FEATURE_TELNET_TTYPE else - if (c == TELOPT_TTYPE) + if (c == TELOPT_TTYPE && G.ttype) put_iac_subopt(TELOPT_TTYPE, G.ttype); #endif #if ENABLE_FEATURE_TELNET_AUTOLOGIN else - if (c == TELOPT_NEW_ENVIRON) + if (c == TELOPT_NEW_ENVIRON && G.autologin) put_iac_subopt_autologin(); #endif break; -- cgit v1.2.3