Наконец-то появились 64-битные ошибки
Как человек неравнодушный к 64-битным ошибкам, решил написать небольшой комментарий к статье «Глючное руководство по безопасности от Apple».
Многие приложения уже перенесены на 64-битную версию и, кажется, работают хорошо. Однако 64-битные ошибки все еще населяют многие из них, подстерегая. Заметить их может только очень внимательный программист. Или анализатор кода PVS-Studio.
Недавно я наткнулся на интересную статью под названием Руководство по безопасности багги от Apple.
Прежде чем перейти к моему комментарию, пожалуйста, сначала прочитайте статью. Что меня там заинтересовало, так это то, что проделав огромную работу и успешно внедрив проверки на переполнение, можно запросто ошибиться в какой-нибудь очень простой вещи — в частности, перемножить две переменные типа int и записать результат в тип size_t. ' Переменная.
Я имею в виду следующую строку:
size_t bytes = n * m;
Рекомендуется заменить на этот:
size_t bytes = (size_t)n * (size_t)m;
Это очень распространенный тип 64-битных ошибок, которые очень трудно заметить и обнаружить.
Кажется, мир наконец-то столкнулся с тем, что я уже описывал несколько лет назад в своих статьях и руководстве по разработке 64-битного программного обеспечения. Поэтому я рекомендую вам прочитать эти материалы:
- Сборник примеров 64-битных ошибок в реальных программах
- 64-битная лошадь, которая умеет считать
- Разработка 64-битных C/C++ приложений
Но что самое главное, недостаточно просто осознавать эти ошибки. Правда, вы убедитесь, что ваш новый код написан правильно. А как же старый код? Сколько у него таких дефектов и как их уловить?
Я дам вам подсказку. Вам нужно использовать анализатор PVS-Studio, а точнее его набор 64-битных диагностик.
Чтобы убедиться, что ошибка с переполнением является распространенной, взгляните на предупреждение, которое анализатор выдает на строке «size_t bytes = n * m;».
Диагностическое сообщение: V101 Неявное преобразование типа присваивания в тип memsize.
Обратите внимание на его номер — V101. Это было самое первое 64-битное диагностическое правило, которое мы внедрили. Опасности, о которых сегодня говорят программисты, были нам давно очевидны. Так что не сомневайтесь: PVS-Studio — отличный инструмент для отлова 64-битных ошибок.
Примечание. Будьте готовы к большому количеству ложных срабатываний, генерируемых 64-разрядной диагностикой. Их нельзя избежать. Анализатор не знает, считает ли программа количество дней в месяце или вычисляет размер какого-то большого файла. Довольно часто PVS-Studio не может понять, какие значения хранятся в переменных и не произойдет ли переполнение. К сожалению, лучшей альтернативы в любом случае не найти. PVS-Studio — лидер в области обнаружения 64-битных ошибок. И он также предлагает множество механизмов подавления ложных срабатываний.
Статья опубликована с разрешения автора.