V2013. Consider inspecting the correctness of handling the N argument in the 'Foo' function.


This diagnostic message was added on users' request. It is quite specific and was implemented to solve one particular task that is hardly of interest to a wide audience.

It can be sometimes useful to find all the calls of COM-interfaces where a pointer to a certain class is explicitly cast to an integer pointer or just an integer type. Some of our users wish to have a means to check if passed data are processed correctly on the COM-server's part.

Assume we have a container containing an array of items of the unsigned type. It is passed into a function that interprets it as an array of size_t items. The data in such code will be interpreted correctly in the 32-bit system and incorrectly in the 64-bit one. For example:

MyVector<unsigned> V;
pInterface->Foo((unsigned char *)(&V));
....
void IMyClass::Foo(unsigned char *p)
{
  MyVector<size_t> *V = (V *)(p);
  ....
}

This is in fact a 64-bit error. We decided not to include it into the set of 64-bit diagnostic rules as it is just too specific. This diagnostic allows you to find potentially dangerous calls and it is then up to you to manually review all the methods accepting the data and figure out if there is an error in your code or not.

According to Common Weakness Enumeration, potential errors found by using this diagnostic are classified as CWE-704.


Bugs Found

Checked Projects
355
Collected Errors
13 303