Pregunta

¿Cómo realizar un análisis de la mancha con férula?

He instalado férula en mi Ubuntu 12.04. Creó una pequeña caja de prueba como a continuación:

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

También creó un archivo SPLINT.XH con los siguientes contenidos:

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 @*/ ;

También creó SPLINT.MTS Archivo con los siguientes contenidos:

    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

Luego finalmente corrió la herramienta de férula con el comando:

    splint -mts splint prg001.c

Dónde PRG001.C es la entrada de muestra, "Frinte" se refiere al archivo SPLINT.MTS y SPLINT.XH. Todos los archivos están en el directorio actual.

La salida que recibí es:

FIGURA 3.1.2 --- 21 de agosto de 2012

prg001.c: (en la función principal) PRG001.C: 6: 1: El parámetro de cadena de formato a Printf no es una constante de tiempo de compilación: a El parámetro de formato no se conoce en el tiempo de compilación. Esto puede llevar a la seguridad. Vulnerabilidades porque los argumentos no pueden ser comprobados. (Usar -FormatConst para inhibir la advertencia) PRG001.C: 3: 14: Parámetro Argc no utilizado Un parámetro de función no se usa en el cuerpo de la función. Si el argumento es necesario para la compatibilidad de tipo o los planes futuros, use / @unused @ / en el Declaración de argumentos. (Use -Paramuse para inhibir la advertencia)

Control terminado --- 2 advertencias de código

No hay un indicio de ningún análisis de la mancha en la salida. Puede alguien, por favor, ayúdame sobre cómo hacer que el análisis de la mancha se realice con FALL.

gracias

¿Fue útil?

Solución

El problema fue con el archivo SPLINT.XH.

Cambio la impresión a printfxxx y funcionó bien.

Esto implica que la definición estándar se sobrescribió mi archivo .xh.Esto resolvió mi problema y ahora la férula sale las variables contaminadas y el flujo de la mancha.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top