Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Jul 2007 19:23:10 +0400
From:      Andrey Chernov <ache@nagual.pp.ru>
To:        "Sean C. Farley" <scf@freebsd.org>
Cc:        freebsd-current <freebsd-current@freebsd.org>, Michal Mertl <mime@traveller.cz>
Subject:   Re: Environment handling broken in /bin/sh with changes to {get,set,put}env()
Message-ID:  <20070704152310.GA31964@nagual.pp.ru>
In-Reply-To: <20070704101026.O77978@thor.farley.org>
References:  <1183557221.1799.16.camel@genius.i.cz> <20070704143642.GA31254@nagual.pp.ru> <20070704150312.GB31683@nagual.pp.ru> <20070704101026.O77978@thor.farley.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jul 04, 2007 at 10:12:18AM -0500, Sean C. Farley wrote:
> On Wed, 4 Jul 2007, Andrey Chernov wrote:
> 
>> On Wed, Jul 04, 2007 at 06:36:42PM +0400, Andrey Chernov wrote:
>>> 2) "s" may point to getenv()-provided value there. So just modifying
>>> it directly followed by setenv() call will make things inconsistent.
>>> 
>>> 3) In my version of patch there was savestr() which copy arg to avoid
>>> this situation.
>>> 
>>> Fix will be to restore var.c to mine variant 1.34
>> 
>> You may also try this patch against var.c 1.36:
> 
> Andrey, thank you.
> 
> Sorry for the bug everyone.  Here is a patch that should fix it:
> http://www.farley.org/freebsd/tmp/setenv/sh.patch

Looks good excepting one moment. What happens if eqp == NULL here?

+	if ((eqp = strchr(ss, '=')) != NULL)
+		*eqp = '\0';
+	if (set)
+		(void) setenv(ss, eqp + 1, 1);
+	else
+		(void) unsetenv(ss);

IMHO it should be changed to

	if (set && eqp != NULL)

i.e. go to unsetenv() for values without "="

-- 
http://ache.pp.ru/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070704152310.GA31964>