# V1024. Potential use of invalid data. The stream is checked for EOF before reading from it but is not checked after reading.

The analyzer has detected code where invalid data may be used during a read operation.

Consider the following example:

    while (!in.eof()) {
      in >> x;
      foo(x);
    }

If the read operation fails, the 'x' variable will contain invalid data, while the 'foo' function will be called anyway. The solution is to either add another check before using 'x' or rewrite the loop as shown below.

Fixed code:

    while (in >> x) {
      foo(x);
    }

References:

- C++ Antipatterns. See section "Testing for istream.eof() in a loop".
- Stackexchange.com. Why does ifstream.eof() not return TRUE after reading the last line of a file?

This diagnostic is classified as:

CWE-20 CERT-FIO40-C