← Back to the guide

CVE-2026-111497  ·  Dev check  ·  Tests

Testing methodology

48 container tests check the script's verdicts against the fixed versions vendors and distros publish.

48tests
47passing
1known limitation
18numbered checks

Every line the script prints starts with a check number, such as FAIL [01] libbrotli1. Each test lists the lines a check must print.

Checks against tests

Rows are checks and columns are tests. A dot means the test asserts a line from that check.

Asserted, passing Asserted, known limitation Asserted, failing Every run: the exit code matches the summary
Check01–19 OS packages20–39 Runtimes40–59 Packages and files60–79 Container probe80–99 Script behaviour
010203040506070809101112132021222324252627282930314041424344454647484950606162636465808182838485
[00]Header
[01]OS packages
[02]node and bun on PATH
[03]Node.js version managers
[04].NET runtimes
[05]Python metadata
[06]Python compiled extensions
[07]Python pins and locks
[08]Host Python packages
[09]npm middleware
[10]Java brotli4j
[11]Ruby brotli gem
[12]Go modules
[13]Rust crates
[14]Vendored decode.c
[15]Bundled libbrotlidec
[16]curl
[17]Envoy, Istio, nginx
[18]Container engine and images

Tests

TestSetupExpectedChecksResult
01–19 · OS packages
01Debian 12, libbrotli1 1.0.9-2+b6FAIL[01]Pass
02Debian 12, libbrotli1 1.0.9-2+deb12u1PASS[01]Pass
03Ubuntu 22.04, libbrotli1 1.0.9-2build6FAIL[01]Pass
04Alpine 3.20, brotli-libs 1.1.0-r2 (no 3.20 fix)FAIL[01]Pass
05Ubuntu 22.04, libbrotli1 1.0.9-2ubuntu0.1 and curlPASS for both[01] [16]Pass
06Ubuntu 20.04, 1.0.7-6ubuntu0.1 and the Pro build +esm1FAIL, then PASS[01]Pass
07Sid fix, forky build, a binNMU of the fix, a ~rc1 prereleasePASS, FAIL, not FAIL, WARN[01]Pass
08Fedora 44, brotli 1.2.0-3.fc44WARN, never PASS[01]Pass
09Ubuntu 24.04, libbrotli1 1.1.0-2build2FAIL[01]Pass
10Ubuntu 26.04, libbrotli1 1.2.0-3ubuntu0.1PASS[01]Pass
11Debian 13, libbrotli1 1.1.0-2+b7FAIL[01]Pass
12Alpine 3.21, brotli-libs 1.1.1-r0PASS[01]Pass
13Homebrew listing brotli 1.1.0_1 and 1.2.1FAIL, then PASS[01]Pass
20–39 · Runtimes
20Official Node 24.22.0, plus 24.22.1 under nvmFAIL, then PASS by marker[02] [03]Pass
21Official Node 24.22.1 and an Express 5 appPASS by marker[02] [09]Pass
22nvm, Volta, asdf and fnm dirs either side of each fixFAIL or PASS per branch[03]Pass
23Debian nodejs and curl on the fixed system libraryPASS through check 01[02] [16]Pass
24Microsoft .NET runtime 8.0.32 imageFAIL[04]Pass
25Microsoft .NET runtime 8.0.33 imagePASS[04]Pass
26dotnet --list-runtimes with 8.0.32, 7.0.20, 11.0.0-rc.2, 10.0.14FAIL, FAIL, WARN, PASS[04]Pass
27Official Bun 1.4.3FAIL[02]Pass
28Official Bun 1.4.4PASS by marker[02]Pass
29Envoy 1.39.2 with a Brotli decompressor in its configWARN[17]Pass
30istioctl 1.31.1 version outputWARN[17]Pass
31Test 01 plus curlFAIL[01] [16]Pass
40–59 · Packages and files
40Express 5 lockfile, Brotli 1.1.0 and 1.2.1 dist-infoFAIL, PASS, WARN[05] [09]Pass
41Real Brotli, brotlicffi and curl_cffi wheels in two venvsFAIL and PASS per venv[05] [06] [08]Pass
42Requirement-line variants, poetry.lock, uv.lock, look-alike namesOne verdict per real pin[07]Pass
43yarn with @types/express@5, pnpm v9, bun.lockNo false Express 5[09]Pass
44Java, Ruby, Go and Rust either side of each fix, path with a spaceFAIL or PASS per file[10] [11] [12] [13]Pass
45Go pseudo-version and -rc.1 before v1.2.7WARN, never PASS[12]Pass
46Upstream decode.c from v1.0.9, v1.0.10, v1.2.0, v1.2.1FAIL or PASS per tag[14]Pass
47libbrotlidec built from upstream v1.0.9 to v1.1.1PASS fixed, WARN vulnerable[15]Pass
48Debian python3-brotli 1.0.9-2+b6FAIL[01] [06] [08]Pass
49dist-info from conda, no installer, a .post1 releaseWARN where unsure[05]Pass
50CRLF Gemfile.lock, pdm.lock, package-lock v1, nested Express, egg-infoA line for each, none PASS[03] [05] [07] [09] [11]Pass
60–79 · Container probe
60Probe of test 01's imageFAIL[18]Pass
61Probe of a distroless Node image (no shell)SKIP[18]Pass
62Probe of test 41's imageFAIL for system and venv packages[18]Known limitation
63Probe of test 20's imageFAIL[18]Pass
64Probe of official Node 24.22.1 on AlpinePASS by marker[18]Pass
65Probe of a vulnerable and a fixed image in one runFAIL, then PASS[18]Pass
80–99 · Script behaviour
80Bash 3.2 (the macOS version) on BusyBoxSame verdicts as bash 5[07] [11] [12] [14]Pass
81A WARN-only run with --strictExit 1[12]Pass
82Test 01's image with -qFAIL lines and summary only[01]Pass
83-i naming an image that doesn't existExit 2[18]Pass
84Vulnerable files in an unreadable directoryNothing PASSes[12]Pass
85Docker hangs, Podman errors, -cSKIP, no hang[18]Pass

How the tests run

Known limitations