In this section:

Overview

Porting code between differing machine architectures can be difficult for many reasons. A particularly tricky problem occurs when the sizes of data objects, particularly pointers, differ from that for which the software was created. This error occurs when a pointer is cast to a type with fewer bits, causing information to be lost, and is designed to help in porting codes to architectures where pointers and integers are of different lengths.


CodeDescriptionEnabledReportedPlatform
BAD_CASTCast of pointer loses precision(tick)CompilationWindows/Unix


The suppressEDGWarning off option must be used in order for Insure++ to find this error. 

Modern compilers will often catch this problem unless the user has explicitly forced the conversion with an appropriate type cast.

Problem

The following code shows a pointer being copied to a variable too small to hold all its bits.

/*
 * File: badcast.c
 */
main()
{
	char q, *p;

	p = "Testing";
	q = (char)p;
	return 0;
}

Diagnosis at Compilation

[badcast.c:9] **BAD_CAST**
	Cast of pointer loses precision:
>> 		q = (char) p;

---- Associated Common Weakness Enumerations ----
CWE-704: Incorrect type conversion or cast
  • Line 1: Source line at which the problem was detected.
  • Line 2: Description of the problem and the expression that is in error.
  • Line 5-6: CWE associated with this problem.

Repair

This error normally indicates a significant portability problem that should be corrected by using a different type to save the pointer expression. In ANSI C the type void * will always be large enough to hold a pointer value.

References

The table below shows Common Weakness Enumerations associated with this error.

CWEDescription
CWE-704Incorrect type conversion or cast
  • No labels