Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

On the same platform, this solution produces the expected output of:

Code Block
int is 0, float is 0.000000
int is 1, float is 1.000000

...

Consider the following structure made up of four 8-bit bit-field members.:

Code Block
struct bf {
  unsigned int m1 : 8;
  unsigned int m2 : 8;
  unsigned int m3 : 8;
  unsigned int m4 : 8;
};	/* 32 bits total */

...

The following code behaves differently depending on whether the implementation is left-to-right or right-to-left.:

Code Block
bgColor#ffcccc
struct bf {
  unsigned int m1 : 8;
  unsigned int m2 : 8;
  unsigned int m3 : 8;
  unsigned int m4 : 8;
}; /* 32 bits total */

void function() {
  struct bf data;
  unsigned char *ptr;

  data.m1 = 0;
  data.m2 = 0;
  data.m3 = 0;
  data.m4 = 0;
  ptr = (unsigned char *)&data;
  (*ptr)++; /* can increment data.m1 or data.m4 */
}

...

Tool

Version

Checker

Description

Section

Compass/ROSE

 

 

Section

can detect violations of this recommendation. Specifically, it reports violations if:

  • A pointer to one object is type cast to the pointer of a different object
  • The pointed-to object of the (type cast) pointer is then modified arithmetically.

...

Search for vulnerabilities resulting from the violation of this recommendation on the CERT website.

Related Guidelines

CERT C++ Secure Coding Standard: EXP11-CPP. Do not apply operators expecting one type to data of an incompatible type

...

Wiki Markup\[[ISO/IEC 9899:1999|AA. Bibliography#ISO/IEC 9899-1999]\] Section 6.7.2, "Type specifiers" \[[

ISO/IEC PDTR 24772|AA. Bibliography#ISO/IEC PDTR 24772]\] TR 24772 "STR Bit Representations"

MISRA Rule 3.5

Bibliography

Wiki Markup

\[[MISRA 2004|AA. Bibliography#MISRA 04]\] Rule 3.5
\[[Plum 1985|AA. Bibliography#Plum 85]\] Rule 6-5

...