Question

Comment effectuer une analyse accumulée à l'aide d'une attelle?

J'ai installé Splint sur mon Ubuntu 12.04. Créé un petit boîtier de test comme ci-dessous:

#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
    char a[10];
    strncpy(a,argv[1],10);
    printf(a);
    return 0;
}

a également créé un fichier splint.xh avec le contenu suivant:

int printf  (/*@untainted@*/ char *fmt, ...);
char *fgets (char *s, int n, FILE *stream) /*@ensures tainted s@*/ ;
char *strcat (/*@returned@*/ char *s1,  char *s2) /*@ensures s1:taintedness = s1:taintedness | s2:taintedness @*/ ;
void strncpy (/*@returned@*/ char *s1,  char *s2, size_t num)    /*@ensures s1:taintedness = s1:taintedness | s2:taintedness @*/ ;

a également créé un fichier splint.mts avec le contenu ci-dessous:

    attribute taintedness
       context reference char *
       oneof untainted, tainted
       annotations
         tainted reference ==> tainted
         untainted reference ==> untainted
                       transfers
         tainted as untainted ==> error "Possibly tainted storage used where untainted required."
       merge
          tainted + untainted ==> tainted
       defaults
          reference ==> tainted
          literal ==> untainted
          null ==> untainted
    end

Puis a finalement exécuté l'outil d'attelage avec la commande:

    splint -mts splint prg001.c

où PRG001.C est l'entrée d'échantillon, "Splint" fait référence à splint.mts et fichier splint.xh. Tous les fichiers sont dans le répertoire actuel.

La sortie que j'ai reçue est:

Splint 3.1.2 --- 21 août 2012

PRG001.C: (en fonction de la fonction) PRG001.C: 6: 1: Le paramètre de chaîne de format à imprimer n'est pas une constante de la compilation: une Le paramètre de format n'est pas connu au moment de la compilation. Cela peut conduire à la sécurité vulnérabilités car les arguments ne peuvent pas être vérifiés. (Utiliser -FormatConst d'inhiber l'avertissement) PRG001.C: 3: 14: Paramètre Argc Non utilisé Un paramètre de fonction n'est pas utilisé dans le corps de la fonction. Si l'argument est nécessaire pour le type de compatibilité ou de plans futurs, utilisez / @unused @ / dans le Déclaration d'argumentation. (Utilisez -paramuse pour inhiber l'avertissement)

Vérification finie --- Avertissements de code

Il n'y a pas de soupçon d'une analyse corrompue dans la sortie. Quelqu'un peut-il m'aider s'il vous plaît sur la manière d'obtenir l'analyse souillée à l'aide de l'attelle.

merci

Était-ce utile?

La solution

Le problème était avec le fichier splint.xh.

Je change le printf en printfxxx et cela a fonctionné bien.

Cela impliquait que la définition standard écrasait mon fichier .xh.Cela résolva mon problème et maintenant que les variables émettent des variables contaminées et le flux de souillure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top