es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Coverity está reportando problemas de sobrepaso de argumentos de búfer.

La herramienta de análisis estática Coverity está mostrando el siguiente mensaje de error:
overr un-buffer-arg: Llamar a la función “snprintf” con “keyname + len” y “256U” es sospechoso debido a que “key_name” apunta a un búfer de 256 bytes y la llamada a la función puede acceder a “(char *)(key_name + len) + 255U”.

char key_name[256];

u_int32_t  len;

snprintf(key_name+len, 256, "%s", student->name);

Por favor, sugiere cómo corregir este problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error generado por Coverity indica que llamar a snprintf con key_name+len y 256U es sospechoso. Esto se debe a que key_name apunta a un búfer de 256 bytes y la llamada a la función puede acceder a (char *)(key_name+len) + 255U. Esto sugiere una posible vulnerabilidad de desbordamiento de búfer.

    Para solucionar este problema, la llamada a snprintf debe modificarse para asegurarse de que no se acceda más allá del final del búfer. Una forma de hacer esto es calcular el tamaño restante del búfer y pasarlo como segundo argumento a snprintf en lugar de usar un valor codificado de 256.

    Ejemplo:

    char key_name[256];
    u_int32_t len;
    
    size_t remaining_size = sizeof(key_name) - len;
    snprintf(key_name + len, remaining_size, "%s", student->name);
    

    En este ejemplo, el tamaño restante del búfer se calcula como sizeof(key_name) - len, lo que asegura que la llamada a snprintf no acceda más allá del final de key_name. Esto ayuda a evitar la vulnerabilidad de desbordamiento de búfer identificada por Coverity.

Comments are closed.