Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Parasoft 2020.2

...

Many implementations of the stdio package adjust their behavior slightly if stdout is a terminal. To make the determination, these implementations perform some operation that fails (with ENOTTY) if stdout is not a terminal. Although the output operation goes on to complete successfully, errno still contains ENOTTY. This behavior can be mildly confusing, but it is not strictly incorrect because it is only meaningful for a program to inspect the contents of errno only after an error has been reported. More precisely, errno is meaningful only meaningful after a library function that sets errno on error has returned an error code.

Code Block
bgColor#FFcccc
langc

errno = 0;
printf("This\n");
printf("is\n");
printf("a\n");
printf("test.\n");
if (errno != 0) {
  fprintf(stderr, "printf failed: %s\n", strerror(errno));
}

...

Code Block
bgColor#ccccff
langc

printf("This\n");
printf("is\n");
printf("a\n");
printf("test.\n");
if (ferror(stdout)) {
  fprintf(stderr, "printf failed\n");
}

...

Checking errno after multiple calls to library functions can lead to spurious error reporting, possibly resulting in incorrect program operation.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

ERR01-C

low

Low

probable

Probable

low

Low

P6

L2

Automated Detection

Tool

Version

Checker

Description

Section

ECLAIR

Include Page
ECLAIR_V
ECLAIR_V
Section

stlibuse

SectionFully Implemented

CC2.ERR01

Fully implemented

LDRA tool suite
Include Page
LDRA_V
LDRA_V
44 SEnhanced Enforcement
Parasoft C/C++test

Include Page
Parasoft_V
Parasoft_V

CERT_C-ERR01-aThe error indicator 'errno' shall not be used

Related Vulnerabilities

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

Related Guidelines

...

...

...

ISO/IEC 9899:1999 Section 6.3.1.1, "Boolean, characters, and integers," Section 7.1.4, and Section 7.9.10.3, "The ferror function"

...

Bibliography

[Horton 1990]Section 14, p. 254
[Koenig 1989]Section 5.4, p. 73


...

Image Modified Image Modified Image Modified