Blame SPECS/ksh-20120801-cdfix2.patch

Packit Service a8c26c
diff -up ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix2 ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c
Packit Service a8c26c
--- ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c.cdfix2	2013-02-01 16:46:50.441771371 +0100
Packit Service a8c26c
+++ ksh-20120801/src/cmd/ksh93/bltins/cd_pwd.c	2013-02-01 16:57:43.241784024 +0100
Packit Service a8c26c
@@ -61,6 +61,7 @@ int sh_diropenat(Shell_t *shp, int dir,
Packit Service a8c26c
 {
Packit Service a8c26c
 	int fd,shfd;
Packit Service a8c26c
 	int savederrno=errno;
Packit Service a8c26c
+	struct stat fs;
Packit Service a8c26c
 #ifndef AT_FDCWD
Packit Service a8c26c
 	NOT_USED(dir);
Packit Service a8c26c
 #endif
Packit Service a8c26c
@@ -133,6 +134,13 @@ int sh_diropenat(Shell_t *shp, int dir,
Packit Service a8c26c
 
Packit Service a8c26c
 	if(fd < 0)
Packit Service a8c26c
 		return fd;
Packit Service a8c26c
+	
Packit Service a8c26c
+	if (!fstat(fd, &fs) && !S_ISDIR(fs.st_mode))
Packit Service a8c26c
+	{
Packit Service a8c26c
+	  close(fd);
Packit Service a8c26c
+	  errno = ENOTDIR;
Packit Service a8c26c
+	  return -1;
Packit Service a8c26c
+	}
Packit Service a8c26c
 
Packit Service a8c26c
 	/* Move fd to a number > 10 and *register* the fd number with the shell */
Packit Service a8c26c
 	shfd = sh_fcntl(fd, F_dupfd_cloexec, 10);