Environment handling broken in /bin/sh with changes to
{get,set,put}env()
Andrey Chernov
ache at nagual.pp.ru
Fri Jul 13 20:24:36 UTC 2007
On Fri, Jul 13, 2007 at 02:39:30PM -0500, Sean C. Farley wrote:
> FreeBSD 6 will also dump if the length of the value was less than or
> equal to "/bin" since it reuses this string. This will core dump:
>
> nenv[0] = "PATH=/bin";
> nenv[1] = NULL;
> environ = nenv;
> setenv("PATH", "/bin", 1);
1) I care in first hand about unsetenv() as my example states. There
nowhere said in the specs that unsetenv() may modify environ _content_,
manpage says about pointers only.
2) That example not fail under FreeBSD 6 but fail under new code:
nenv[0] = "PATH=/bin";
nenv[1] = NULL;
environ = nenv;
setenv("HOME", "/xxx", 1);
(that is because new code will touch "PATH=/bin" string in anycase while
old ones looks for "HOME" only).
The most safest way is do not touch environ content outside of
scope of requested modification. That means I agree that
nenv[0] = "PATH=/bin";
setenv("PATH", "/bin", 1);
may fail, but not about the cases 1) and 2)
--
http://ache.pp.ru/
More information about the freebsd-current
mailing list