Main Content

MISRA C:2023 Rule 22.4

There shall be no attempt to write to a stream which has been opened as read-only

Since R2024a

Description

Rule Definition

There shall be no attempt to write to a stream which has been opened as read-only.

Rationale

The Standard does not specify the behavior if an attempt is made to write to a read-only stream.

Polyspace Implementation

Polyspace® reports a violation of this rule if you open a stream as read-only and then attempt to write in the stream. The functions that are recognised as writing functions include:

  • fprintf(), fprintf_s(), fwprintf(), fwprintf_s(), vfprintf(), vfprintf_s(), vfwprintf(), vfwprintf_s()

  • fwrite()

  • fputc(), fputwc()

  • fputs(), fputws()

  • ungetc(), ungetwc()

A violation is reported once for a file. Subsequent write operations on the read-only file stream are not reported.

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

#include <stdio.h>

void func1(void) {
    FILE *fp1 = fopen("tmp.txt", "r");
    (void) fprintf(fp1, "Some text"); /* Non-compliant: Read-only stream */
    (void) fclose(fp1);
}

void func2(void) {
    FILE *fp2 = fopen("tmp.txt", "r+");
    (void) fprintf(fp2, "Some text"); /* Compliant */
    (void) fclose(fp2);
}

In this example, the file stream associated with fp1 is opened as read-only. The rule is violated when the stream is written.

Check Information

Group: Resources
Category: Mandatory
AGC Category: Mandatory

Version History

Introduced in R2024a

expand all