errno incorrectly checked for error
conditions
This defect occurs when
you check errno for error conditions in situations
where checking errno does not guarantee
the absence of errors. In some cases, checking errno can
lead to false positives.
For instance, you check errno following calls
to the functions:
fopen: If you follow the ISO® Standard,
the function might not set errno on errors.
atof: If you follow the ISO Standard,
the function does not set errno.
signal: The errno value
indicates an error only if the function returns the SIG_ERR error
indicator.
The ISO C Standard does not enforce that these functions
set errno on errors. Whether the functions set errno or
not is implementation-dependent.
To detect errors, if you check errno alone,
the validity of this check also becomes implementation-dependent.
In some cases, the errno value indicates
an error only if the function returns a specific error indicator.
If you check errno before checking the function
return value, you can see false positives.
For information on how to detect errors, see the documentation for that specific function.
Typically, the functions return an out-of-band error indicator to indicate errors. For instance:
fopen returns a null pointer if
an error occurs.
signal returns the SIG_ERR error
indicator and sets errno to a positive value. Check errno only
after you have checked the function return value.
| Group: Programming |
| Language: C | C++ |
| Default: On for handwritten code, off for generated code |
Command-Line Syntax: ERRNO_MISUSE |
| Impact: High |
| CWE ID: 703 |
Errno not checked | Errno not reset | Find defects (-checkers) | Returned value of a sensitive function not checked | Unsafe conversion from string to numerical value