Environment handling broken in /bin/sh with changes to
{get,set,put}env()
Andrey Chernov
ache at nagual.pp.ru
Wed Jul 4 15:23:13 UTC 2007
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/
More information about the freebsd-current
mailing list