Skip to main content

IAR Embedded Workbench for RX 5.20

SEC-NULL-assignment-fun-pos

In this section:
Synopsis

A pointer that might have been assigned the value NULL is dereferenced.

Enabled by default

No

Severity/Certainty

High/Medium

highmedium.png
Full description

A pointer that might have been assigned the value NULL, either directly or by a function call that can return NULL, is dereferenced, either directly or by being passed to a function which might dereference it without checking its value. This might cause an application crash. A pointer that might be NULL should be checked before it is dereferenced.

Coding standards
CERT EXP34-C

Do not dereference null pointers

CWE 476

NULL Pointer Dereference

Code examples

The following code example fails the check and will give a warning:

#define NULL ((void*)  0)
void * malloc(unsigned long);

int * xmalloc(int size){

  int * res = malloc(sizeof(int)*size);
  if (res != NULL)
    return res;
  else 
    return NULL;
}

void zeroout(int *xp, int i)
{
  xp[i] = 0;
}

int foo() {

  int * x;
  int i;

  x = xmalloc(45);
  
  // if (x)
  //  return -1;
  
  for(i = 0; i < 45; i++)
    zeroout(x, i);

}

The following code example passes the check and will not give a warning about this issue:

#define NULL ((void*)  0)
void * malloc(unsigned long);

int * xmalloc(int size){

  int * res = malloc(sizeof(int)*size);
  if (res != NULL)
    return res;
  else 
    return NULL;
}

void zeroout(int *xp, int i)
{
  xp[i] = 0;
}

int foo() {

  int * x;
  int i;

  x = xmalloc(45);
  
  if (x == NULL)
    return -1;
  else {
    for(i = 0; i < 45; i++)
      zeroout(x, i);
  }
}