2024-11-21 Исправлен некорректный запрет
gets
в случае, если до#include stdio.h
словоgets
определяется как макрос (например:#define gets my_gets
).Ошибка проявлялась следующим образом:
- Запрет срабатывал на
my_gets
вместоgets
. - Cнятие определения макроса (
#undef gets
) после#include <stdio.h>
приводило к обходу запретаgets
при его использовании ниже.
Теперь такой макрос отключается (
#undef gets
) внутри собственных fortify headers.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 133 (2024-11-21) safec9 330 (2024-11-21) safec10 113 (2024-11-21) safe-11.4 122 (2024-11-21) safe-12.3 83 (2024-11-21) safe-13.3 75 (2024-11-21) - Запрет срабатывал на
2024-11-21 Исправлена ошибка собственных fortify headers, встретившаяся в libtar. Ошибка заключалась в некорректной обработке функций
[v]snprintf
с-std=c89
. Эти функции были добавлены cо стандарта C99, что не было должным образом учтено в заголовочных файлах. Это приводило к их неявному объявлению и, как следствие, к потенциальному неопределенному поведению.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 130 (2024-11-21) safec9 327 (2024-11-21) safec10 110 (2024-11-21) safe-11.4 119 (2024-11-21) safe-12.3 80 (2024-11-21) safe-13.3 72 (2024-11-21) 2024-11-12 Исправлено поведение ThreadSanitizer при выводе summary: санитайзер ранее не распознавал стековые фреймы, порождённые вызванными из libtsan функциями, как внутренние, вследствие чего некорректно выводилось место ошибки.
Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 129 (2024-11-12) safec9 326 (2024-11-12) safec10 109 (2024-11-12) safe-11.4 118 (2024-11-12) safe-12.3 79 (2024-11-12) safe-13.3 71 (2024-11-12) 2024-11-07 Исправлен ICE
-Wclobbered
, встретившийся в Boost, вызванный некорректной инструментацией UndefinedSanitizer, вследствие которой вызовsetjmp
находился не на первом месте в базовом блоке.Поддерживаемые версии: safec8 — safe-12.3
Ветка Версия (дата) safec8 128 (2024-11-07) safec9 325 (2024-11-07) safec10 108 (2024-11-07) safe-11.4 117 (2024-11-07) safe-12.3 78 (2024-11-07) safe-13.3 Не требуется 2024-11-06 Исправлен ICE
-Wclobbered
, встретившийся в LXC. Причиной является неожиданная оптимизация, в ходе которой атрибутreturns_twice
был утерян после инлайнинга функции.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 127 (2024-11-06) safec9 324 (2024-11-06) safec10 107 (2024-11-06) safe-11.4 116 (2024-11-06) safe-12.3 77 (2024-11-06) safe-13.3 69 (2024-11-06) 2024-10-24 В конфигурацию сборки добавлен флаг
--enable-checking=release
, отключающий внутренние проверки компилятора, предназначенные для разработчиков.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 125 (2024-10-29) safec9 322 (2024-10-29) safec10 105 (2024-10-29) safe-11.4 114 (2024-10-29) safe-12.3 75 (2024-10-29) safe-13.3 67 (2024-10-24) 2024-09-27 Обновлены binutils до 2.41 и glibc до 2.40.
Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 124 (2024-09-27) safec9 321 (2024-09-27) safec10 104 (2024-09-27) safe-11.4 113 (2024-09-27) safe-12.3 74 (2024-09-27) safe-13.3 66 (2024-09-27) 2024-08-02 Добавлена новая опция
--print-safe-options=<level>
, которая распечатывает набор опций безопасного компилятора, эквивалентный опции-Safe<level>
. (*)Эта опция помогает оценить сложность перехода на использование полноценного безопасного компилятора класса
level
. Также она позволяет минимизировать комбинацию опций при отладке проблем.(*): Получаемый набор опций имеет следующие отличия от
-Safe<level>
.-
Не используется механизм, запрещающий отключение отдельных опций.
Благодаря этому можно оценить общее число проблем, выявляемых безопасным компилятором заданного класса на кодовой базе. При использовании самих
-Safe
-опций остановка трансляции или выполнения не позволяет увидеть все проблемные места сразу. -
Допускается понижение классов предупреждений (например, error до warning) для отдельного файла или функции через прагмы
pragma GCC diagnostic
. -
В него не входят флаги, передаваемые компоновщику.
В этой версии распечатка не включает флаги, передаваемые компоновщику. Поэтому для эмуляции поведения
-Safe1
нужно передать дополнительные опции либо выполнить фазы компиляции и линковки отдельными командами:gcc -c -O2 $(gcc -print-safe-options=1) foo.c bar.c && gcc -O2 -Safe1 foo.o bar.o
Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 120 (2024-08-16) safec9 318 (2024-09-20) safec10 100 (2024-09-20) safe-11.4 109 (2024-09-20) safe-12.3 70 (2024-08-16) safe-13.3 63 (2024-08-02) -
2024-06-04 Исправлена ошибка в работе опции
--dump-sbom
в C++. В этом сценарии в выходном JSON содержимое поляdependencies
было пустым вне зависимости от наличия подключаемых заголовочных файлов.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 115 (2024-06-04) safec9 313 (2024-06-04) safec10 96 (2024-06-04) safe-11.4 105 (2024-06-04) safe-12.3 66 (2024-06-05) safe-13.3 58 (2024-07-11) 2024-05-27 Исправлено ложное срабатывание
-fsanitize=function
(входит в-Safe1
), встретившееся на QEMU.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 114 (2024-05-30) safec9 312 (2024-05-30) safec10 95 (2024-05-31) safe-11.4 104 (2024-05-31) safe-12.3 65 (2024-05-27) safe-13.3 60 (2024-07-11) 2024-04-16 Исправлена работа опции
--dump-sbom
при использовании режима препроцессирования без компиляции. В этом сценарии выходной JSON не содержал поляdependencies
.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 113 (2024-04-17) safec9 311 (2024-04-17) safec10 94 (2024-04-16) safe-11.4 103 (2024-04-16) safe-12.3 63 (2024-05-02) safe-13.3 58 (2024-07-11) 2024-03-14 Предупреждения, контролируемые опцией
-Warray-bounds
в прошлых версиях безопасного компилятора, разбиты на две группы. Часть предупреждений вынесена под опцию-Wextra-array-bounds
.Первая группа теперь включает только срабатывания
-Warray-bounds
компилятора GCC соответствующей версии. Поведение, контролируемое опцией-Warray-bounds
безопасного компилятора, приведено в соответствие с одноимённой опцией GCC.Во вторую группу вынесены дополнительные срабатывания, реализованные ранее в безопасном компиляторе. Для управления предупреждениями второй группы добавлена опция
-Wextra-array-bounds
.Предупреждения, контролируемые новой опцией, по-прежнему включены в набор предупреждений
-Safe3
и более высоких классов защищённости. Однако теперь они не приводят к остановке трансляции, если опция-Werror=extra-array-bounds
не указана явно.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 110 (2024-04-05) safec9 308 (2024-04-03) safec10 91 (2024-04-03) safe-11.4 102 (2024-03-14) safe-12.3 64 (2024-05-02) safe-13.3 59 (2024-07-11) 2024-03-07 В скрипт
comp_db_parser
добавлена опция--format {all, infiles}
, благодаря которой можно настроить выходные данные: распечатать информацию обо всех исходных файлах, вошедших в программу (all
), или только о файлах, непосредственно переданных как аргументы командной строки компилятора (infiles
).Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 112 (2024-04-16) safec9 310 (2024-04-16) safec10 93 (2024-04-09) safe-11.4 101 (2024-03-07) safe-12.3 63 (2024-05-02) safe-13.3 58 (2024-07-11) 2023-12-13 Добавлена возможность генерации детального SBoM (Software Bill of Materials) с помощью опции
--dump-sbom
. SBoM содержит информацию о компонентах компиляции, зависимостях, конфигурациях и результирующих выходных файлах.Поддерживаемые версии: safec8 — safe-13.3
Ветка Версия (дата) safec8 108 (2024-02-01) safec9 307 (2024-02-20) safec10 90 (2024-02-19) safe-11.4 98 (2023-12-13) safe-12.3 63 (2024-05-02) safe-13.3 58 (2024-07-11)