Проект Curl избавился от использования функции strcpy в коде
Дэниел Cтенберг (Daniel Stenberg), автор утилиты для получения и отправки данных по сети curl, объявил о прекращении использования функции strcpy () в кодовой базе проекта и запрете применения данной функции в дальнейшем. Решение является продолжением инициированного в прошлом году отказа от использования функции strncpy (), копирующей заданное число байт из входящей строки. Применение strncpy () создавало опасность возникновения ошибок из-за пропуска нулевого символа в конце строки или добавочного заполнения нулями.
Обращения к strncpy () были заменены на функцию strcpy (), перед вызовом которой выполнялось выделение памяти под целевой буфер c учётом размера исходной строки или присутствовала проверка соответствия размера исходной строки и целевого буфера. Замена на функцию strlcpy () не была произведена, так как требовалось всегда копировать всю строку целиком или возвращать ошибку.
Теперь все вызовы strcpy () заменены на новую функцию curlx_strcopy (dest, dsize, src, slen). Функция curlx_strcopy () требует указания размера исходного и целевого буфера с расчётом, что целевой буфер обязательно должен быть больше исходного для вмещения нулевого символа конца строки, который принудительно добавляется функцией в конец для исключения его пропуска при копировании. Если размер целевого буфера больше нуля, но его недостаточно для копирования целевой строки, то в начало добавляется нулевой байт.
oid 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 () уязвимостью без учёта имеющихся в коде проверок.
Источник: http://www.opennet.ru/opennews/art.shtml? num=64532
Полный текст статьи читайте на OpenNet
