Comment gérer Coverity erreur TAINTED_SCALAR dans fread
Lors de la lecture d'une valeur à partir d'un fichier pour un entier, coverity vérifier est de donner d'erreur suivant
L'appel de la fonction "fread" souillures "argument readval"
//coverity note: Calling function "fread" taints argument "readval".
if(fread(&readval, sizeof(int), 1, fp) < 1) {
return;
} else {
//coverity note: Passing tainted variable "readval" to a tainted sink.
f1(&readval);
}
Comment gérer cette erreur?
Quelles vérifications que je dois réaliser pour 'readval" pour s'assurer qu'il n'est pas corrompu.
Ce qui ne la touche f1() est la fonction?
la f1 est fseek(fp, readval, SEEK_SET);
f1() est fseek() comme suit coverity dit 'jump_offset" et "readval" les deux sont corrompus. jump_offset = readval + header_size; fseek(fp, jump_offset, SEEK_SET);
la f1 est fseek(fp, readval, SEEK_SET);
f1() est fseek() comme suit coverity dit 'jump_offset" et "readval" les deux sont corrompus. jump_offset = readval + header_size; fseek(fp, jump_offset, SEEK_SET);
OriginalL'auteur coder | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
Donc, le problème est que vous utilisez un entachée valeur 😉
Plus en détail, readval est fixé une fois par des données de l'extérieur et donc potentiellement utilisé comme un argument de fseek. Cet argument pourrait vous mettre au-delà de la fin du fichier et la cause de votre planter le programme.
Vous avez besoin de faire quelques vérifications pour s'assurer que vous n'êtes pas à la marche, à la fin du fichier.
Je vais ajouter le vérifier sur fseek-retour-de valeur et coverity vérifier à nouveau pour s'assurer de ce correctif. Mais le décalage de paramètre que nous passons à fseek (dans ce cas jump_offset) peut venir de n'importe où. Il peut être lu à partir d'un fichier ou il peut être calculée d'une certaine façon. Coverity a montré des notifications à partir de fread. Après la lecture des questions sur les "tarés" valeurs maintenant, je ne suis pas sûr si j'ai besoin de mettre de vérifier la valeur de retour de fseek ou fread lui-même.
autre question sur la entachée valeur
OriginalL'auteur Mark Robinson
Ajouter une assertion juste après que vous obtenez le readval de fread. assurez-vous que readval est dans une fourchette raisonnable.
BTW, vous "faire valoir", devrait également être efficace dans la version
OriginalL'auteur gang2k