 
                            ...
This noncompliant code example reads data from a file stream into a data structure.:
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| 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 ensures data integrity.:
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| 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 | 
|---|
| Repairable | Priority | Level | 
|---|---|---|
| FIO09-C | 
| Medium | Probable | 
| No | 
| No | P4 | L3 | 
Automated Detection
| Tool | Version | Checker | Description | 
|---|---|---|---|
| Compass/ROSE | 
| Could flag possible violations of this rule by noting any pointer to  | 
| LDRA tool suite | 
 | 44 S | Enhanced Enforcement | 
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
...
...
Bibliography
...
...