В relibc починили падения в crypt, mktime и pthread_getschedparam и добавили совместимость с C++

26.06.2026

Пакет исправлений в relibc: crypt больше не падает на ключах с не-UTF-8 байтами и на коротком параметре SHA, mktime учитывает системный часовой пояс по POSIX, а pthread_getschedparam возвращает код ошибки вместо паники.

crypt: две причины падения

Функции crypt, crypt_sha и crypt_md5 реализуют штатное хеширование паролей. Первая ошибка — ключ, содержащий байты вне UTF-8: попытка работать с ним как со строкой приводила к падению. Вторая — короткий параметр SHA: границы проверялись после, а не до, так что уже неверный срез успевал повредить память.

Обе ошибки объединяет одно: падение там, где должно возвращаться значение. Для кода на Rust это особенно неприятно — паника в libc там, где программа ждёт результат, не даёт перехватить ошибку средствами языка.

mktime и часовой пояс

mktime больше не использует tm_gmtoff и переходит на системный часовой пояс, как предписывает POSIX. Разница проявляется на машинах с нестандартным поясом или при переводе часов: время, полученное функцией, могло отличаться от системного.

pthread_getschedparam вместо паники

Функция должна вернуть ENOSYS — то есть «так не умею». Вместо этого она паниковала. Разница принципиальна: ENOSYS позволяет вызывающей стороне корректно обработать отсутствие возможности, а паника обрывает процесс.

Совместимость с C++

Отдельно исправлено отсутствие nullptr в старых компиляторах и инициализация потоков на фронтенде GCC для C++. Первое нужно там, где код компилируется в режиме C++03 или старше, второе — чтобы POSIX-потоки работали в C++-сборке. Без этих правок часть существующих программ на Redox просто не собиралась.

Оригинал

Коммиты в репозитории redox-os/relibc: Return ENOSYS to pthread_getschedparam instead of panic от 26 июня, Fix pthread init and null for C++ и Fix lack of nullptr for older C++ от 4 июня, fix: crypt_sha от 8 июня и fix: crypt_md5 от 10 июня, fix: mktime от 8 июня 2026 года

Упоминаний: 1 · Просмотров: 2