Skip to content

Commit c6c8788

Browse files
committed
FloatingTypes: Commit rule package files
Adds the FloatingTypes package, and make a query (A0-4-4) from TypeRanges into a shared query.
1 parent a9cfb8e commit c6c8788

File tree

5 files changed

+167
-4
lines changed

5 files changed

+167
-4
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
//** THIS FILE IS AUTOGENERATED, DO NOT MODIFY DIRECTLY. **/
2+
import cpp
3+
import RuleMetadata
4+
import codingstandards.cpp.exclusions.RuleMetadata
5+
6+
newtype FloatingTypesQuery =
7+
TUncheckedRangeDomainPoleErrorsQuery() or
8+
TUncheckedFloatingPointConversionQuery() or
9+
TIntToFloatPreservePrecisionQuery() or
10+
TMemcmpUsedToCompareFloatsQuery()
11+
12+
predicate isFloatingTypesQueryMetadata(Query query, string queryId, string ruleId, string category) {
13+
query =
14+
// `Query` instance for the `uncheckedRangeDomainPoleErrors` query
15+
FloatingTypesPackage::uncheckedRangeDomainPoleErrorsQuery() and
16+
queryId =
17+
// `@id` for the `uncheckedRangeDomainPoleErrors` query
18+
"c/cert/unchecked-range-domain-pole-errors" and
19+
ruleId = "FLP32-C" and
20+
category = "rule"
21+
or
22+
query =
23+
// `Query` instance for the `uncheckedFloatingPointConversion` query
24+
FloatingTypesPackage::uncheckedFloatingPointConversionQuery() and
25+
queryId =
26+
// `@id` for the `uncheckedFloatingPointConversion` query
27+
"c/cert/unchecked-floating-point-conversion" and
28+
ruleId = "FLP34-C" and
29+
category = "rule"
30+
or
31+
query =
32+
// `Query` instance for the `intToFloatPreservePrecision` query
33+
FloatingTypesPackage::intToFloatPreservePrecisionQuery() and
34+
queryId =
35+
// `@id` for the `intToFloatPreservePrecision` query
36+
"c/cert/int-to-float-preserve-precision" and
37+
ruleId = "FLP36-C" and
38+
category = "rule"
39+
or
40+
query =
41+
// `Query` instance for the `memcmpUsedToCompareFloats` query
42+
FloatingTypesPackage::memcmpUsedToCompareFloatsQuery() and
43+
queryId =
44+
// `@id` for the `memcmpUsedToCompareFloats` query
45+
"c/cert/memcmp-used-to-compare-floats" and
46+
ruleId = "FLP37-C" and
47+
category = "rule"
48+
}
49+
50+
module FloatingTypesPackage {
51+
Query uncheckedRangeDomainPoleErrorsQuery() {
52+
//autogenerate `Query` type
53+
result =
54+
// `Query` type for `uncheckedRangeDomainPoleErrors` query
55+
TQueryC(TFloatingTypesPackageQuery(TUncheckedRangeDomainPoleErrorsQuery()))
56+
}
57+
58+
Query uncheckedFloatingPointConversionQuery() {
59+
//autogenerate `Query` type
60+
result =
61+
// `Query` type for `uncheckedFloatingPointConversion` query
62+
TQueryC(TFloatingTypesPackageQuery(TUncheckedFloatingPointConversionQuery()))
63+
}
64+
65+
Query intToFloatPreservePrecisionQuery() {
66+
//autogenerate `Query` type
67+
result =
68+
// `Query` type for `intToFloatPreservePrecision` query
69+
TQueryC(TFloatingTypesPackageQuery(TIntToFloatPreservePrecisionQuery()))
70+
}
71+
72+
Query memcmpUsedToCompareFloatsQuery() {
73+
//autogenerate `Query` type
74+
result =
75+
// `Query` type for `memcmpUsedToCompareFloats` query
76+
TQueryC(TFloatingTypesPackageQuery(TMemcmpUsedToCompareFloatsQuery()))
77+
}
78+
}

cpp/common/src/codingstandards/cpp/exclusions/c/RuleMetadata.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import Declarations7
2626
import Declarations8
2727
import EssentialTypes
2828
import Expressions
29+
import FloatingTypes
2930
import IO1
3031
import IO2
3132
import IO3
@@ -77,6 +78,7 @@ newtype TCQuery =
7778
TDeclarations8PackageQuery(Declarations8Query q) or
7879
TEssentialTypesPackageQuery(EssentialTypesQuery q) or
7980
TExpressionsPackageQuery(ExpressionsQuery q) or
81+
TFloatingTypesPackageQuery(FloatingTypesQuery q) or
8082
TIO1PackageQuery(IO1Query q) or
8183
TIO2PackageQuery(IO2Query q) or
8284
TIO3PackageQuery(IO3Query q) or
@@ -128,6 +130,7 @@ predicate isQueryMetadata(Query query, string queryId, string ruleId, string cat
128130
isDeclarations8QueryMetadata(query, queryId, ruleId, category) or
129131
isEssentialTypesQueryMetadata(query, queryId, ruleId, category) or
130132
isExpressionsQueryMetadata(query, queryId, ruleId, category) or
133+
isFloatingTypesQueryMetadata(query, queryId, ruleId, category) or
131134
isIO1QueryMetadata(query, queryId, ruleId, category) or
132135
isIO2QueryMetadata(query, queryId, ruleId, category) or
133136
isIO3QueryMetadata(query, queryId, ruleId, category) or

rule_packages/c/FloatingTypes.json

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
{
2+
"CERT-C": {
3+
"FLP32-C": {
4+
"properties": {
5+
"obligation": "rule"
6+
},
7+
"queries": [
8+
{
9+
"description": "Range, domain or pole errors in math functions may return unexpected values, trigger floating-point exceptions or set unexpected error modes.",
10+
"kind": "problem",
11+
"name": "Prevent or detect domain and range errors in math functions",
12+
"precision": "high",
13+
"severity": "error",
14+
"short_name": "UncheckedRangeDomainPoleErrors",
15+
"shared_implementation_short_name": "UncheckedRangeDomainPoleErrors",
16+
"tags": [
17+
"correctness"
18+
]
19+
}
20+
],
21+
"title": "Prevent or detect domain and range errors in math functions"
22+
},
23+
"FLP34-C": {
24+
"properties": {
25+
"obligation": "rule"
26+
},
27+
"queries": [
28+
{
29+
"description": "",
30+
"kind": "problem",
31+
"name": "Ensure that floating-point conversions are within range of the new type",
32+
"precision": "very-high",
33+
"severity": "error",
34+
"short_name": "UncheckedFloatingPointConversion",
35+
"tags": [
36+
"correctness"
37+
]
38+
}
39+
],
40+
"title": "Ensure that floating-point conversions are within range of the new type"
41+
},
42+
"FLP36-C": {
43+
"properties": {
44+
"obligation": "rule"
45+
},
46+
"queries": [
47+
{
48+
"description": "",
49+
"kind": "problem",
50+
"name": "Preserve precision when converting integral values to floating-point type",
51+
"precision": "very-high",
52+
"severity": "error",
53+
"short_name": "IntToFloatPreservePrecision",
54+
"tags": [
55+
"correctness"
56+
]
57+
}
58+
],
59+
"title": "Preserve precision when converting integral values to floating-point type"
60+
},
61+
"FLP37-C": {
62+
"properties": {
63+
"obligation": "rule"
64+
},
65+
"queries": [
66+
{
67+
"description": "",
68+
"kind": "problem",
69+
"name": "Do not use object representations to compare floating-point values",
70+
"precision": "very-high",
71+
"severity": "error",
72+
"short_name": "MemcmpUsedToCompareFloats",
73+
"tags": [
74+
"correctness"
75+
]
76+
}
77+
],
78+
"title": "Do not use object representations to compare floating-point values"
79+
}
80+
}
81+
}

rule_packages/cpp/TypeRanges.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"precision": "high",
1717
"severity": "error",
1818
"short_name": "UncheckedRangeDomainPoleErrors",
19+
"shared_implementation_short_name": "UncheckedRangeDomainPoleErrors",
1920
"tags": [
2021
"correctness"
2122
]

rules.csv

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -544,10 +544,10 @@ c,CERT-C,FIO45-C,Yes,Rule,,,Avoid TOCTOU race conditions while accessing files,,
544544
c,CERT-C,FIO46-C,Yes,Rule,,,Do not access a closed file,FIO51-CPP,IO1,Hard,
545545
c,CERT-C,FIO47-C,Yes,Rule,,,Use valid format strings,,IO4,Hard,
546546
c,CERT-C,FLP30-C,Yes,Rule,,,Do not use floating-point variables as loop counters,,Statements,Easy,
547-
c,CERT-C,FLP32-C,Yes,Rule,,,Prevent or detect domain and range errors in math functions,A0-4-4,Types,Medium,
548-
c,CERT-C,FLP34-C,Yes,Rule,,,Ensure that floating-point conversions are within range of the new type,,Types,Medium,
549-
c,CERT-C,FLP36-C,Yes,Rule,,,Preserve precision when converting integral values to floating-point type,,Types,Medium,
550-
c,CERT-C,FLP37-C,Yes,Rule,,,Do not use object representations to compare floating-point values,,Types,Medium,
547+
c,CERT-C,FLP32-C,Yes,Rule,,,Prevent or detect domain and range errors in math functions,A0-4-4,FloatingTypes,Medium,
548+
c,CERT-C,FLP34-C,Yes,Rule,,,Ensure that floating-point conversions are within range of the new type,,FloatingTypes,Medium,
549+
c,CERT-C,FLP36-C,Yes,Rule,,,Preserve precision when converting integral values to floating-point type,,FloatingTypes,Medium,
550+
c,CERT-C,FLP37-C,Yes,Rule,,,Do not use object representations to compare floating-point values,,FloatingTypes,Medium,
551551
c,CERT-C,INT30-C,Yes,Rule,,,Ensure that unsigned integer operations do not wrap,A4-7-1,Types,Hard,
552552
c,CERT-C,INT31-C,Yes,Rule,,,Ensure that integer conversions do not result in lost or misinterpreted data,A4-7-1,Types,Hard,
553553
c,CERT-C,INT32-C,Yes,Rule,,,Ensure that operations on signed integers do not result in overflow,A4-7-1,Types,Hard,

0 commit comments

Comments
 (0)