Функции _s
являются дополнительными ( Приложение K стандарта C11 ).Они широко рассматриваются как «не очень полезные».
В ответах на мой вопрос Используете ли вы TR-24731 «безопасные» функции? , вы можете найти информацию о том, гдепроблемы со стандартной спецификацией, такие как принципиальные различия между стандартом и реализацией Microsoft.TR 24731-1 был техническим отчетом комитета по стандартам С.Отчет был включен почти дословно - с дополнительной, ранее опущенной функцией IIRC - в стандарт C11 как (необязательное, но «нормативное» Приложение K).Также есть TR 24731-2 для другого набора функций - без суффикса _s
.Он столкнулся с сопротивлением по другому набору причин.
Кроме того, перед Комитетом по стандартизации C существует предложение , чтобы функции были удалены из следующего пересмотра стандарта:
Эта статья представляет собой прямое и убедительное изложение причин, по которым TR-24731 (*_s()
) функции не получили широкого распространения.
Основные причины:
- Проблема обнаруживается только один раз, затем устраняется, и тогда функция
*_s()
не нужна. - Это очень затрудняет тестирование функций
*_s()
или кода, который их использует. - Нелегко интегрировать новые функции в старый код (гдебыло бы больше пользы).
- Функции по сути замедляют работу программного обеспечения с обширной, но избыточной проверкой.
Подробнее см. в документе.Документ заканчивается разделом:
Предлагаемое техническое исправление
Несмотря на то, что прошло более десяти лет с момента первоначального предложения и почти десять лет с момента ратификации ISO / IEC TR 24731-1:2007 г., и почти через пять лет после введения интерфейсов проверки границ в стандарт C не появилось жизнеспособных соответствующих реализаций.API продолжают вызывать споры, и исполнители продолжают отклонять запросы на их реализацию.
Дизайн интерфейсов проверки границ, хотя и с благими намерениями, страдает от слишком большого числа проблем, которые необходимо исправить.Использование API-интерфейсов привело к ухудшению качества и снижению безопасности программного обеспечения, чем использование устоявшихся подходов или современных технологий.Более эффективные и менее навязчивые подходы стали обычным явлением и часто предпочитаются как пользователями, так и экспертами по безопасности.
Поэтому мы предлагаем исключить приложение K из следующей редакции стандарта C или исключить его, а затем удалить,