Организация Rust Foundation опубликовала статистику, в соответствии с которой из 127 тысяч значительных пакетов, представленных в каталоге crates.io, более 24 тысяч (19.11%) используют ключевое слово unsafe для включения возможностей, допускающих небезопасную работу с памятью в отдельных блоках кода, таких как разыменование указателей, вызов внешних функций или изменение статических переменных. 34.35% пакетов совершают прямые вызовы функций из других crate-пакетов, в которых используется unsafe.
Отмечается, что в большинстве случаев использование unsafe обусловлено вызовом кода, написанного на других языках или обращения к библиотекам на С/C++. Пакетом с наибольшим числом вызовов в контексте unsafe признан развиваемый компанией Microsoft crate-пакет windows, являющийся обвязкой над API платформы Windows. Данный пакет насчитывает 36 млн. загрузок. Unsafe также используется в самых популярных пакетах syn (470 млн загрузок), proc-macro2 (354 млн загрузок) и libc (345 млн загрузок).
Для выявления проблем в коде, выполняемом в контексте unsafe, проектом развивается интерпретатор Miri, позволяющий определять обращения вне границ буферов, использование памяти после её освобождения, некорректное использование неинициализированных данных, нарушение инвариантность базовых типов (например, несоответствие bool значениям 0 или 1), нарушение правил владения объектами, возникновение состояний гонки и утечки памяти.
Источник: OpenNET.
Все посты подряд / Информационная безопасность / Хабр