jq jq-1.8.0

jq-1.8.0

jq 1.8.0

Added 9
  • Generate provenance attestations for release artifacts and docker image
  • Add --library-path long option for -L
  • Add trim/0, ltrim/0 and rtrim/0 functions to trim leading and trailing white spaces
  • Add trimstr/1 function to trim string from both ends
  • Add add/1 generator variant of add/0
  • Add skip/2 as the counterpart to limit/2
Changed 14
  • Change version number pattern to 1.X.Y format
  • Improve error messages to show problematic position in the filter
  • Include column number in parser and compiler error messages
  • Improve JQ_COLORS environment variable to support larger escapes like truecolor
  • Increase the maximum parsing depth for JSON to 10000
  • Use code point index for indices/1, index/1 and rindex/1
Fixed 10
  • Fix --indent 0 implicitly enabling --compact-output
  • Fix error message for string literal beginning with single quote
  • Fix --slurp --stream when input has no trailing newline character
  • Fix --indent option to error for malformed values
  • Fix option parsing of --binary on non-Windows platforms
  • Fix issue with ~/.jq on Windows where $HOME is not set
Removed 1
  • Remove pow10/0 as it has been deprecated in glibc 2.27, use exp10/0 instead
Security 6
  • Fix signed integer overflow in jvp_array_write and jvp_object_rehash by limiting the maximum size of arrays and objects to 536870912 (2^29) elements
  • Reject NaN with payload while parsing JSON, dropping support for NaN with payload like NaN123
  • Fix heap buffer overflow in jv_string_vfmt
  • Fix use of uninitialized value in check_literal
  • Fix segmentation fault on strftime/1 and strflocaltime/1
  • Fix unhandled overflow in @base64d

We are pleased to announce the release of version 1.8.0. This release includes a number of improvements since the last version. Note that some changes may introduce breaking changes to existing scripts, so be sure to read the following information carefully. Full commit log can be found at https://github.com/jqlang/jq/compare/jq-1.7.1...jq-1.8.0.

Releasing
  • Change the version number pattern to 1.X.Y (1.8.0 instead of 1.8). @itchyny #2999

  • Generate provenance attestations for release artifacts and docker image. @lectrical #3225

    gh attestation verify --repo jqlang/jq jq-linux-amd64
    gh attestation verify --repo jqlang/jq oci://ghcr.io/jqlang/jq:1.8.0
    
Security fixes
  • CVE-2024-23337: Fix signed integer overflow in jvp_array_write and jvp_object_rehash. @itchyny de21386681c0df0104a99d9d09db23a9b2a78b1e
    • The fix for this issue now limits the maximum size of arrays and objects to 536870912 (2^29) elements.
  • CVE-2024-53427: Reject NaN with payload while parsing JSON. @itchyny a09a4dfd55e6c24d04b35062ccfe4509748b1dd3
    • The fix for this issue now drops support for NaN with payload in JSON (like NaN123). Other JSON extensions like NaN and Infinity are still supported.
  • CVE-2025-48060: Fix heap buffer overflow in jv_string_vfmt. @itchyny c6e041699d8cd31b97375a2596217aff2cfca85b
  • Fix use of uninitialized value in check_literal. @itchyny #3324
  • Fix segmentation fault on strftime/1, strflocaltime/1. @itchyny #3271
  • Fix unhandled overflow in @base64d. @emanuele6 #3080
CLI changes
  • Fix --indent 0 implicitly enabling --compact-output. @amarshall @gbrlmarn @itchyny #3232

    $ jq --indent 0 . <<< '{ "foo": ["hello", "world"] }'
    {
    "foo": [
    "hello",
    "world"
    ]
    }
    # Previously, this implied --compact-output, but now outputs with new lines.
    
  • Improve error messages to show problematic position in the filter. @itchyny #3292

    $ jq -n '1 + $foo + 2'
    jq: error: $foo is not defined at <top-level>, line 1, column 5:
        1 + $foo + 2
            ^^^^
    jq: 1 compile error
    
  • Include column number in parser and compiler error messages. @liviubobocu #3257

  • Fix error message for string literal beginning with single quote. @mattmeyers #2964

    $ jq .foo <<< "{'foo':'bar'}"
    jq: parse error: Invalid string literal; expected ", but got ' at line 1, column 7
    # Previously, the error message was Invalid numeric literal at line 1, column 7.
    
  • Improve JQ_COLORS environment variable to support larger escapes like truecolor. @SArpnt #3282

    JQ_COLORS="38;2;255;173;173:38;2;255;214;165:38;2;253;255;182:38;2;202;255;191:38;2;155;246;255:38;2;160;196;255:38;2;189;178;255:38;2;255;198;255" jq -nc '[null,false,true,42,{"a":"bc"}]'
    
  • Add --library-path long option for -L. @thaliaarchi #3194

  • Fix --slurp --stream when input has no trailing newline character. @itchyny #3279

  • Fix --indent option to error for malformed values. @thaliaarchi #3195

  • Fix option parsing of --binary on non-Windows platforms. @calestyo #3131

  • Fix issue with ~/.jq on Windows where $HOME is not set. @kirkoman #3114

  • Fix broken non-Latin output in the command help on Windows. @itchyny #3299

  • Increase the maximum parsing depth for JSON to 10000. @itchyny #3328

  • Parse short options in order given. @thaliaarchi #3194

  • Consistently reset color formatting. @thaliaarchi #3034

New functions
  • Add trim/0, ltrim/0 and rtrim/0 to trim leading and trailing white spaces. @wader #3056

    $ jq -n '" hello " | trim, ltrim, rtrim'
    "hello"
    "hello "
    " hello"
    
  • Add trimstr/1 to trim string from both ends. @gbrlmarn #3319

    $ jq -n '"foobarfoo" | trimstr("foo")'
    "bar"
    
  • Add add/1. Generator variant of add/0. @myaaaaaaaaa #3144

    $ jq -c '.sum = add(.xs[])' <<< '{"xs":[1,2,3]}'
    {"xs":[1,2,3],"sum":6}
    
  • Add skip/2 as the counterpart to limit/2. @itchyny #3181

    $ jq -nc '[1,2,3,4,5] | [skip(2; .[])]'
    [3,4,5]
    
  • Add toboolean/0 to convert strings to booleans. @brahmlower @itchyny #2098

    $ jq -n '"true", "false" | toboolean'
    true
    false
    
  • Add @urid format. Reverse of @uri. @fmgornick #3161

    $ jq -Rr '@urid' <<< '%6a%71'
    jq
    
Changes to existing functions
  • Use code point index for indices/1, index/1 and rindex/1. @wader #3065
    • This is a breaking change. Use utf8bytelength/0 to get byte index.
  • Improve tonumber/0 performance and rejects numbers with leading or trailing white spaces. @itchyny @thaliaarchi #3055 #3195
    • This is a breaking change. Use trim/0 to remove leading and trailing white spaces.
  • Populate timezone data when formatting time. This fixes timezone name in strftime/1, strflocaltime/1 for DST. @marcin-serwin @sihde #3203 #3264 #3323
  • Preserve numerical precision on unary negation, abs/0, length/0. @itchyny #3242 #3275
  • Make last(empty) yield no output values like first(empty). @itchyny #3179
  • Make ltrimstr/1 and rtrimstr/1 error for non-string inputs. @emanuele6 #2969
  • Make limit/2 error for negative count. @itchyny #3181
  • Fix mktime/0 overflow and allow fewer elements in date-time representation array. @emanuele6 #3070 #3162
  • Fix non-matched optional capture group. @wader #3238
  • Provide strptime/1 on all systems. @george-hopkins @fdellwing #3008 #3094
  • Fix _WIN32 port of strptime. @emanuele6 #3071
  • Improve bsearch/1 performance by implementing in C. @eloycoto #2945
  • Improve unique/0 and unique_by/1 performance. @itchyny @emanuele6 #3254 #3304
  • Fix error messages including long string literal not to break Unicode characters. @itchyny #3249
  • Remove pow10/0 as it has been deprecated in glibc 2.27. Use exp10/0 instead. @itchyny #3059
  • Remove private (and undocumented) _nwise filter. @itchyny #3260
Language changes
  • Fix precedence of binding syntax against unary and binary operators. Also, allow some expressions as object values. @itchyny #3053 #3326

    • This is a breaking change that may change the output of filters with binding syntax as follows.
    $ jq -nc '[-1 as $x | 1,$x]'
    [1,-1]    # previously, [-1,-1]
    $ jq -nc '1 | . + 2 as $x | -$x'
    -3        # previously, -1
    $ jq -nc '{x: 1 + 2, y: false or true, z: null // 3}'
    {"x":3,"y":true,"z":3}    # previously, syntax error
    
  • Support Tcl-style multiline comments. @emanuele6 #2989

    #!/bin/sh --
    # Can be use to do shebang scripts.
    # Next line will be seen as a comment be of the trailing backslash. \
    exec jq ...
    # this jq expression will result in [1]
    [
      1,
      # \
      2
    ]
    
  • Fix foreach not to break init backtracking with DUPN. @kanwren #3266

    $ jq -n '[1, 2] | foreach .[] as $x (0, 1; . + $x)'
    1
    3
    2
    4
    
  • Fix reduce/foreach state variable should not be reset each iteration. @itchyny #3205

    $ jq -n 'reduce range(5) as $x (0; .+$x | select($x!=2))'
    8
    $ jq -nc '[foreach range(5) as $x (0; .+$x | select($x!=2); [$x,.])]'
    [[0,0],[1,1],[3,4],[4,8]]
    
  • Support CRLF line breaks in filters. @itchyny #3274

  • Improve performance of repeating strings. @itchyny #3272

Documentation changes
  • Switch the homepage to custom domain jqlang.org. @itchyny @owenthereal #3243
  • Make latest release instead of development version the default manual. @wader #3130
  • Add opengraph meta tags. @wader #3247
  • Replace jqplay.org with play.jqlang.org @owenthereal #3265
  • Add missing line from decNumber's licence to COPYING. @emanuele6 #3106
  • Various document improvements. @tsibley #3322, @itchyny #3240, @jhcarl0814 #3239, @01mf02 #3184, @thaliaarchi #3199, @NathanBaulch #3173, @cjlarose #3164, @sheepster1 #3105, #3103, @kishoreinvits #3042, @jbrains #3035, @thalman #3033, @SOF3 #3017, @wader #3015, @wllm-rbnt #3002
Build improvements
  • Fix build with GCC 15 (C23). @emanuele6 #3209
  • Fix build with -Woverlength-strings @emanuele6 #3019
  • Fix compiler warning type-limits in found_string. @itchyny #3263
  • Fix compiler error in jv_dtoa.c and builtin.c. @UlrichEckhardt #3036
  • Fix warning: a function definition without a prototype is deprecated. @itchyny #3259
  • Define _BSD_SOURCE in builtin.c for OpenBSD support. @itchyny #3278
  • Define empty JV_{,V}PRINTF_LIKE macros if __GNUC__ is not defined. @emanuele6 #3160
  • Avoid ctype.h abuse: cast char to unsigned char first. @riastradh #3152
  • Remove multiple calls to free when successively calling jq_reset. @Sameesunkaria #3134
  • Enable IBM z/OS support. @sachintu47 #3277
  • Fix insecure RUNPATH. @orbea #3212
  • Avoid zero-length calloc. @itchyny #3280
  • Move oniguruma and decNumber to vendor directory. @itchyny #3234
Test improvements
  • Run tests in C locale. @emanuele6 #3039
  • Improve reliability of NO_COLOR tests. @dag-erling #3188
  • Improve shtest not to fail if JQ_COLORS and NO_COLOR are already set. @SArpnt #3283
  • Refactor constant folding tests. @itchyny #3233
  • Make tests pass when --disable-decnum. @nicowilliams 6d02d53f515bf1314d644eee93ba30b0d11c7d2b
  • Disable Valgrind by default during testing. @itchyny #3269
View original

Upgraded? How did it go?

Discussion