26 октября вышла новая версия программы GNU Grep — 2.15. Выпуск связан главным образом с исправлением ошибок. Прошло 62 недели, за это время 9 человек сделали 57 коммитов.
Были исправлены следующие ошибки:
-
\s
и\S
неправильно работали с пробельными символами длиной в несколько байт. Например, выражение \s неправильно работало с неразрывным пробелом. Например, вот:printf '\xc2\xa0' | LC_ALL=ru_RU.UTF-8 grep '\s'
. Ошибка появилась в версии 2.6; -
grep -i
могла вызывать ошибку сегментирования в системах, использующих wchar_t, основанный на кодировке UTF-16 (например, Cygwin). Ошибка возникала, когда нужно было перевести в нижний регистр входную строку, содержащую определенную 4-байтовую последовательность (ошибка присутствовала с версии 2.6, но проявляться в виде ошибки сегментирования начала только в версии 2.13; -
grep -E
могла завершиться с ошибкой сегментирования при обработе регулярных выражений вида'([^.]*[M]){1,2}'
, где M — многобайтовый символ. Ошибка появилась в версии 2.6, пропала в версиях 2.7 и 2.8. Все версии, начиная с 2.9, работают с ошибкой; -
grep -F
могла попадать в бесконечный цикл, когда искомая строка содержит некорректную в текущей локали последовательность байтов: -
grep -P
могла работать неправильно с многобайтовыми символами.
Новые улучшения:
-
grep -P
теперь использует jit-компиляцию, что значительно ускоряет работу. Это реализовано совершенно прозрачно для пользователя, не нужно устанавливать никаких флагов и т.п. Эта возможность включается на этапе компиляции, если обнаружена подходящая версия библиотеки pcre.
>>> Подробности