* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#define RCSID "$Id: tty.c,v 1.8 2002/12/04 23:03:33 paulus Exp $"
+#define RCSID "$Id: tty.c,v 1.10 2003/02/24 11:29:53 fcusack Exp $"
#include <stdio.h>
#include <ctype.h>
if (pipe(ipipe) < 0 || pipe(opipe) < 0)
fatal("Couldn't create pipes for record option: %m");
+
+ /* don't leak these to the ptycommand */
+ (void) fcntl(ipipe[0], F_SETFD, FD_CLOEXEC);
+ (void) fcntl(opipe[1], F_SETFD, FD_CLOEXEC);
+
ok = device_script(ptycommand, opipe[0], ipipe[1], 1) == 0
&& start_charshunt(ipipe[0], opipe[1]);
close(ipipe[0]);
signal(SIGXFSZ, SIG_DFL);
#endif
+ /*
+ * Check that the fds won't overrun the fd_sets
+ */
+ if (ifd >= FD_SETSIZE || ofd >= FD_SETSIZE || pty_master >= FD_SETSIZE)
+ fatal("internal error: file descriptor too large (%d, %d, %d)",
+ ifd, ofd, pty_master);
+
/*
* Open the record file if required.
*/