Blame SPECS/ksh-20140929-safefd.patch

Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/include/io.h.safefd ksh-20120801/src/cmd/ksh93/include/io.h
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/include/io.h.safefd	2015-03-03 18:21:40.544732158 +0100
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/include/io.h	2015-03-03 18:22:16.284447849 +0100
Packit 992a25
@@ -78,6 +78,7 @@ extern void 	sh_iorestore(Shell_t*,int,i
Packit 992a25
 extern Sfio_t 	*sh_iostream(Shell_t*,int);
Packit 992a25
 extern int	sh_redirect(Shell_t*,struct ionod*,int);
Packit 992a25
 extern void 	sh_iosave(Shell_t *, int,int,char*);
Packit 992a25
+extern int 	safefdnumber(Shell_t* shp, int sfd);
Packit 992a25
 extern int 	sh_iovalidfd(Shell_t*, int);
Packit 992a25
 extern int 	sh_inuse(Shell_t*, int);
Packit 992a25
 extern void 	sh_iounsave(Shell_t*);
Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/sh/io.c.safefd ksh-20120801/src/cmd/ksh93/sh/io.c
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/sh/io.c.safefd	2015-03-03 18:21:40.511732421 +0100
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/sh/io.c	2015-03-03 18:21:40.544732158 +0100
Packit 992a25
@@ -1724,6 +1724,25 @@ void sh_iosave(Shell_t *shp, register in
Packit 992a25
 	}
Packit 992a25
 }
Packit 992a25
 
Packit 992a25
+int safefdnumber(Shell_t* shp, int sfd)
Packit 992a25
+{
Packit 992a25
+	register int fd;
Packit 992a25
+
Packit 992a25
+	while(1)
Packit 992a25
+	{
Packit 992a25
+		for(fd=0; fd < shp->topfd; fd++)
Packit 992a25
+		{
Packit 992a25
+			if (filemap[fd].save_fd==sfd || filemap[fd].orig_fd==sfd || (fcntl(sfd, F_GETFD) != -1 || errno != EBADF))
Packit 992a25
+			{
Packit 992a25
+				sfd++;
Packit 992a25
+				continue;
Packit 992a25
+			}
Packit 992a25
+		}
Packit 992a25
+		break;
Packit 992a25
+	}
Packit 992a25
+	return sfd;
Packit 992a25
+}
Packit 992a25
+
Packit 992a25
 /*
Packit 992a25
  *  close all saved file descriptors
Packit 992a25
  */
Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.safefd ksh-20120801/src/cmd/ksh93/sh/subshell.c
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.safefd	2015-03-03 18:21:40.531732261 +0100
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c	2015-03-03 18:21:40.544732158 +0100
Packit 992a25
@@ -673,7 +673,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
Packit 992a25
 			}
Packit 992a25
 			if(iop && sffileno(iop)==1)
Packit 992a25
 			{
Packit 992a25
-				int fd=sfsetfd(iop,3);
Packit 992a25
+				int fd=sfsetfd(iop,safefdnumber(shp,3));
Packit 992a25
 				if(fd<0)
Packit 992a25
 				{
Packit 992a25
 					shp->toomany = 1;