Описание |
Четыре функции libcurl: curl_escape (), curl_easy_escape (), curl_unescape и curl_easy_unescape выполняют экранирование и отмену экранирования процентов строковых URL. Они принимают вводимые пользователем длины строки в целочисленных аргументах со знаком. (Функции, имеющие имена без "easy", являются устаревшими версиями других.) Предоставленные аргументы длины строки не были должным образом проверены, и из-за арифметических действий в функциях передача длины 0xffffffff (2 ^ 32-1 или UINT_MAX или даже просто -1) в конечном итоге приведет к выделению нулевых байтов кучи памяти, которая скручивается попытается записать гигабайты данных в. Использование int для этого типа ввода в API, конечно, неразумно, но так и осталось, чтобы поддерживать API на протяжении многих лет. |