NShiftKey-Rule-Guide logo NShiftKey-Rule-Guide

1. Vulnerability Description

2. Vulnerability Countermeasure

3. Sample Code

#include <stddef.h>
 
extern void do_work(int *array, size_t size);
  
void func(size_t size) {
  int vla[size];
  do_work(vla, size);
}
#include <stdint.h>
#include <stdlib.h>
  
enum { MAX_ARRAY = 1024 };
extern void do_work(int *array, size_t size);
  
void func(size_t size) {
  if (0 == size || SIZE_MAX / sizeof(int) < size) {
    /* Handle error */
    return;
  }
  if (size < MAX_ARRAY) {
    int vla[size];
    do_work(vla, size);
  } else {
    int *array = (int *)malloc(size * sizeof(int));
    if (array == NULL) {
      /* Handle error */
    }
    do_work(array, size);
    free(array);
  }
}