Cloudflare нашла и исправила баг в библиотеке hyper, который вызывал повреждение изображений, возвращаемых из сервиса Images. Уязвимость использовала состояние гонки и могла приводить к возврату изображений размером всего несколько сотен килобайт вместо положенных двух мегабайт. Для разработчиков это создает важный урок в отношении надежности и тестирования открытых библиотек.
Контекст исправления
Сервис Images от Cloudflare, построенный на Rust и работающий в среде Workers, использует библиотеку hyper для обработки клиентских запросов. В конце 2025 года была переработана интеграция, что значительно увеличило производительность, однако вскоре разработчики столкнулись с сообщениями о том, что запросы на преобразование изображений, особенно больших файлов, иногда завершались не успешно. Статус ответов при этом указывал на 200 (успех), но сами данные оказывались повреждены.Шестинедельные поиски разработчиков Cloudflare привели к обнаружению состояния гонки в библиотеке hyper, влияющего на корректную передачу обработанных данных клиенту. Исправление оказалось простым — четыре строки кода решили проблему, но весь процесс стал важным напоминанием о том, как важно тестировать вероятность редких багов при разработке.
Подробности работы с библиотекой hyper
Библиотека hyper отвечает за управление соединениями и обработку запросов в рамках сервиса Images. Этот сервис позволяет разработчикам выполнять операции с изображениями, такие как трансформация и оптимизация, без необходимости отправки ответов в HTTP-протоколе. Например, можно подстраивать параметры для обработки изображений на лету, что облегчает создание сложных изменений.Когда запрос поступает в hyper, он считывает данные через сокет. Успех выполнения запросов зависит от скорости, с которой происходит чтение данных с выходного буфера. Если читатель медленнее, чем запрашивается отправка данных, возникает вероятность заполнения буфера, что, в конечном итоге, и стало причиной проблемы с поврежденными изображениями.
Что это значит для разработчиков
Для разработчиков и компаний, использующих Cloudflare и библиотеку hyper, эта ситуация подчеркивает необходимость тщательного тестирования каждого компонента, особенно открытого кода. Уязвимость, которая казалось бы незначительной, может привести к неожиданным и критическим багам. Необходимо внимательно следить за обновлениями библиотек и тестировать изменения на предмет таких ситуаций, чтобы избежать потерь в производительности и доверии пользователей.Следующий шаг для разработчиков — всеобъемлющий обзор своих процессов работы с библиотеками. Устойчивость и надежность систем должны стать крайней приоритетной задачей, особенно когда дело касается обработки пользовательских данных.