[ON] Проект Curl избавился от использования функции strcpy в коде

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6001
ОС: gnu/linux

[ON] Проект Curl избавился от использования функции strcpy в коде

Сообщение rssbot »

Дэниел Cтенберг (Daniel Stenberg), автор утилиты для получения и отправки данных по сети curl, объявил о прекращении использования функции strcpy() в кодовой базе проекта и запрете применения данной функции в дальнейшем. Решение является продолжением инициированного в прошлом году отказа от использования функции strncpy(), копирующей заданное число байт из входящей строки. Применение strncpy() создавало опасность возникновения ошибок из-за пропуска нулевого символа в конце строки или добавочного заполнения нулями.


Обращения к strncpy() были заменены на функцию strcpy(), перед вызовом которой выполнялось выделение памяти под целевой буфер c учётом размера исходной строки или присутствовала проверка соответствия размера исходной строки и целевого буфера. Замена на функцию strlcpy() не была произведена, так как требовалось всегда копировать всю строку целиком или возвращать ошибку.




Теперь все вызовы strcpy() заменены на новую функцию curlx_strcopy(dest, dsize, src, slen). Функция curlx_strcopy() требует указания размера исходного и целевого буфера с расчётом, что целевой буфер обязательно должен быть больше исходного для вмещения нулевого символа конца строки, который принудительно добавляется функцией в конец для исключения его пропуска при копировании. Если размер целевого буфера больше нуля, но его недостаточно для копирования целевой строки, то в начало добавляется нулевой байт.

Код:

void curlx_strcopy(char *dest,
size_t dsize,
const char *src,
size_t slen)
{
DEBUGASSERT(slen < dsize);
if(slen < dsize) {
memcpy(dest, src, slen);
dest[slen] = 0;
}
else if(dsize)
dest[0] = 0;
}

Замена strcpy() на curlx_strcopy() произведена, так как существует вероятность человеческой ошибки, приводящей к разделению кода с проверкой/выделением памяти и вызовом strcpy(), например, при необдуманном переносе лишь части кода или вставки кода между проверкой и вызовом strcpy(). Кроме того, прекращение использования strcpy позволит избавиться от потока ложных сообщений об уязвимостях из-за некорректных срабатываний AI-инструментов, считающих наличие strcpy() уязвимостью без учёта имеющихся в коде проверок.






Источник: https://www.opennet.ru/opennews/art.shtml?num=64532
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 04.01.2026 23:31, всего редактировалось 3 раза.
Причина: Forced update
Спасибо сказали: