From cd7828b1e25e657ea5a853a1bebbca7453a76b1b Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 21 Jan 2023 21:57:29 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20X.5?= =?utf8?q?09=20=D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0?= =?utf8?q?=D1=82=D0=BE=D0=B2=20=D0=B2=20=D0=A1=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit https://www.sstic.org/media/SSTIC2019/SSTIC-actes/journey-to-a-rte-free-x509-parser/SSTIC2019-Article-journey-to-a-rte-free-x509-parser-ebalard_mouy_benadjila_3cUxSCv.pdf Статья рассматривает проблемы парсинга сертификатов на Си. Это, само собой, жопа, из-за сложности как структур, так и самого ASN.1. Понравился раздел про developer constraints, которые они хотят использовать. * C99, без VLA -- вот и я тоже пишу на C99, но чтобы никаких эти VLA, ибо это открывает врата в ад. Полностью отказываться от C99 из-за этого VLA я не хочу * Отсутствие динамического выделения памяти. В моих программах malloc вообще редко когда встречается. Чаще всего я просто выделяю буферы достаточного размера (речь про работу с данными по сети). Пускай часть памяти и не будет использована полностью, но зато куда более простой код, наверняка и эффективный, плюс меньше возможных ошибок связанных с памятью кучи * Ограниченное использование указателей на функции * Отсутствие внешних зависимостей * Использование const и static квалификаторов. Про static компилятор подсказывает всегда, как и про const, но про него и так не забываю * Использование беззнаковых целых чисел ограниченной длины (uint*_t). Тоже предпочитаю их, когда явно есть возможность использования * Строгие опции компиляции. Тут они используют -Weverything, который даже в самой документации к Clang не рекомендуется. А я все свои проекты всё равно с ним собираю. Лишь считанное количество игнорирований есть в коде * Нет рекурсиям -- 2.48.1