Varnish Enterprise 6.0.18r6 Release

Published October 12, 2026.

About the release

Varnish Enterprise 6.0.18r6 is a feature and bug fix release.

The release adds decompression of gzipped request bodies, a dry-run mode for the logging utilities, better retry behavior and new pipe statistics for nested udo directors, and a number of stability and correctness fixes.

New features

  • Request body decompression: The new req.do_gunzip VCL variable decompresses a request body carrying Content-Encoding: gzip as it is read, allowing VMODs that inspect the request body to see its uncompressed content. This applies both when cached with std.cache_req_body() and when sent to the backend. The std.cache_req_body() size limit applies to the decompressed body size.

    import std;
    
    sub vcl_recv {
            set req.do_gunzip = true;
            std.cache_req_body(1MB);
    }
    
  • CLI dry-run option (-0): varnishlog, varnishncsa, varnishhist and varnishtop gained a -0 dry-run option. It validates command line arguments, VSL queries and varnishncsa format strings, exiting without daemonizing or connecting to a VSM.

  • vmod_udo nested retries: .add_backend() gained an exhaust argument (true/false/auto). When an added backend is itself a UDO director, setting exhaust = false (or auto, which auto-detects directors) lets the outer director keep retrying into the nested director’s remaining healthy backends, instead of giving up on that branch after a single try.

    sub vcl_init {
            new root = udo.director(fallback);
            root.add_backend(region_a.backend(), exhaust = auto);
            root.add_backend(region_b.backend(), exhaust = auto);
    }
    
  • vmod_udo pipe statistics: vmod_udo directors now record pipe durations, exposed via stat as the varnish_dur_udo_pipe histogram. A new observatory_name constructor argument lets directors with the same name in different VCLs, for example one per tenant, keep separate statistics.

  • vmod_stat duration sums: duration_observatory objects now keep the sum of registered durations. The new counter argument exposes the count (.n) and sum (.sum_ms) as Varnish counters in JSON and Prometheus outputs.

  • vmod_s3 conditional objects: s3 director and signer objects can be created conditionally in vcl_init. Calling a method on an object that was never created fails the VCL load.

  • varnishlog-json transaction type: Output now includes a type field in transaction objects.

Notable fixes

  • The bundled zlib library was updated to 1.3.1.1. This fixes CVE-2018-25032, where gzip compression of a backend response could corrupt memory. With the compression strategy Varnish uses, this is only known to be reachable with gzip_memlevel set to 1; the default of 8 is not affected.

  • HTTP/2 DATA frames received on a stream that Varnish has already reset or closed no longer tear down the whole connection, and are now always charged against the connection flow control window. Previously, uploads on a long-lived connection could stall. (VS issue #3342)

  • Fixed race conditions in vmod_ratelimit that could lead to memory leaks or crashes during VCL discard, or when reusing idle accounts. (VS issue #3466)

See the changelog for the complete list of changes.

References


®Varnish Software, Wallingatan 12, 111 60 Stockholm, Organization nr. 556805-6203