Re: man-db segfault: problem found (but need help for the solution :-)
On Nov 11, Richard Braakman <dark@xs4all.nl> wrote:
> [app closes stderr, spawns child who writes to stderr, which
> causes corruption ]
> Then it writes to stderr. The stdio library apparently did not
> know that stderr started out closed, and happily writes to file
> descriptor 2. I think this is a bug in the stdio library.
Huh? A descriptor is a descriptor is a descriptor. How is the library
supposed to know what the programs intent was? The bug is in the program
that closes streams that its children depend on.
> If you want a quick hack, just put
>
> /* Skip fd's 0 through 2 even if they are available */
> open("/dev/null", O_WRONLY);
> open("/dev/null", O_WRONLY);
> open("/dev/null", O_WRONLY);
>
> in main() somewhere close to the beginning.
1) quote the line in the POSIX spec that says open() always uses the
lowest numbered available descriptor. (It may actually say this,
I don't have a copy available, but it seems unlikely.)
2) Assuming this works, it leaves stderr dumping to /dev/null, making
error messages less than accessible.
Why not just take the close of stdout and stderr out of the parent
program? Surely it's not using hard-coded descriptors? Or is it doing
something "clever" with pipes...?
Steve Greenland
--
TO UNSUBSCRIBE FROM THIS MAILING LIST: e-mail the word "unsubscribe" to
debian-devel-request@lists.debian.org . Trouble?
e-mail to templin@bucknell.edu .
Reply to: