Why is this an issue?
Functions return values and parameters values marked nonnull
are assumed to have non-null values and are not typically null-checked
before use. Therefore setting one of these values to null
, could cause null pointer dereferences at runtime.
Noncompliant code example
__attribute__((returns_nonnull))
int* nonnull(__attribute__((nonnull)) int* parameter) {
parameter = 0; // Noncompliant - "parameter" is marked "nonnull" but is set to null.
nonnull(0); // Noncompliant - Parameter "parameter" to this call is marked "nonnull" but null is passed.
return 0; // Noncompliant - This function's return value is marked "nonnull" but null is returned.
}
Resources