Bonjour,
J’ai un soucis, sonarqube me dit que je peux écrire en dehors d’un tableau… Je vous montre le code.
condition = (index < taille_max);
checkCondition(condition);
(appelDeHook[index])(parametres);
En gros il me dit que si index >= taille_max, alors appelDeHook[index]
tape à l’extérieur du tableau. Ce qui n’est pas faux, sauf que checkCondition
est implémentée comme suis :
void checkCondition(int condition)
{
if (!condition)
{
resetBoard();
}
}
Donc si la condition est fausse, la carte redémarre. Je ne peux donc pas aller en dehors du tableau. Comment puis-je dire à Sonar que si condition==false
=> checkCondition <=> exit
?
Je peux dire à Sonar que c’est un faux positif, mais si ma fonction change, ou autre, me reproposera-t-il l’erreur ?
# Sonar n’a pas tort…
Posté par Cetera . Évalué à 1. Dernière modification le 27 février 2020 à 00:05.
Que fait la fonction
resetBoard()
? Elle change la taille du tableau de pointeurs de fonctionsappelDeHook[]
? Mais de toute manière, comme elle ne prend pas en paramètre l’index mis en cause, il est certain qu’elle ne peut pas te prémunir du dépassement en élargissant suffisamment le tableau !Et quand bien même, ce tableau, il faut le remplir avec des pointeurs valides, donc j’imagine que tu ne pourras pas l’étendre autant que nécessaire pour éviter le dépassement.
Bref, Sonar n’a pas tort, et il va falloir en tenir compte. Qu’est-ce que tu veux faire, exactement ? Quel est le comportement attendu si l’index a une valeur négative ou trop grande ? On ne tient pas compte de l’appel ? On exécute
appelDeHook[0]
avec les paramètres ? On fait encore autre chose ?[^] # Re: Sonar n’a pas tort…
Posté par Cetera . Évalué à 1. Dernière modification le 27 février 2020 à 00:37.
Au temps pour moi ; c’est de l’embarqué, et tu redémarres tout si l’index est trop grand, c’est bien ça ? Désolé pour ma réponse à côté de la plaque. :)
Du coup, la solution est vite vue :
Et Sonar sera content ! Voilou. Bon, c’est un peu brutal pour l’utilisateur de la carte, qui va payer cher les erreurs logicielles, mais ce n’est pas le problème ici, et je n’ai pas tous les éléments pour faire ce genre de réflexions.
[^] # Re: Sonar n’a pas tort…
Posté par Anthony Jaguenaud . Évalué à 2.
Je suis bien d’accord, mais je reprends un code, il y en a pas loin de 280, et il y a trop de cas pour faire un
sed
ouawk
en automatique.[^] # Re: Sonar n’a pas tort…
Posté par Cetera . Évalué à 1.
Si tu veux corriger tout ça de manière automatique sur, mettons, 280 cas, tu peux, plus simplement, remplacer tous les
par
Avec la petite tabulation à la fin pour garder une indentation correcte.
[^] # Re: Sonar n’a pas tort…
Posté par Anthony Jaguenaud . Évalué à 1.
Hélas non, parfois j’ai des trucs comme ça :
Là ça devient compliqué, j’avais pensé faire :
Là, sonar détecterait qu’on ne revient pas, même si le
return
est inatteignable.Mais on a le droit qu’à un seul
return
par fonction… Saleté de normeSIL
,DAL
, etc.[^] # Re: Sonar n’a pas tort…
Posté par Cetera . Évalué à 2. Dernière modification le 27 février 2020 à 11:47.
Et si on fait ça,
Sonar est assez malin pour que ça passe ?
[^] # Re: Sonar n’a pas tort…
Posté par Anthony Jaguenaud . Évalué à 2.
C’est pas mal, je vais voir si je peux tester. Il faut quand même faire les
if (ok)
manuellement, car il peut y avoir pas mal d’instruction.Sinon, le
SIL
impose « pas d’appel de fonction dans les opérations booléenne sauf sur le premier élément » car on ne sait pas si la fonction est appelée :'(Mais ils acceptent l’inverse :
L’idéal aurait été d’avoir un truc comme ça.
[^] # Re: Sonar n’a pas tort…
Posté par nico4nicolas . Évalué à 4.
Le SIL t'impose d'avoir des règles de codage. Ces règles de codage t'imposent un seul return par fonction ou ne pas appeler de fonction dans des opérations booléennes.
Si ce code est dans un logiciel sécuritaire et que tu modifies les 280 occurrences de cette condition, en théorie, il faudrait aussi repasser un paquet de tests ! Bon courage !
[^] # Re: Sonar n’a pas tort…
Posté par Anthony Jaguenaud . Évalué à 4.
Tu as raison, c’est MISRA qui impose cela.
[^] # Re: Sonar n’a pas tort…
Posté par Cetera . Évalué à 2. Dernière modification le 27 février 2020 à 15:04.
Effectivement, ce serait plus propre.
J'imagine que tu n'as pas droit non plus au goto ? Je me doute de la réponse, mais sinon :
Avant que les puristes me tombent dessus, la gestion des erreurs est un cas d'utilisation classique et propre du goto. ;)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.