From: Denys Vlasenko Date: Tue, 27 Apr 2010 06:54:24 +0000 (+0200) Subject: telnet: prevent SEGV if we are requested TELOPT_NEW_ENVIRON. X-Git-Tag: 1_17_0~267 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=25b10d97e66a74d4e5a5571afb1b8369c31eefca;p=oweals%2Fbusybox.git telnet: prevent SEGV if we are requested TELOPT_NEW_ENVIRON. Signed-off-by: Denys Vlasenko --- 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;