2026-03-04 Исправлена ошибка подключения заголовочных файлов стандартной библиотеки C, отсутствующих в некоторых встроенных ОС, в соответствующих заголовочных файлах с fortified-версиями функций.
Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 33 (2026-03-04) 2026-02-12 В
-Safe3добавлена опция-fkeep-div-by-zeroдля реализации безопасных преобразований в исходном и машинном кодe операций целочисленного деления и взятия остатка, когда делитель равен нулю.Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 32 (2026-02-12) 2026-02-03 В
-Safe3добавлена опция-fkeep-oversized-shiftsдля реализации безопасных преобразований в исходном и машинном кодe операций побитового сдвига для случаев, когда величина сдвига отрицательная или превышает ширину типа сдвигаемого значения.Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 31 (2026-02-03) 2025-12-30 В соответствии с новой редакцией ГОСТ 2026 года в
-Safe3добавлено принудительное включение опций:-D_GLIBCXX_ASSERTIONSи-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FASTвключают в libstdc++ и libc++, реализациях стандартной библиотеки C++, дополнительные проверки безопасности, которые позволяют обнаруживать опасные операции при работе с контейнерами;-Wl,-z,relro,-z,nowвключает выполнение динамическим загрузчиком всех релокаций и запрет записи в глобальную таблицу смещений после загрузки исполняемых файлов и динамических библиотек;-Wl,-z,noexecstackзапрещает исполнение кода на стеке.
Опция
-ftrivial-auto-var-init=zero, инициализирующая переменные из автоматической памяти нулями, перенесена из-Safe2в-Safe3.Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 30 (2025-12-30) 2025-12-25 Добавлен демон clang-licensed, запускаемый Safelang для проверки лицензии.
Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 29 (2025-12-25) 2025-12-25 Изменение опций статической рандомизации:
-frandom-func-and-globals-reorderразделена на две независимые опции-frandom-func-reorderи-frandom-globals-reorder;-floc-var-perпереименована в-frandom-locals-reorder;-fadd-loc-var=переделана в похожую опцию-fadd-random-locals-percent=, которая задаёт добавляемое в каждой функции количество переменных в процентах от количества существующих локальных переменных в соответствующей функции. Значение опции, равное-1, задаёт значение по умолчанию равное 50%. А ограничение на число добавляемых переменных сверху составляет 100 переменных;- добавлена опция
-fstatic-random-reorder, которая включает рандомизацию функций и глобальных переменных в модуле, а также рандомизацию локальных переменных вместе с добавлением случайных локальных переменных (по умолчанию 50% от общего числа) в каждой функции.
Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 28 (2025-12-25) 2025-12-25 Добавлены опции для включения уникального распределения автоматической и статической памяти на этапе компиляции:
-frandom-func-reorderвключает уникальное распределение памяти для машинного кода функций для каждого процесса трансляции;-frandom-func-and-globals-reorderвключает уникальное распределение памяти для машинного кода функций и глобальных переменных программного модуля в соответствующей области памяти для каждого процесса трансляции;-floc-var-perвключает уникальное распределение локальных переменных функций для каждого процесса трансляции;-fadd-loc-var=задаёт число фиктивных переменных, добавляемых в каждую функцию для каждого процесса трансляции. Значение опции, равное-1, задаёт случайное количество фиктивных переменных;- распределение памяти конфигурируется целочисленным параметром (ключом),
при этом для одинаково задаваемых ключей и одного и того же исходного
кода компилятор создаёт одинаковое распределение памяти. Для
конфигурации ключа используется опция
-mllvm -rng-seed=.
Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 27 (2025-12-25) 2025-12-17 В
-Safe3добавлено принудительное включение заголовочных файлов с fortified-версиями функций стандартной библиотеки C, защищающими от переполнения буфера, если во время компиляции возможно определить выражение для его размера. Также отключается замена функций стандартной библиотеки для работы с памятью и строками на эквивалентные им последовательности машинных инструкций. Реализовано предупреждение на-Safe3и ошибка на-Safe2при использовании функцииgets.Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 20 (2025-12-17) 2025-12-15 Исправлено аварийное завершение работы компилятора при сборке кода для
wasm32-wasiс использованием механизма safe exit и опции-fhandle-safe-error-handler=exitили-fhandle-safe-error-handler=abort. Для этого добавлена поддержка вызовов функций стандартной библиотеки_Exitиabortдля WebAssembly.Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 19 (2025-12-15) 2025-04-18 В
-Safe1добавлено принудительное включение санитайзеров, проверяющих, что:- значение типа
boolравно 0 или 1; - при преобразовании значения
floatвintне происходит переполнения; - правый операнд побитового сдвига неотрицателен и меньше ширины типа;
- не происходит знакового переполнения;
- чтение или запись совершаются только по указателю, чей адрес выровнен по размеру операнда;
- нет использования нулевого указателя;
- чтение или запись осуществляется по индексу, не выходящему за пределы массива;
- нет переполнения типа указателя;
- при непрямом вызове сигнатура функции соответствует типу указателя на неё;
- во встроенные функции передаются корректные параметры;
- не передаётся управление коду, помеченному как недостижимый;
- нет деления на ноль или взятия остатка от нуля;
- массив, выделяемый в автоматической памяти, имеет положительный размер;
- значение перечисляемого типа в диапазоне представимых значений этого типа;
- нет использования памяти за пределами объекта.
Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 12 (2025-04-18) - значение типа
2025-04-18 В
-Safe2добавлено принудительное включение опций, обеспечивающих следующую функциональность:- автоматическая инициализация переменных из автоматической памяти нулями;
- остановка компиляции с ошибкой для предупреждений 3 класса.
Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 10 (2025-04-18) 2025-04-18 В
-Safe3добавлено принудительное включение опций, обеспечивающих следующую функциональность:- предотвращение оптимизаций, игнорирующих возможность переполнения знаковых целых, совпадения значений указателей разных типов, разыменования нулевого указателя;
- механизм защиты стека;
- генерация позиционно-независимого кода;
- предупреждения о выходе за границы массива, делении на ноль и побитовом сдвиге, правый операнд которого отрицателен либо не меньше размера левого операнда (в битах).
Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 9 (2025-04-18) 2025-04-18 Добавлена опция
-fhandle-safe-error=, включающая safe exit для функцийsafe-fortify,stack-protector,safe-sanitize. Опция-fhandle-safe-error-handler=позволяет выбрать способ аварийного завершения программы:exit(_Exitиз libc),exit_safe(__builtin___exit_safe, реализованный в компиляторе),abort(из libc) илиtrap(__builtin_trap). Дляexitиexit_safeвозможно задать код возврата с помощью опции-fhandle-safe-error-exit-code=. Отключить safe exit для части функций или полностью можно с помощью опций-fno-handle-safe-error=и-fno-handle-safe-error-handler.Поддерживаемые версии: safelang-19
Ветка Версия (дата) safelang-19 8 (2025-04-18)