Section 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 ] Wiki Markup
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
, orrewind
), 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