Бібліотека jq 1.8.0: новий випуск для обробки JSON

Бібліотека jq 1.8.0: новий випуск для обробки JSON з покращеннями безпеки

1 червня, після майже півтора років розробки, відбувся випуск 1.8.0 бібліотеки та консольної утиліти jq, призначених для обробки даних у форматі JSON з використанням вбудованої надвисокорівневої функціональної мови програмування. Код проєкту написано мовою Сі та розповсюджується за ліцензією MIT. Для регулярних виразів опціонально може використовуватися бібліотека Oniguruma. Починаючи з цього випуску, шаблон нумерації версій змінено на X.Y.Z.

Виправлення вразливостей безпеки в jq

  • 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.

Оновлення консольної утиліти jq

  • Виправлено поведінку ключа –indent 0, який раніше неявно вмикав режим –compact-output.
  • Покращено повідомлення про помилки парсингу.
  • Поліпшено обробку довгих значень змінної середовища JQ_COLORS, таких як truecolor.
  • Виправлено поведінку –slurp –stream, коли вхідні дані не містять завершального символу нового рядка.
  • Виправлено обробку пробілів при розборі чисел.
  • Максимальну глибину парсингу JSON збільшено до 10000.
  • Покращено кольорове форматування виводу.
  • Інші незначні зміни.

Зміни в мові jq

  • Додано функції 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 у фільтрах.
  • Поліпшено продуктивність повторення рядків.
  • Інші незначні зміни.

Також покращено документацію та тестування; виправлено помилки збірки. Крім того, у новому випуску бібліотеки jq для обробки JSON додано інші незначні зміни та оптимізації, які роблять роботу з нею ще більш зручною та ефективною.

Докладнішу інформацію можна знайти на офіційній сторінці релізу та на офіційному сайті jq.