[О блоге]
[наверх]
[пред]
[2023-01-21 21:57:29+03:00]
[cd7828b1e25e657ea5a853a1bebbca7453a76b1b]
Темы: [c][crypto]
Парсинг 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 не рекомендуется. А я все свои
проекты всё равно с ним собираю. Лишь считанное количество
игнорирований есть в коде
* Нет рекурсиям
[оставить комментарий]
- комментарий 0:
From: kmeaw
Date: 2023-01-22 00:36:22Z
> Strict compilation options
> clang -Weverything -Werror
Стоит очень аккуратно использовать опции типа -Weverything вместе с
-Werror. Я старась делать так, чтобы такие опции включались при
разработке, но не попадали в релизные тарболлы.
В противном случае это может стать источником проблем для мейнтейнера
пакета, ведь новая версия компилятора может содержать новые
предупреждения, которых на более старой версии, используемой
разработчиком, ещё не было.
- комментарий 1:
From: Sergey Matveev
Date: 2023-01-22 10:22:55Z
*** kmeaw [2023-01-22 00:34]:
>Стоит очень аккуратно использовать опции типа -Weverything вместе с
>-Werror. Я старась делать так, чтобы такие опции включались при
>разработке, но не попадали в релизные тарболлы.
Полностью согласен! Релиз и разработка это вещи раздельные. И,
действительно, сам напарывался на то, что при обновлении компилятора у
меня новые ошибки появлялись.