[git commit master] telnet: prevent SEGV if we are requested TELOPT_NEW_ENVIRON.

Denys Vlasenko vda.linux at googlemail.com
Tue Apr 27 06:54:24 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=25b10d97e66a74d4e5a5571afb1b8369c31eefca
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/telnet.c |   17 ++++++++---------
 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;
-- 
1.6.3.3



More information about the busybox-cvs mailing list