You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Upon successful completion, getenv() function returns a pointer to a NUL-terminated string containing the value of the specified name. If the specified name cannot be found the environment of the calling process, a null pointer will be returned.

A programmer should never try to modify the value returned by the getenv() function. Because the pointer might be used by some other program. If it's necessary to manipulate the return value of getenv().

None-Compliant Code Example

This is a none-compliant code example showing that modification of the string value returned by the function getenv() will affect other processes that are using the same environmental variable at this given time.

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. The code shows that if the programmer feel it is necessary to modify the value 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.

int foo()
{
    char *env;
    char *copy_of_env;

    env = getenv("TEST_ENV");
    copy_of_env = malloc( strlen(env) * sizeof(char) );
    /* Error handling */
    strcpy(copy_of_env, env);

    copy_of_env[0] = 'a';

    /*Do some more things*/

    return 0;
}

Risk Assessment

Rule

Severity 

Likelihood 

Remediation Cost

Priority

Level

ENV30-C

2 (Medium)

3 (probable)   

2 (Medium)

P

L

  • No labels