Hi,

one our user found regression in ksh. It was caused by this bugfix:

> 12-07-09  The 12-04-04 fix for cd .. was not correct causing cd
> /etc;cd .. to remain in /etc.  This has been fixed.

in bltins/cd_pwd.c: b_cd(...)
following sequence of conditions:

if(*++dp=='.' && (*++dp=='/' || *dp==0))
        n++;
else if(*dp && *dp!='/')
        break;
if(*dp==0)
        break;

goes through second if condition for "../.directory" input,
but *++dp in first condition skipps valid '.' that is part of the directory name. So it's missing later:
sfputr(shp->strbuf,dp,0); <--leading dot is lost

Reproducer:
cd ~/.ssh
cd ../.ssh

prints error:
ksh: cd: /home/mhlavink/ssh: [No such file or directory]

see '.' missing in ^^^

Attached patch works for me.

Michal







diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
--- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix	2013-01-04 18:54:11.890462334 +0100
+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c	2013-01-04 18:54:11.914462535 +0100
@@ -214,7 +214,10 @@ int	b_cd(int argc, char *argv[],Shbltin_
 			if(*++dp=='.' && (*++dp=='/' || *dp==0))
 				n++;
 			else if(*dp && *dp!='/')
+			{
+				dp--;
 				break;
+			}
 			if(*dp==0)
 				break;
 		}
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to