Fil-C es un dialecto de C con seguridad de memoria que, en su versión 0.680, añade soporte para las API ucontext (setcontext, getcontext, makecontext y swapcontext) además de las clásicas setjmp y longjmp. Estas funciones, ampliamente usadas para implementar manejo de excepciones, corutinas y fibras (por ejemplo, en Boost), resultan especialmente difíciles de blindar porque su uso indebido puede provocar la restauración de una pila ya liberada, una de las causas más confusas de corrupción de memoria y posibles vectores de ataque.
El documento detalla por qué la implementación de setjmp/longjmp es compleja: setjmp devuelve dos veces, lo que obliga al compilador a tratar las variables locales con cuidado —de ahí el uso de volatile— y a distinguir entre ubicaciones de pila reales y spill slots que el compilador puede reasignar. Fil-C resuelve estos casos analizando cuándo las ubicaciones de pila están vivas en el momento del longjmp.
En cuanto a las API ucontext, Fil-C previene usos peligrosos como saltar a un contexto cuya pila ya se liberó o invocar swapcontext con los argumentos invertidos: en el C tradicional (Yolo-C) esto puede ejecutar código sobre una pila colgante; en Fil-C se convierte en un error detectable que aborta el programa de forma controlada. La arquitectura de Fil-C garantiza que ninguna restauración de contexto puede ejecutarse sobre una pila colgante, eliminando así una clase entera de fallos difíciles de depurar.
