Проект LLVM развивает средства для безопасной работы с буферами в C++

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 2512
Зарегистрирован: 20.08.2022

#

Проект LLVM развивает средства для безопасной работы с буферами в C++
Дата публикации:Thu, 06 Oct 2022 10:54:38 +0300


Разработчики проекта LLVM предложили ряд изменений, направленных на усиление безопасности критически важных проектов на языке C++ и предоставление средств для исключения ошибок, вызванных выходом за допустимые границы буферов. Работа сосредоточена в двух направлениях: предоставление модели разработки, позволяющей безопасно работать с буферами, и проведение работы по усилению защиты стандартной библиотеки функций libc++.

Предлагаемая модель безопасного программирования для C++ предполагает использование предоставляемых стандартной библиотекой классов при работе с буферами вместо манипуляций с голыми указателями. Например, предлагается использовать классы std::array, std::vector и std::span, в которые будет добавлена проверка выхода за границы выделенной памяти, производимая во время выполнения.

Для борьбы с опасными приёмами программирования в clang предлагается выводить предупреждения компилятора для всех арифметических операций с указателями, похожие на предупреждения linter-а clang-tidy, выводимые при использовании флага "cppcoreguidelines-pro-bounds-pointer-arithmetic", поддержка которого появится в выпуске LLVM 16. Для включения подобных предупреждений в clang будет добавлен отдельный флаг, не активный по умолчанию.

В libc++ планируется реализовать опциональный режим усиленной защиты, при включении которого во время выполнения будут отлавливаться некоторые ситуации, приводящие к неопределённому поведению. Например, в классах std::span и std::vector будет отслеживаться обращение за пределы выделенной области памяти, в случае выявления которого программа будет аварийно завершаться. Разработчики считают, что добавление подобных изменений сохранит соответствие libc++ стандартам C++, так как выбор метода обработки случаев неопределённого поведения лежит на разработчиках библиотеки, которые могут в том числе трактовать неопределённое поведение как сбой, требующих завершения работы программы.

Производимые во время выполнения проверки в libc++ планируют разделить на категории, которые можно будет включать по отдельности. Некоторые из предложенных проверок, которые не приводят к усложнению операций или изменению ABI, уже реализованы в рамках безопасного режима libc++ (safe mode).

Дополнительно планируется подготовить инструментарий для корректировки кода, позволяющий заменять переменные с голыми указателями на контейнеры и применять альтернативные обработчики в ситуациях, когда контейнер не может напрямую заменить указатель (например, конструкция "if(array_pointer)" может быть преобразована в "if(span.data()"). Корректировки могут применяться не только к локальным переменным, но и к параметрам типов с указателями.





Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=57876

Жизнь за Нер'зула!

Ответить