...
The size of a pointer can be greater than the size of an integer, such as in an implementation where pointers are 64 bits and unsigned integers are 32 bits. This code example is noncompliant on such implemetnations implementations because the result of converting the 64-bit ptr
cannot be represented in the 32-bit integer type:
...
The result of this assignment is implementation-defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap representation.
Compliant Solution
Adding an explicit cast may help the compiler convert the integer value into a valid pointer. A common technique is to assign the integer to a volatile-qualified object of type intptr_t
or uintptr_t
and then assign the integer value to the pointer:
...
INT36-EX2: Any valid pointer to void
can be converted to intptr_t
or uintptr_t
or their underlying types and back again with no change in value. Use of underlying types instead of intptr_t
or uintptr_t
is discouraged, however, because it limits portability.
...
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
...