Versions Compared

Key

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

...

Subclause 7.21.7.2 of the C Standard [ISO/IEC 9899:2011] says,

The fgets function returns s if successful. If end-of-file is encountered and no characters have been read into the array, the contents of the array remain unchanged and a null pointer is returned.

...

Code Block
bgColor#ccccff
langc
#include <stdio.h>
#include <string.h>
 
void func(void) {
  char buf[BUFSIZ];
  char *p;

  if (fgets(buf, sizeof(buf), stdin)) {
    p = strchr(buf, '\n');
    if (p) {
      *p = '\0';
    }
  } else {
    /* Handle error */
  }
}

Risk Assessment

Assuming that character data has been read can result in an out-of-bounds memory write.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

FIO37-C

highHigh

probableProbable

mediumMedium

P12

L1

Automated Detection

Tool

Version

Checker

Description

Compass/ROSE

 

 

Could detect some violations of this rule. In particular, it could detect the noncompliant code example by searching for fgets(), followed by strlen() - 1, which could be −1. The crux of this rule is that a string returned by fgets() could still be empty, because the first char is '\0'. There are probably other code examples that violate this guideline; they would need to be enumerated before ROSE could detect them

Fortify SCA

5.0

 

 

Related Vulnerabilities

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

...

Bibliography

[ISO/IEC 9899:2011]Subclause 7.21.7.2, "The fgets Function"
[Lai 2006] 
[Seacord 2013]Chapter 2, "Strings"

 

...

Image Modified