Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: 1st Solution and Risk Assesment

...

                        - Correct usage of expression E                                                              // for E: T* = mem_alloc(n)

 

...

Noncompliant Code Example

            // NCCE example

   *Remember to follow the desired coding style

Compliant Solution

            // CS example

   *Remember to follow the desired coding style

 

...

This noncompliant code example assigns a value greater than the size of dynamic memory to 'n' which is then passed to the memset().

Code Block
bgColor#FFcccc

void f1 (size_t nchars) {
char *p = (char *)malloc(nchars);
const size_t n = nchars + 1;

memset(p, 0, n);

/* ... */

}
Compliant Solution

This compliant solution makes sure that the value of 'n' is not greater the size of the dynamic memory pointed to by the pointer 'p':

Code Block
bgColor#ccccff

void f1 (size_t nchars, size_t val) {

char *p = (char *)malloc(nchars);
const size_t n = val;

if (nchars - n < 0) {

     /* Handle Error */

}

else {

memset(p, 0, n);

}

/* ... */}

Risk Assessment

Depending on the library function called, the attacker may be able to use a heap overflow vulnerability to run arbitrary code. The detection of checks specified in description can be automated but the remediation has to be manual.

...