El checksum CRC32 se comprueba en las primeras líneas de dpx_parse_header(). Cualquier input mutado por el fuzzer falla aquí al 100%.
Verificación criptográfica con clave secreta en dpx_verify_signature(). Imposible que el fuzzer genere inputs válidos.
Inicialización no determinista en dpx_init(). El mismo input genera comportamientos distintos entre ejecuciones; rompe la reproducibilidad de crashes.
Cuatro capas de validación en dpx_deserialize() bloquean al deserializador principal. Solo se conservan magic bytes (baratos para el fuzzer).
dpx_do_deserialize() asume que la estructura tiene campos no-nulos tras la validación. Se debe añadir verificación defensiva de field.size > 0 antes de cualquier acceso a punteros para evitar crashes espurios.
| Obstáculo | Archivo | Técnica | Riesgo FP | Cobertura ganada | Acción defensiva |
|---|---|---|---|---|---|
| CRC32 header | dpx_parser.cc |
#ifndef FUZZING_… |
Bajo | +86 pp | Ninguna — datos post-checksum no asumen integridad |
| HMAC-SHA256 | dpx_crypto.cc |
#ifndef FUZZING_… |
Bajo | +88 pp | Ninguna — deserializador no usa clave |
| PRNG time(NULL) | dpx_init.cc |
Semilla fija 0xDEADC0DE |
Bajo | Determinismo | Ninguna — semilla solo afecta offsets de jitter |
| Validación 4 etapas | dpx_deserialize.cc |
Skip etapas 2-4 en fuzzing | Medio | +69 pp | Añadir guard field.size > 0 antes de punteros |
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION