Наконец-то появились 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-битного программного обеспечения. Поэтому я рекомендую вам прочитать эти материалы:

Но что самое главное, недостаточно просто осознавать эти ошибки. Правда, вы убедитесь, что ваш новый код написан правильно. А как же старый код? Сколько у него таких дефектов и как их уловить?

Я дам вам подсказку. Вам нужно использовать анализатор PVS-Studio, а точнее его набор 64-битных диагностик.

Чтобы убедиться, что ошибка с переполнением является распространенной, взгляните на предупреждение, которое анализатор выдает на строке «size_t bytes = n * m;».

Диагностическое сообщение: V101 Неявное преобразование типа присваивания в тип memsize.

Обратите внимание на его номер — V101. Это было самое первое 64-битное диагностическое правило, которое мы внедрили. Опасности, о которых сегодня говорят программисты, были нам давно очевидны. Так что не сомневайтесь: PVS-Studio — отличный инструмент для отлова 64-битных ошибок.

Примечание. Будьте готовы к большому количеству ложных срабатываний, генерируемых 64-разрядной диагностикой. Их нельзя избежать. Анализатор не знает, считает ли программа количество дней в месяце или вычисляет размер какого-то большого файла. Довольно часто PVS-Studio не может понять, какие значения хранятся в переменных и не произойдет ли переполнение. К сожалению, лучшей альтернативы в любом случае не найти. PVS-Studio — лидер в области обнаружения 64-битных ошибок. И он также предлагает множество механизмов подавления ложных срабатываний.

Статья опубликована с разрешения автора.