Eric Blake <ebb9 <at> byu.net> writes:

> 
> I'm still thinking about how best to patch this.  I know gnulib provides the 
> stdio-safer module (and friends) that guarantee that stdio functions like 
fopen 
> don't reuse fd's 0, 1, or 2 (and hence that stdin, stdout, and stderr remain 
> closed if they started life closed).  I also know that gnulib provides the 
> closeout module, which we should probably be using (and issue an error if any 
> output was attempted to stdout when it was already closed).

Even with my earlier patches, I'm still finding issues.  For example:

$ m4 | cat -s
divert(-1)
define(`f',`
')
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
define(`f',defn(`f')defn(`f'))
divert(1)
f
divert
syscmd(echo hi >&3)

hi

$

Oops - we didn't set the fd of our temporary file to close-on-exec, so the 
child process inherited it and was able to pollute it.

-- 
Eric Blake















_______________________________________________
Bug-m4 mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-m4

Reply via email to