]> Sergey Matveev's repositories - stargrave-blog.git/commit
Списки запрещённых Си функций в git и Microsoft
authorSergey Matveev <stargrave@stargrave.org>
Sun, 7 Mar 2021 08:54:20 +0000 (11:54 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 7 Mar 2021 09:28:56 +0000 (12:28 +0300)
commitd9a8dfe35de9fbd81cecefffda022ee42e5e7ce9
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent2c6d32988f772f53438892a2ee523db85f79f7f0
Списки запрещённых Си функций в git и Microsoft

https://news.ycombinator.com/item?id=20792938
https://news.ycombinator.com/item?id=26353025
Вот чего мне не хватало (да и не хватает до сих пор), так это
современного источника мудрости по Си. Открываешь старые книжки по Си и
видишь что там явно плохие практики, очень опасные. Про всякие штуки
типа -ffunction-sections (очень помогающие) или про -fstack-protector-all
узнаю чисто случайно. Хотя... может я узнаю про них когда приходит время?

И вот я мельком где-то просто видел и слышал что всякие strcpy и strcat
являются опасными и не рекомендованными. Но я на Си и не писал прежде.
Но а где мне найти вообще подборку хороших практик? Всё что я видел --
сильно разрозненные и не пересекающиеся множества знаний.

И вот две ссылки на забаненные функции. И мне они очень понравились тем,
что я по сути не узнал ничего нового. Своей головой, читая описания этих
функций в man-ах, понимал что или проблемы с thread-safety/reentrancy
или с возможностями выхода за границы. Получается что яростно
неправильных фунок не так много и я самостоятельно понимал их опасность.
Настроение поднимается.

А ещё Microsoft удивляет. Недавно вот выяснилось что всякие защиты в
софте (5916b1b5c4827dccf0a7ced477a8e7d6de45908f) они применяют очень
давно и вроде как довольно активно, поболее чем FreeBSD. Хотя наверное
тут и нечему удивляться: ведь у них на порядки больше пользователей. А
сейчас приятно удивляет тем, что Microsoft основной потребитель функций
из K-appendix-а C11 (12f6e5616982751e2f14a8c01cd503cb55f238ed): функций
с _s суффиксом, который типа secure. Хотя они же их и разрабатывают. BSD
системы их тоже поддерживают, а в glibc вообще под чистую отсутствует.