Состоялся релиз открытой библиотеки и консольной утилиты jq 1.8.0, предназначенных для обработки данных в формате JSON с использованием встроенного сверхвысокоуровневого функционального языка программирования. Исходный код проекта написан на языке C и опубликован на GitHub под лицензией MIT. Предыдущая стабильная версия решения вышла в декабре 2023 года.
Для регулярных выражений в проекте опционально может использоваться библиотека Oniguruma. С 24 апреля 2025 года объявлено о прекращении работы над проектом и переводе в архив репозитория на GitHub библиотеки регулярных выражений Oniguruma.
Начиная с этого выпуска утилиты jq, шаблон нумерации версий изменён на X.Y.Z.
Основные изменения и дополнения в jq 1.8.0:
Исправления ошибок безопасности:
CVE-2024-23337: исправлено целочисленное переполнение в функциях jvp_array_write и jvp_object_rehash. Теперь максимальный размер массивов и объектов установлен в 536870912 (2^29) элементов;
CVE-2024-53427: исправлен парсинг значений вида NaNчисло, например NaN1, NaN10 и т. п. Другие расширения JSON (подобные NaN, Infinity) остаются поддерживаемыми;
CVE-2025-48060: исправлено переполнение буфера в функции jv_string_vfmt;
исправлено использование неинициализированного значения в функции check_literal;
исправлено падение в функциях strftime и strflocaltime;
исправлено необработанное целочисленное переполнение в функции @base64d.
Изменения в консольной утилите:
исправлено поведение ключа —indent 0, ранее неявно включавшего режим —compact-output.
улучшены сообщения об ошибках парсинга.
улучшена обработка длинных значений переменной среды JQ_COLORS, таких как truecolor.
исправлено поведение —slurp —stream, когда входные данные не содержат завершающего символа новой строки.
исправлена обработка пробелов при разборе чисел.
максимальная глубина парсинга JSON увеличена до 10000.
улучшено цветное форматирование вывода.
другие незначительные изменения.
Изменения в языке:
добавлены функции trim, ltrim, rtrim, trimstr(…), add(…), skip(…, …), toboolean и формат @urid, обратный @uri.
функции indices(…), index(…) и rindex(…) теперь в качестве индекса используют кодовые позиции Юникода. Используйте utf8bytelength для получения позиции байта.
улучшена производительность и поведение функции tonumber, связанное с обработкой лидирующих и замыкающих пробельных символов. Для их удаления рекомендуется использовать функцию trim.
улучшено форматирование времени в функциях strftime и strflocaltime.
улучшена производительность функции bsearch(…), которая была переписана на Си.
улучшена производительность функций unique и unique_by(…).
удалена функция pow10. Вместо неё используйте функцию exp10.
удалён приватный и недокументированный фильтр _nwise.
исправлен приоритет унарных и бинарных арифметических операторов.
добавлена поддержка многострочных комментариев в стиле Tcl (строка после # считается комментарием).
исправлены ошибки в foreach и reduce.
добавлена поддержка переносов строк CRLF в фильтрах.
улучшена производительность повторения строк.
различные незначительные изменения.
улучшены документация и тестирование, а также исправлены ошибки сборки.
Источник: habr.com