svn commit: r253380 - head/lib/libc/stdlib
Andrey Chernov
ache at freebsd.org
Wed Jul 17 05:27:30 UTC 2013
On 17.07.2013 8:48, Andrey Chernov wrote:
> On 17.07.2013 8:10, Andrey Chernov wrote:
>> On 16.07.2013 11:26, Andriy Gapon wrote:
>>> Modified: head/lib/libc/stdlib/getenv.c
>>> ==============================================================================
>>> --- head/lib/libc/stdlib/getenv.c Tue Jul 16 06:50:22 2013 (r253379)
>>> +++ head/lib/libc/stdlib/getenv.c Tue Jul 16 07:26:46 2013 (r253380)
>>> @@ -505,7 +505,7 @@ __setenv(const char *name, size_t nameLe
>>> envVars[envNdx].valueSize = valueLen;
>>>
>>> /* Save name of name/value pair. */
>>> - env = stpcpy(envVars[envNdx].name, name);
>>> + env = stpncpy(envVars[envNdx].name, name, nameLen);
>>> if ((envVars[envNdx].name)[nameLen] != '=')
>>> env = stpcpy(env, "=");
>>> }
>>>
>>
>> I am not sure what you are trying to fix, but you just made next line
>> condition unpredictable random, since (envVars[envNdx].name)[nameLen] is
>> never filled now and there is freshly malloced memory content, which is
>> picked for != '=' comparison.
>>
>> Please back it out or fix.
>
> If I understand that right, correct version will be:
>
> env = stpncpy(envVars[envNdx].name, name, nameLen);
> env = stpcpy(env, "=");
>
> Condition check is not needed.
Microoptimized:
env = stpncpy(envVars[envNdx].name, name, nameLen);
*env++ = '=';
--
http://ache.vniz.net/
bitcoin:1G6ugdNY6e5jx1GVnAU2ntj2NEfmjKG85r
More information about the svn-src-all
mailing list