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

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

Извикванията на strncpy() бяха заменени с функцията strcpy(), преди извикването на която се извършваше резервиране на памет за целевия буфер с оглед размера на входящия низ или имаше проверка за съответствие на размера на входящия низ и целевия буфер. Замяната с функцията 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() за уязвимост, без да вземат предвид проверките в кода.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster