C and C++


MATH.RANGE.COSH.TOOHIGH : cosh on High Number

Summary

A hyperbolic cosine function is called on a value greater than 710.5, which may lead to numeric overflow.

Properties

Class Name cosh on High Number
Significance reliability
Mnemonic MATH.RANGE.COSH.TOOHIGH
Categories
MisraC2023 MisraC2023:D.4.1 Run-time failures shall be minimized
  MisraC2023:D.4.11 The validity of values passed to library functions shall be checked
Misra2012 Misra2012:D.4.1 Run-time failures shall be minimized
  Misra2012:D.4.11 The validity of values passed to library functions shall be checked
Misra2004 Misra2004:20.3 The validity of values passed to library functions shall be checked
AUTOSARC++14 AUTOSARC++14:A0-4-4 Range, domain and pole errors shall be checked when using math functions.
CWE CWE:628 Function Call with Incorrectly Specified Arguments
  CWE:687 Function Call With Incorrectly Specified Argument Value
  CWE:688 Function Call With Incorrect Variable or Reference as Argument
CERT-C CERT-C:FLP32-C Prevent or detect domain and range errors in math functions
Availability Available for C and C++.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="cosh on High Number"

Triggers

CodeSonar ships with library models that allow it to recognize functions such as libm cosh() that compute a hyperbolic cosine. If one of these functions is called with a value greater than 710.5 in the input parameter position, a warning will be issued.

If you have created a custom library model for some function f() in terms of one of these existing models, calls to f() will also be capable of triggering cosh on High Number warnings.

Example

#include <math.h>

double call_cosh(double ind){
    double a = cosh(1);                              /* ok */
    double b = cosh(710.5);                          /* ok */
    double c = cosh((float)(7.105f*100)); /* 'cosh on High Number' warning issued here:
                                           * because of floating point imprecision, 7.105f*100 > 710.5
                                           */
    double d = cosh(711);                 /* 'cosh on High Number' warning issued here */
    double e = cosh(ind);                 /* EVIDENCED ONLY: 'cosh on High Number' warning issued here
                                           * if CodeSonar has evidence that a negative value is passed to
                                           * call_cosh().
                                           */
    return a+b+c+d+e;
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.