Date: Tue, 07 Jan 1997 20:59:33 +1100 (EST) From: peter.jeremy@alcatel.com.au To: FreeBSD-gnats-submit@freebsd.org Subject: gnu/2392: man(1) leaks file descriptors Message-ID: <199701070959.UAA03216@vk2pj.alcatel.com.au> Resent-Message-ID: <199701071010.CAA11834@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2392 >Category: gnu >Synopsis: man(1) leaks file descriptors >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Jan 7 02:10:02 PST 1997 >Last-Modified: >Originator: Peter Jeremy >Organization: Peter Jeremy (VK2PJ) peter.jeremy@alcatel.com.au Alcatel Australia Limited 41 Mandible St Phone: +61 2 9690 5019 ALEXANDRIA NSW 2015 Fax: +61 2 9690 5247 >Release: FreeBSD 2.1-STABLE i386 >Environment: PAGER="exec less" 64 file descriptors >Description: The man(1) program opens and does not close two file descriptors for each manual page found. If a large number of manual entries are found in a single execution, then man will fail with various error messages (see below). >How-To-Repeat: $ man `ls /sbin` After quitting less(1) about 28 times, the following appears: Pipe call failed Error executing formatting or display command system command exited with status 512 No manual entry for mount_mfs Read access denied for file /usr/share/man/man8/mount_msdos.8.gz No manual entry for mount_msdos No manual entry for mount_nfs ... The permissions on /usr/share/man/man8/mount_msdos.8.gz are 0444. >Fix: *** /cdrom/usr/src/gnu/usr.bin/man/man/man.c Tue May 30 01:02:00 1995 --- /usr/src/gnu/usr.bin/man/man/man.c Sun Dec 8 09:23:45 1996 *************** *** 743,754 **** next: if ((fp = fopen (ult, "r")) == NULL) - return buf; - - if (fgets (buf, BUFSIZ, fp) == NULL) return ult; ! if (strlen (buf) < 5) return ult; beg = buf; --- 743,754 ---- next: if ((fp = fopen (ult, "r")) == NULL) return ult; ! end = fgets (buf, BUFSIZ, fp); ! fclose(fp); ! ! if (!end || strlen (buf) < 5) return ult; beg = buf; *************** *** 937,950 **** { cp = line; fgets (line, 100, fp); if (*cp++ == '\'' && *cp++ == '\\' && *cp++ == '"' && *cp++ == ' ') { if (debug) fprintf (stderr, "parsing directive from file\n"); status = parse_roff_directive (cp, file, buf); - - fclose (fp); if (status == 0) return buf; --- 937,949 ---- { cp = line; fgets (line, 100, fp); + fclose(fp); if (*cp++ == '\'' && *cp++ == '\\' && *cp++ == '"' && *cp++ == ' ') { if (debug) fprintf (stderr, "parsing directive from file\n"); status = parse_roff_directive (cp, file, buf); if (status == 0) return buf; *** /cdrom/usr/src/gnu/usr.bin/man/man/manpath.c Tue May 30 01:02:01 1995 --- /usr/src/gnu/usr.bin/man/man/manpath.c Sat Dec 14 17:57:10 1996 *************** *** 202,210 **** if (!strncmp ("MANDATORY_MANPATH", bp, 17)) { ! if ((p = strchr (bp, ' ')) == NULL) ! if ((p = strchr (bp, '\t')) == NULL) ! return -1; bp = p; --- 202,212 ---- if (!strncmp ("MANDATORY_MANPATH", bp, 17)) { ! if ((p = strchr (bp, ' ')) == NULL && ! (p = strchr (bp, '\t')) == NULL) { ! fclose(config); ! return -1; ! } bp = p; *************** *** 224,232 **** } else if (!strncmp ("MANPATH_MAP", bp, 11)) { ! if ((p = strchr (bp, ' ')) == NULL) ! if ((p = strchr (bp, '\t')) == NULL) ! return -1; bp = p; --- 226,236 ---- } else if (!strncmp ("MANPATH_MAP", bp, 11)) { ! if ((p = strchr (bp, ' ')) == NULL && ! (p = strchr (bp, '\t')) == NULL) { ! fclose(config); ! return -1; ! } bp = p; *************** *** 259,264 **** --- 263,269 ---- dlp++; } + fclose(config); dlp->bin[0] = '\0'; dlp->mandir[0] = '\0'; dlp->mandatory = 0; >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701070959.UAA03216>