Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Wiki MarkupSection 7.19.5.3 of C99 places the following restrictions on update streams: \ [[ISO/IEC 9899:1999|AA. Bibliography#ISO/IEC 9899-1999]\] <blockquote><p>When a file is opened with update mode both input and output may be performed on the associated stream. However, output shall not be directly followed by input without an intervening call to the <code>fflush</code> function or to a file positioning function (<code>fseek</code>, <code>fsetpos</code>, or <code>rewind</code>), and input shall not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters ]

When a file is opened with update mode both input and output may be performed on the associated stream. However, output shall not be directly followed by input without an intervening call to the fflush function or to a file positioning function (fseek, fsetpos, or rewind), and input shall not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file.

...

Opening

...

(or

...

creating)

...

a

...

text

...

file

...

with

...

update

...

mode

...

may

...

instead

...

open

...

(or

...

create)

...

a

...

binary

...

stream

...

in

...

some

...

implementations.

...

...

Noncompliant Code Example (FILE*)

...

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

FIO39-CPP

low

likely

medium

P6

L2

Automated Detection

Fortify SCA Version 5.0 with CERT C Rule Pack can detect violations of this rule.

...

This rule appears in the C Secure Coding Standard as FIO39-C. Do not alternately input and output from a stream without an intervening flush or positioning call.

Bibliography

...

\[[ISO/IEC 9899:1999|AA. Bibliography#ISO/IEC 9899-1999]\] Section 7.19.5.3, "The {{fopen}} function"

...

FIO38-CPP. Do not use a copy of a FILE object for input and output      09. Input Output (FIO)      FIO40-CPP. Reset strings on fgets() failure