Versions Compared

Key

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

The C fopen() function is used to open an existing file or create a new one [ISO/IEC 9899:2011]. However, in C, fopen() does not indicate whether an existing file has been opened for writing or a new file has been created. This may lead to a program overwriting or accessing an unintended file.

...

Compliant Solution (fopen(), C11)

The C standard Standard provides a new flag to address this problem. Section 7.21.5.3, para. paragraph 5 [ISO/IEC 9899:2011], states:

...

This compliant solution uses the x mode character to instruct fopen() to fail rather than open an existing functionsfile.

Code Block
bgColor#ccccff
langc
char *file_name;

/* initialize file_name */

FILE *fp = fopen(file_name, "wx");
if (!fp) {
  /* Handle error */
}

...

Tool

Version

Checker

Description

CoverutyCoverity6.5OPEN_ARGSFully Implemented
PRQA QA-C
Include Page
PRQA_V
PRQA_V
warncall for fopen and fopen_sPartially implemented

...

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

Related Guidelines

...

...

TR 24731-1:2007Section 6.5.2.1, "The fopen_s

...

Function"

Bibliography

[ISO/IEC 9899:2011]Section 7.21.5.3, "The fopen Function"
[Loosemore 2007]Section 12.3, "Opening

...

Streams"
[Open Group 2004] 
[Seacord 2005a]Chapter 7, "File I/O"

...