MISRA C++:2008 Rule 0-3-2
If a function generates error information, then that error information shall be tested
Since R2020b
Description
Rule Definition
If a function generates error information, then that error information shall be tested.
Rationale
If you do not check the return value of functions that indicate error information through their return values, your program can behave unexpectedly. Errors from these functions can propagate throughout the program causing incorrect output, security vulnerabilities, and possibly system failures.
For the errno
-setting functions, to see if the function call
completed without errors, check errno
for error values. The return values
of these errno
-setting functions do not indicate errors. The return value
can be one of the following:
void
Even if an error occurs, the return value can be the same as the value from a successful call. Such return values are called in-band error indicators. For instance,
strtol
converts a string to a long integer and returns the integer. If the result of conversion overflows, the function returnsLONG_MAX
and setserrno
toERANGE
. However, the function can also returnLONG_MAX
from a successful conversion. Only by checkingerrno
can you distinguish between an error and a successful conversion.
For the errno
-setting functions, you can determine if an
error occurred only by checking errno
.
Polyspace Implementation
The checker raises a violation when:
You call sensitive functions that return information about possible errors and then you ignore the return value or use the output of the function without testing the return value.
The checker covers function from the standard library and other well-known libraries such as the POSIX library or the WinAPI library. Polyspace® considers a function as sensitive if the function call is prone to failure because of reasons such as:
Exhausted system resources (for example, when allocating resources).
Changed privileges or permissions.
Tainted sources when reading, writing, or converting data from external sources.
Unsupported features despite an existing API.
Polyspace considers a function a critical sensitive when they perform critical tasks such as:
Set privileges (for example,
setuid
)Create a jail (for example,
chroot
)Create a process (for example,
fork
)Create a thread (for example,
pthread_create
)Lock or unlock mutex (for example,
pthread_mutex_lock
)Lock or unlock memory segments (for example,
mlock
)
For functions that are not critical, the checker is not flagged if you explicitly ignore the return value by casting it to
void
. Explicitly ignoring the return value of critical sensitive functions is flagged by Polyspace.You call a function that sets
errno
to indicate error conditions, but do not checkerrno
after the call. For these functions, checkingerrno
is the only reliable way to determine if an error occurred.Functions that set
errno
on errors include:fgetwc
,strtol
, andwcstol
.For a comprehensive list of functions, see documentation about errno.
POSIX®
errno
-setting functions such asencrypt
andsetkey
.
Troubleshooting
If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
Group: Language Independent Issues |
Category: Required |