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

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
06-Окт-2022 12:56

Разработчики проекта 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
===========

Похожие новости: Теги для поиска: #_llvm, #_buffer, #_cpp
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 03:19
Часовой пояс: UTC + 5