telnet: prevent SEGV if we are requested TELOPT_NEW_ENVIRON.
No binary (build failed)
—
(log yok)
| @@ -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; | |