CodeQL library for C/C++
Search

Predicate memberMayBeVarSize

Holds if v is a member variable of c that looks like it might be variable sized in practice. For example:

struct myStruct { // c
  int amount;
  char data[1]; // v
};

This requires that v is an array of size 0 or 1, and v is the last member of c. In addition, if the size of the structure is taken, there must be at least one instance where a c pointer is allocated with additional space. For example, holds for c if it occurs as

malloc(sizeof(c) + 100 * sizeof(char))

but not if it only ever occurs as

malloc(sizeof(c))

Import path

import semmle.code.cpp.commons.Buffer
predicate memberMayBeVarSize(Class c, MemberVariable v)