Versions Compared

Key

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

Portability is a concern when using the fread() and fwrite() functions across multiple, heterogeneous systems. In particular, it is never guaranteed that reading or writing of scalar data types such as integers, let alone aggregate types such as arrays or structures, will preserve the representation or value of the data. Implementations may differ in structure padding, floating-point model, number of bits per byte, endianness, and other attributes that cause binary data formats to be incompatible.

...

This noncompliant code example reads data from a file stream into a data structure.:

Code Block
bgColor#FFCCCC
langc

struct myData {
  char c;
  long l;
};

/* ... */

FILE *file;
struct myData data;

/* initializeInitialize file */

if (fread(&data, sizeof(struct myData), 1, file) < sizeof(struct myData)) {
  /* Handle error */
}

...

The best solution is to use either a text representation or a special library that will ensures data integrity.:

Code Block
bgColor#ccccff
langc

struct myData {
  char c;
  long l;
};

/* ... */

FILE *file;
struct myData data;
char buf[25];
char *end_ptr;

/* initializeInitialize file */

if (fgets(buf, 1, file) == NULL) {
  /* Handle error */
}

data.c = buf[0];

if (fgets(buf, sizeof(buf), file) == NULL) {
  /* Handle Error */
}

data.l = strtol(buf, &end_ptr, 10);

if ((ERANGE == errno)
 || (end_ptr == buf)
 || ('\n' != *end_ptr && '\0' != *end_ptr)) {
    /* Handle Error */
}

...

Reading binary data that has a different format than expected may result in unintended program behavior.

Recommendation

Severity

Likelihood

Detectable

Remediation Cost

Repairable

Priority

Level

FIO09-C

Medium

medium

Probable

probable

No

high

No

P4

L3

Automated Detection

Tool

Version

Checker

Description

section Sectioncould

Compass/ROSE

 

 



Could flag possible violations of this rule by noting any pointer to struct that is passed to fread(), as

the NCCE demonstrates

the noncompliant code example demonstrates

LDRA tool suite
Include Page
LDRA_V
LDRA_V
44 SEnhanced Enforcement

Related Vulnerabilities

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

Related Guidelines

...

...

Bibliography

...

...

...

...

...

...


...

Image Added Image Added | http://c-faq.com/misc/binaryfiles.html]Image Removed      09. Input Output (FIO)      Image Modified