`A4-7-1`: false positives in for loops
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 28/100
Piste de recherche
Commencez par localiser la requête CodeQL correspondant à la règle concernée A4-7-1 et comparez son comportement aux exemples en C++ de cette issue. Le travail est terminé lorsque les cas montrés de compteur de boucle, d’itération bornée, de taille de conteneur et de span auxiliaire ne produisent plus de faux positifs, tandis que les risques réels de dépassement restent signalés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Affected rules
A4-7-1
Description
Typical increment by one in for loops cannot lead to overflow or wrap-around because the number of iterations isn't large enough. The example illustrates true negatives together with false positives:
- in
fthe variable used as "loop counter" is defined inside or outside the scope of the loop, - and in
gthe number of iterations changes by a factor 100, although still not close to int limit - in general I think a query should take into account, if possible, the value used to initialize the counter and the (potential maximum) number of iterations. - iterating through a container through an auxiliary span of its values (rather than through the container directly).
Example
#include <array>
void f() {
const int num_iter = 100000;
for (int i = 0; i < num_iter; i++) { // OK.
;
}
int j = 0;
for (; j < num_iter; j++) { // False Positive.
;
}
}
void g() {
constexpr int N1000 = 1000;
std::array<int, N1000> arr1000;
std::size_t idx = 0;
for (; idx < arr1000.size(); ++idx) { // OK.
;
}
constexpr int N100000 = 100000;
std::array<int, N100000> arr100000;
idx = 0;
for (; idx < arr100000.size(); ++idx) { // False Positive.
;
}
}
namespace {
// AUTOSAR is C++14, so a quick C++20's span:
template<typename T>
class span
{
public:
span(T* data, std::size_t s) : data_member(data), size_(s) {}
std::size_t size() { return size_; }
private:
T* data_member;
std::size_t size_;
};
// This could be a member (non-template) function in a custom (template) container.
template<typename Container>
constexpr span<typename Container::value_type> values(Container& c) {
return {c.data(), c.size()};
}
}
int main() {
constexpr int N = 1;
std::array<int, N> arr;
auto values = ::values(arr);
std::size_t idx = 0;
for (; idx < values.size(); ++idx) { // False Positive.
; // Avoid assuming N is declared in the same scope, but OK that it is a
// std::size_t NTTP and/or data member of the container argument to values().
}
}
- Langage dominant
- CodeQL
- Étoiles
- 227
- Forks
- 82
- Merge moyen
- 6 j 7 h
- PR mergées (30 j)
- 9
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de github/codeql-coding-standards
-
false positive/false negative Stardard-MISRA-C++
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
github/codeql-coding-standards#1172 ·
-
Difficulty-Low false positive/false negative false-negative Impact-Low Standard-MISRA-C
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Difficulty-Medium false positive/false negative false-positive Impact-Medium Standard-CERT-C
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
github/codeql-coding-standards#1200 ·
-
`RULE-0-0-1`: "unreachable statement" false positives due to over-pruning of the control-flow graph Ouvertefalse positive/false negative
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
github/codeql-coding-standards#1190 ·
-
false positive/false negative
Difficulté 3/5 1-2 jours Accessibilité débutants 65/100
github/codeql-coding-standards#1175 ·
Toutes les issues de github/codeql-coding-standards
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
palladius/rails8-app-on-gcp#145 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
elastic/gradle-plugins#156 ·
-
area:workflow bug ready-for-agent
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
fil-donadoni/tolaria#4409 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
dotenvx/dotenv-vscode#139 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Fission-AI/OpenSpec#1960 ·