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

Compare with Current View Page History

« Previous Version 20 Next »

According to C99 [[ISO/IEC 9899-1999]]:

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 the getenv function. If the specified name cannot
be found, a null pointer is returned.

Do not modify the value returned by the getenv() function. Create a copy and make your changes locally, so that they are not overwritten.

Non-Compliant Code Example

This non-compliant code example modifies the string found by getenv(). Characters in env should not be changed directly.

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.

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.

Rule

Severity 

Likelihood 

Remediation Cost

Priority

Level

ENV30-C

1 (low)

1 (unlikely)

3 (low)

P3

L3

References

[[ISO/IEC 9899-1999]] Section 7.20.4.5, "The getenv function"
[[Open Group 04]] getenv

  • No labels