Wiki Markup |
---|
Do not modify the value returned by the {{getenv()}} function. Create a copy and make your changes locally, so that they are not overwritten. According to C99 \[[ISO/IEC 9899-1999:TC2|AA. C References#ISO/IEC 9899-1999TC2]\]: |
The
getenv
function returns a pointer to a string associated with the matched list
member. The string pointed to shall not be modified by the program, but may be
overwritten by a subsequent call to thegetenv
function. If the specified name cannot
be found, a null pointer is returned.
...
returned
...
.
Non-Compliant Code Example
This non-compliant code example modifies the string found returned by getenv()
. Characters in env
should not be changed directly.
Code Block | |||
---|---|---|---|
| |||
int foo() { char *env; env = getenv("TEST_ENV"); env[0] = 'a'; /*Do some more things*/ return 0; } |
Compliant Code Solution
This is a compliant code solution. If it is necessary to modify the value of the string returned by the function getenv()
, then the programmer should make a local copy of that string value, and then modify the local copy of that string.
Code Block | ||
---|---|---|
| ||
int foo() { char *env; char *copy_of_env; env = getenv("TEST_ENV"); copy_of_env = malloc(strlen(env) + 1); /* Error handling */ strcpy(copy_of_env, env); copy_of_env[0] = 'a'; /*Do some more things*/ return 0; } |
Risk Assessment
The modified string may be overwritten by a subsequent call to the getenv
function.
...
Wiki Markup |
---|
\[[ISO/IEC 9899-1999:TC2|AA. C References#ISO/IEC 9899-19991999TC2]\] Section 7.20.4.5, "The {{getenv}} function" \[[Open Group 04|AA. C References#Open Group 04]\] [getenv|http://www.opengroup.org/onlinepubs/000095399/functions/getenv.html] |