From: Sergey Matveev Date: Sat, 21 Jan 2023 18:57:29 +0000 (+0300) Subject: Парсинг X.509 сертификатов в Си X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=cd7828b1e25e657ea5a853a1bebbca7453a76b1b;p=stargrave-blog.git Парсинг X.509 сертификатов в Си 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 не рекомендуется. А я все свои проекты всё равно с ним собираю. Лишь считанное количество игнорирований есть в коде * Нет рекурсиям ---