После 10 месяцев разработки состоялся выпуск 10.48 библиотеки PCRE2, реализующей PERL-совместимые регулярные выражения, с исправлениями ошибок безопасности, а также с исправлениями и небольшими улучшениями в работе библиотеки. Проект написан на языке C и распространяется по лицензии BSD 3.
В состав библиотеки также входит консольная утилита pcre2grep.
Основные изменения
Исправлены уязвимости
- GHSA-2p8c-ff85-vh9x: выход за пределы диапазона в некоторых случаях в функциях
pcre2_jit_compile()иpcre2_match(); - GHSA-q8g2-wprr-34m9: возможный выход за границы выделенной памяти в функции
pcre2_convert()на платформах с 32-битным типомsize_t; - GHSA-3r4p-g7gg-ppmf: запись за границы выделенной памяти при DFA-сопоставлении, если использовалось ограничение на размер «кучи»; также исправлены возможные переполнения целых чисел, которые могли приводить к недостаточному выделению памяти;
- GHSA-fmgr-6ggq-9859: добавлены проверки границ для предотвращения нескольких случаев целочисленного переполнения при компиляции шаблонов на 32-битных процессорах, которые могли привести к недостаточному выделению памяти с последующей записью за пределы выделенной области;
- GHSA-9qww-pwc4-77qq: чтение за пределами буфера при обратном сканировании некорректных UTF-данных с ошибкой
PCRE2_MATCH_INVALID_UTF; - GHSA-q7rw-r7qq-2hx6: утечка памяти с последующим освобождением в функции
pcre2_jit_match(); - GHSA-q7rw-r7qq-2hx6, связанная с двумя неинициализированными байтами в функции
pcre2_serialize_encode();
Исправлены проблемы сопоставления
- неправильно скомпилированные классы символов Unicode, объединяющие символы с кодами
U+00FFи ниже, с символами с кодамиU+0100иU+8000и выше; - при использовании JIT:
-
- ошибка сопоставления, влияющая на сканирование префиксов в шаблонах с повторениями;
-
- ошибка сопоставления при обратном просмотре переменной длины;
-
- некорректный сдвиг символов с ошибкой
PCRE2_MATCH_INVALID_UTFв режимах UTF-8 и UTF-16, что могло приводить к пропуску соседних символов.
- некорректный сдвиг символов с ошибкой
Другие изменения
- цикл поддержки изменён на пятилетний, с публикацией патчей обратной совместимости для устранения уязвимостей и исправлений высокой степени серьёзности в старых версиях библиотеки;
- поддержка Unicode обновлена до версии Unicode 17.0;
- множество мелких исправлений, в том числе усовершенствования функции
pcre2_substitute(), оптимизация сопоставления обратных ссылок и исправления в функцииpcre2_compile(); - множество мелких исправлений при сборке с CMake и Zig;
- ветка git по умолчанию переименована с
masterвmain.