summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-04-27 06:54:24 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2010-04-27 06:54:24 (GMT)
commit25b10d97e66a74d4e5a5571afb1b8369c31eefca (patch)
tree322fedaccad019ba343994174b21ed3172ee7ff6
parent6646de02148cecdc1b97a999b10eaa930d9cfca5 (diff)
downloadbusybox-25b10d97e66a74d4e5a5571afb1b8369c31eefca.tar.gz
busybox-25b10d97e66a74d4e5a5571afb1b8369c31eefca.tar.bz2
telnet: prevent SEGV if we are requested TELOPT_NEW_ENVIRON.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/telnet.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/networking/telnet.c b/networking/telnet.c
index 09f75cc..ec3db0c 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;