C and C++


LANG.CAST.FN : Dangerous Function Cast

Summary

A function pointer is cast to another function pointer that has an incompatible signature or return type.

Properties

Class Name Dangerous Function Cast
Significance reliability
Mnemonic LANG.CAST.FN
Categories
MisraC2023 MisraC2023:1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  MisraC2023:11.1 Conversions shall not be performed between a pointer to a function and any other type
Misra2012 Misra2012:1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  Misra2012:11.1 Conversions shall not be performed between a pointer to a function and any other type
Misra2004 Misra2004:11.1 Conversions shall not be performed between a pointer to a function and any type other than an integral type
AUTOSARC++14 AUTOSARC++14:A5-2-2 Traditional C-style casts shall not be used.
  AUTOSARC++14:M5-2-6 A cast shall not convert a pointer to a function to any other pointer type, including a pointer to function type.
  AUTOSARC++14:M8-4-4 A function identifier shall either be used to call the function or it shall be preceded by &.
MisraC++2008 MisraC++2008:5-2-4 C-style casts (other than void casts) and functional notation casts (other than explicit constructor calls) shall not be used.
  MisraC++2008:5-2-6 A cast shall not convert a pointer to a function to any other pointer type, including a pointer to function type.
  MisraC++2008:8-4-4 A function identifier shall either be used to call the function or it shall be preceded by &.
MisraC++2023 MisraC++2023:4.1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  MisraC++2023:8.2.2 C-style casts and functional notation casts shall not be used
CWE CWE:704 Incorrect Type Conversion or Cast
JSF++ JSF++:183 Every possible measure should be taken to avoid type casting.
Availability Available for C and C++.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Dangerous Function Cast"

Example

typedef void (*thunk_t)(void);
typedef int (*int_unary_t)(int);
      
void A( void ) {}

int B( int i ) { 
    printf("%d", i); 
    return 1; 
}

void lang_cast_fn(void) {
    thunk_t thunk = (thunk_t)A;
    int_unary_t unary = (int_unary_t)B;
        
    thunk = (thunk_t)unary;  /* 'Dangerous Function Cast' warning issued here */
    thunk();
}

See also

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.