2008-09-26 Craig Howland <howland@LGSInnovations.com>

* libc/stdlib/getenv_r.c (_getenv_r): Modify to not match if name
        contains an equal sign.
This commit is contained in:
Jeff Johnston 2008-09-26 16:23:58 +00:00
parent 610eefefdd
commit 9e71090b9a
2 changed files with 19 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2008-09-26 Craig Howland <howland@LGSInnovations.com>
* libc/stdlib/getenv_r.c (_getenv_r): Modify to not match if name
contains an equal sign.
2008-09-25 Raphael Derossa Pereira <raphaelpereira@gmail.com>
* libc/include/pthread.h[_UNIX98_THREAD_MUTEX_ATTRIBUTES]: Add

View File

@ -29,7 +29,8 @@ A pointer to the (string) value of the environment variable, or
PORTABILITY
<<_getenv_r>> is not ANSI; the rules for properly forming names of environment
variables vary from one system to another.
variables vary from one system to another. This implementation does not
permit '=' to be in identifiers.
<<_getenv_r>> requires a global pointer <<environ>>.
*/
@ -98,17 +99,22 @@ _DEFUN (_findenv_r, (reent_ptr, name, offset),
return NULL;
}
len = strlen(name);
c = name + len;
for (p = *p_environ; *p; ++p)
if (!strncmp (*p, name, len))
if (*(c = *p + len) == '=')
c = name;
while (*c && *c != '=') c++;
/* Identifiers may not contain an '=', so cannot match if does */
if(*c != '=')
{
len = c - name;
for (p = *p_environ; *p; ++p)
if (!strncmp (*p, name, len))
if (*(c = *p + len) == '=')
{
*offset = p - *p_environ;
ENV_UNLOCK;
ENV_UNLOCK;
return (char *) (++c);
}
}
ENV_UNLOCK;
return NULL;
}