Re: Environment handling broken in /bin/sh with changes to {get,set,put}env()

From: Andrey Chernov <ache_at_nagual.pp.ru>
Date: Sat, 14 Jul 2007 00:24:33 +0400
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/
Received on Fri Jul 13 2007 - 18:24:36 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:14 UTC