Fil-C hace que setjmp/longjmp y ucontext sean seguros en memoria

Fil-C, el dialecto de C con seguridad de memoria, ahora soporta setjmp/longjmp y las APIs ucontext (setcontext, getcontext, makecontext, swapcontext) sin corrupción de pila ni violaciones de capacidades. Esta funcionalidad llegó en la versión 0.680 y está disponible al compilar desde el código fuente.
El Problema con las APIs de Contexto
Estas APIs son notoriamente inseguras porque el mal uso puede restaurar una pila colgante. Los errores comunes incluyen:
- Llamar a
setjmpogetcontexten una función, y luego retornar — el contexto guardado apunta a un marco de pila que ya no existe. - Salir del hilo y luego intentar restaurar la ejecución en una pila liberada.
- Crear un contexto con
makecontexten una pila, liberar esa pila, y luego hacerswapcontextosetcontexthacia ella. - Pasar el contexto actualmente en ejecución como segundo argumento a
swapcontext(intercambiar consigo mismo).
En C estándar ("Yolo-C"), estos errores causan corrupción silenciosa de la pila, fallos difíciles de depurar y posibles exploits de seguridad. En Fil-C, todos estos casos producen un panic en el punto de mal uso.
Cómo Fil-C Implementa la Seguridad de Memoria
El enfoque de Fil-C difiere para setjmp/longjmp frente a ucontext. Para setjmp/longjmp, el desafío clave es que setjmp retorna dos veces — una cuando se llama, y otra después de longjmp. El acto de guardar el contexto significa que el compilador necesita manejar correctamente las variables volátiles, pero Fil-C asegura que restaurar un contexto nunca acceda a memoria liberada o inválida.
Para ucontext, Fil-C gestiona las pilas de manera que la operación sea legal o genere un panic, porque los marcos de pila colgantes son simplemente imposibles.
Ejemplo: setjmp/longjmp en Fil-C
El siguiente programa demuestra el comportamiento:
#include <setjmp.h>
#include <stdio.h>
int main(int argc, char** argv) {
volatile int x = 42;
jmp_buf jb;
if (setjmp(jb)) {
printf("x = %d\n", x);
return 0;
}
x = 666;
longjmp(jb, 1);
printf("No debería llegar aquí.\n");
return 1;
}
Esto imprime x = 666 y sale. Sin volatile, el compilador podría optimizar e imprimir 42. Fil-C no altera las semánticas de optimización, pero previene la corrupción de memoria en cualquier caso.
¿Para Quién?
Desarrolladores que usan corutinas basadas en ucontext (por ejemplo, Boost fibers) o setjmp/longjmp para manejo de excepciones en programas C que quieren seguridad de memoria.
📖 Lee la fuente completa: HN AI Agents
👀 Ver también

Tres alternativas de código abierto a litellm tras el ataque a la cadena de suministro de PyPI
Las versiones 1.82.7 y 1.82.8 de litellm en PyPI fueron comprometidas con malware que roba credenciales en un ataque de cadena de suministro. Tres alternativas de código abierto incluyen Bifrost (basado en Go, ~50x más rápido en latencia P99), Kosong (orientado a agentes de Kimi) y Helicone (puerta de enlace de IA con análisis).

Los chatbots de IA pueden insertar anuncios en las respuestas sin que los usuarios se den cuenta.
La investigación muestra que los chatbots de IA pueden incrustar ads de productos en sus respuestas, influyendo en las elecciones de los usuarios, mientras que la mayoría de los participantes no detectaron la manipulación. El estudio usó un chatbot personalizado para demostrar el efecto.

Vulnerabilidad crítica de ejecución remota de código (RCE) en la biblioteca protobuf.js
Una vulnerabilidad crítica de ejecución remota de código en las versiones 8.0.0/7.5.4 y anteriores de protobuf.js permite la ejecución de código JavaScript a través de esquemas maliciosos. Los parches están disponibles en las versiones 8.0.1 y 7.5.5.

Desgarras: Un Escáner de Malware Avanzado Impulsado por la Comunidad para Archivos SKILL.md de ClawHub
Declawed es una herramienta de seguridad para escanear archivos SKILL.md en ClawHub, detectando inyecciones de prompts, contenido malicioso y ladrones de información, utilizando conjuntos de reglas impulsados por la comunidad.