Merge pull request #738 from github/michaelrfairhurst/implement-banned2-rule-package-rule-21-24

Implement banned2 package, rule 21-24 ban rand() and srand().
This commit is contained in:
Michael R Fairhurst 2024-10-17 01:02:08 +00:00 коммит произвёл GitHub
Родитель b476450bfb ee78b9bd4c
Коммит d0c84dc2f8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
7 изменённых файлов: 90 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,23 @@
/**
* @id c/misra/call-to-banned-random-function
* @name RULE-21-24: The random number generator functions of <stdlib.h> shall not be used
* @description The standard functions rand() and srand() will not give high quality random results
* in all implementations and are therefore banned.
* @kind problem
* @precision very-high
* @problem.severity warning
* @tags external/misra/id/rule-21-24
* security
* external/misra/c/2012/amendment3
* external/misra/obligation/required
*/
import cpp
import codingstandards.c.misra
from FunctionCall call, string name
where
not isExcluded(call, Banned2Package::callToBannedRandomFunctionQuery()) and
name = ["rand", "srand"] and
call.getTarget().hasGlobalOrStdName(name)
select call, "Call to banned random number generation function '" + name + "'."

Просмотреть файл

@ -0,0 +1,2 @@
| test.c:5:3:5:7 | call to srand | Call to banned random number generation function 'srand'. |
| test.c:6:11:6:14 | call to rand | Call to banned random number generation function 'rand'. |

Просмотреть файл

@ -0,0 +1 @@
rules/RULE-21-24/CallToBannedRandomFunction.ql

Просмотреть файл

@ -0,0 +1,11 @@
#include "stdlib.h"
void f() {
// rand() is banned -- and thus, so is srand().
srand(0); // NON-COMPLIANT
int x = rand(); // NON-COMPLIANT
// Other functions from stdlib are not banned by this rule.
x = abs(-4); // COMPLIANT
getenv("ENV_VAR"); // COMPLIANT
}

Просмотреть файл

@ -0,0 +1,26 @@
//** THIS FILE IS AUTOGENERATED, DO NOT MODIFY DIRECTLY. **/
import cpp
import RuleMetadata
import codingstandards.cpp.exclusions.RuleMetadata
newtype Banned2Query = TCallToBannedRandomFunctionQuery()
predicate isBanned2QueryMetadata(Query query, string queryId, string ruleId, string category) {
query =
// `Query` instance for the `callToBannedRandomFunction` query
Banned2Package::callToBannedRandomFunctionQuery() and
queryId =
// `@id` for the `callToBannedRandomFunction` query
"c/misra/call-to-banned-random-function" and
ruleId = "RULE-21-24" and
category = "required"
}
module Banned2Package {
Query callToBannedRandomFunctionQuery() {
//autogenerate `Query` type
result =
// `Query` type for `callToBannedRandomFunction` query
TQueryC(TBanned2PackageQuery(TCallToBannedRandomFunctionQuery()))
}
}

Просмотреть файл

@ -3,6 +3,7 @@ import cpp
import codingstandards.cpp.exclusions.RuleMetadata
//** Import packages for this language **/
import Banned
import Banned2
import BitfieldTypes
import BitfieldTypes2
import Concurrency1
@ -78,6 +79,7 @@ import Types2
/** The TQuery type representing this language * */
newtype TCQuery =
TBannedPackageQuery(BannedQuery q) or
TBanned2PackageQuery(Banned2Query q) or
TBitfieldTypesPackageQuery(BitfieldTypesQuery q) or
TBitfieldTypes2PackageQuery(BitfieldTypes2Query q) or
TConcurrency1PackageQuery(Concurrency1Query q) or
@ -153,6 +155,7 @@ newtype TCQuery =
/** The metadata predicate * */
predicate isQueryMetadata(Query query, string queryId, string ruleId, string category) {
isBannedQueryMetadata(query, queryId, ruleId, category) or
isBanned2QueryMetadata(query, queryId, ruleId, category) or
isBitfieldTypesQueryMetadata(query, queryId, ruleId, category) or
isBitfieldTypes2QueryMetadata(query, queryId, ruleId, category) or
isConcurrency1QueryMetadata(query, queryId, ruleId, category) or

Просмотреть файл

@ -0,0 +1,24 @@
{
"MISRA-C-2012": {
"RULE-21-24": {
"properties": {
"obligation": "required"
},
"queries": [
{
"description": "The standard functions rand() and srand() will not give high quality random results in all implementations and are therefore banned.",
"kind": "problem",
"name": "The random number generator functions of <stdlib.h> shall not be used",
"precision": "very-high",
"severity": "warning",
"short_name": "CallToBannedRandomFunction",
"tags": [
"security",
"external/misra/c/2012/amendment3"
]
}
],
"title": "The random number generator functions of <stdlib.h> shall not be used"
}
}
}