[Bug 861132]
Robert Ancell
robert.ancell at canonical.com
Sun Oct 16 22:04:08 UTC 2011
Could you please consider changing this line then:
const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
to:
const size_t vallen = strlen (value) + 1;
This is detecting that value is NULL, handling it, then causing a
greater problem later on in the function. If value must be non NULL
then a segmentation fault is preferable to a memory corruption which is
much harded to diagnose.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to eglibc in Ubuntu.
https://bugs.launchpad.net/bugs/861132
Title:
setenv ("NAME", NULL) corrupts environment
Status in Embedded GLIBC:
Invalid
Status in “eglibc” package in Ubuntu:
New
Bug description:
setenv ("NAME", NULL) corrupts the environment. It doesn't seem
specified what the function should do when value is NULL, but the code
does check for it - it just does the wrong thing:
stdlib/setenv.c:
...
__add_to_environ (name, value, combined, replace)
...
const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
...
memcpy (new_value, name, namelen);
new_value[namelen] = '=';
memcpy (&new_value[namelen + 1], value, vallen);
...
i.e. the new value is set to "NAME=" without the trailing nul
character.
Found in bug 861123 where indicator-datetime does a:
x = g_strdup (getenv ("NAME"));
unsetenv ("NAME");
// do something
setenv ("NAME", x);
To manage notifications about this bug go to:
https://bugs.launchpad.net/eglibc/+bug/861132/+subscriptions
More information about the foundations-bugs
mailing list