Fil-C делает setjmp/longjmp и ucontext безопасными для памяти

Fil-C, диалект C с безопасной памятью, теперь поддерживает setjmp/longjmp и API ucontext (setcontext, getcontext, makecontext, swapcontext) без повреждения стека или нарушений способностей. Эта возможность появилась в версии 0.680 и доступна при сборке из исходных кодов.
Проблема контекстных API
Эти API печально известны своей небезопасностью, поскольку неправильное использование может восстановить висящий стек. Распространенные ошибки включают:
- Вызов
setjmpилиgetcontextв функции с последующим выходом — сохраненный контекст указывает на кадр стека, который больше не существует. - Завершение потока, а затем попытка восстановить выполнение на освобожденном стеке.
- Создание контекста с
makecontextна стеке, освобождение этого стека, а затемswapcontextилиsetcontextна него. - Передача текущего исполняемого контекста в качестве второго аргумента
swapcontext(переключение на самого себя).
В стандартном C («Yolo-C») такие ошибки вызывают неявное повреждение стека, трудноотлаживаемые сбои и потенциальные уязвимости безопасности. В Fil-C все подобные случаи приводят к панике в момент неправильного использования.
Как Fil-C обеспечивает безопасность памяти
Подход Fil-C различается для setjmp/longjmp и ucontext. Для setjmp/longjmp ключевая проблема заключается в том, что setjmp возвращается дважды — при вызове и после longjmp. Сохранение контекста требует от компилятора правильной работы с изменчивыми (volatile) переменными, но Fil-C гарантирует, что восстановление контекста никогда не обращается к освобожденной или недопустимой памяти.
Для ucontext Fil-C управляет стеками так, что операция либо допустима, либо вызывает панику, поскольку висящие кадры стека просто невозможны.
Пример: setjmp/longjmp в Fil-C
Следующая программа демонстрирует поведение:
#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("Should not get here.\n");
return 1;
}
Эта программа выводит x = 666 и завершается. Без volatile компилятор может оптимизировать и вывести 42. Fil-C не меняет семантику оптимизации, но предотвращает повреждение памяти в любом случае.
Для кого это?
Для разработчиков, использующих ucontext-подобные корутины (например, Boost fibers) или setjmp/longjmp для обработки исключений в C-программах, желающих обезопасить память.
📖 Читать полный источник: HN AI Agents
👀 Смотрите также

Критические уязвимости безопасности OpenClaw устранены в версии 2026.3.28.
Версия OpenClaw 2026.3.28 исправляет 8 критических уязвимостей в системе безопасности, обнаруженных Ant AI Security Lab, включая обход песочницы, повышение привилегий и риски SSRF. Пользователям версий ≤2026.3.24 следует немедленно обновиться.
Статический анализ 48 приложений, сгенерированных ИИ: 90% имели уязвимости в безопасности
Разработчик проверил 48 публичных GitHub-репозиториев, созданных с помощью Lovable, Bolt и Replit. 90% из них имели хотя бы одну уязвимость. Распространенные проблемы: пробелы в аутентификации (44%), функции Postgres SECURITY DEFINER (33%), BOLA/IDOR (25%) и закоммиченные секреты (25%).

Пользователь OpenClaw делится стратегией балансировки автономии агентов и веб-безопасности.
Пользователь OpenClaw описывает свою текущую задачу: балансирование автономности агентов с безопасностью, особенно в отношении доступа в интернет и рисков инъекции промптов. Они предлагают решение с использованием сегментов агентов с 'низким доверием' и 'высоким доверием' с этапом одобрения человеком.

Многосообщенная инъекция промптов: атака с использованием образа «Вымышленное существо» против Claude
Атака, которая за три сообщения создает вымышленное правило, а затем призывает призрака для его активации — каждое сообщение по отдельности безвредно. Схема независимо сходится у разных атакующих.