Компания Microsoft открыла систему динамической проверки указателей для кода на языке Си

2016-06-16

Компания Microsoft перевела в разряд открытых проектов Checked C, расширение для языка Си, вводящее дополнительные статические и динамические проверки для выявления и блокирования типовых ошибок, таких как переполнения буферов, выход за границы выделенной области памяти и некорректное приведение типов. Наработки открыты под лицензией MIT. Практические реализации расширения Checked C подготовлены для LLVM и Clang, и доступны под свободной лицензией NCSA (лицензия LLVM). Спецификация с описанием Checked C включает 140 страниц.

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