No signal changes detected since 2026-11-06.
| Environment | pytest | ruff | ty | bandit | pip-audit |
|---|---|---|---|---|---|
| linux-x64 / py3.14 | |||||
| linux-x64 / py3.14t | |||||
| linux-x64 / py3.15 | |||||
| macos-arm64 / py3.13 | |||||
| windows-x64 / py3.13 |
| Advisory | Package | Severity | Summary |
|---|---|---|---|
| GHSA-332p-7hrc-92wf | pillow 12.3.0 | critical | Pillow: Heap buffer overflow in _tiffWriteProc when saving TIFF to BytesIO |
| GHSA-5x8w-8jj5-q52h | pillow 12.3.0 | critical | Pillow: Heap buffer overflow in FlashPix (FPX) JPEG decoding leads to code execution |
| GHSA-6q48-6c7w-9gw2 | certifi 2026.4.22 | critical | certifi bundles emSign root CAs with compromised intermediate CA keys |
| GHSA-8g5g-8vmr-9782 | pillow 12.3.0 | critical | Pillow: Heap buffer overflow in ImagingJpegDecode |
| GHSA-v9pv-5gc8-w2m6 | pillow 12.3.0 | critical | Pillow multi-frame loaders can reuse stale native image storage after mode transitions |
| GHSA-w889-685w-c8fh | pillow 12.3.0 | critical | Pillow: Argument Injection in Ghostscript call, potentially leading into RCE |
| GHSA-22hg-r758-rrw9 | pillow 12.3.0 | high | Pillow: Infinite loop in MIC n_frames when the embedded TIFF |
| GHSA-27h8-gf7j-v5hc | pillow 12.3.0 | high | Pillow: NULL dereference in ImagingExpand via rank filters on zero-size images |
| GHSA-27vj-qcqg-25rc | fsspec 2026.4.0 | high | fsspec: Server-Side Template Injection in ReferenceFileSystem leads to Remote Code Execution |
| GHSA-3j72-p6qg-6xp7 | pillow 12.3.0 | high | Pillow: TarIO negative size field causes infinite CPU-spin loop |
| GHSA-58r4-6rv3-gfh8 | pillow 12.3.0 | high | Pillow: Out-of-bounds access in _imagingmorph on a zero-width image |
| GHSA-5xm2-6676-qcp9 | pillow 12.3.0 | high | Pillow: APNG background disposal allocates full canvas before decompression bomb check |
| GHSA-65qm-jvmh-6pqg | pillow 12.3.0 | high | Pillow: GIF seek keeps rejected size after DecompressionBombError, allowing DoS |
| GHSA-78g4-xqwv-q3g8 | pillow 12.3.0 | high | Pillow: Bundled libopenjp2 2.5.4 in all wheels since 11.1.0 carries OSV-2025-219 heap-buffer-overflow write reachable from Image.open().load() |
| GHSA-7mwm-ghpf-9vrm | pillow 12.3.0 | high | Pillow: Double free in ImagingScaleAffine on calloc failure via Image.transform |
| GHSA-9v9v-9qvf-h2hj | pillow 12.3.0 | high | Pillow: Heap over-read in WMF/EMF rendering via 16-bit dimension truncation (Windows builds) |
| GHSA-c6hw-5grf-ff96 | pillow 12.3.0 | high | Pillow: OOB read in TiffDecode.c tile and RGBA paths leaks heap memory into pixels |
| GHSA-cp9v-662q-vvx9 | pillow 12.3.0 | high | Pillow: NULL pointer dereference in Image.merge via an unvalidated band 0 |
| GHSA-f2g6-542v-9j58 | pillow 12.3.0 | high | Pillow: Infinite loop in PdfParser.rewrite_pages on page tree Parent cycle |
| GHSA-g4qv-2jxx-769h | pillow 12.3.0 | high | Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time |
| GHSA-g7cr-3p24-7wf7 | pillow 12.3.0 | high | Pillow: Heap buffer overflow writing JPEG comment after ICC profile fills buffer |
| GHSA-g842-9rc4-69pw | pillow 12.3.0 | high | Pillow: Decompression bomb check bypass in SpiderImagePlugin.seek() leads to unbounded allocation DoS |
| GHSA-gg2r-wvfm-q9rx | pillow 12.3.0 | high | Pillow: MSP RLE decoder expands a tiny file into unbounded memory |
| GHSA-j4m9-6w36-pw47 | pillow 12.3.0 | high | Pillow: Invalid free in FreeType glyph rendering when a stroker is active |
| GHSA-jg86-v3jv-hrpm | pillow 12.3.0 | high | Pillow: Quadratic-time DoS in PDF save_all (PdfParser.next_object_id) |
| GHSA-mrfp-p49p-3hf2 | pillow 12.3.0 | high | Pillow PDF append accepts malformed shared page-tree DAG causing resource exhaustion |
| GHSA-p4wg-p73j-c528 | pillow 12.3.0 | high | Pillow: Unbounded recursion parsing a PDF page tree or trailer chain (incomplete fix for CVE-2026-42310) |
| GHSA-pchr-8j38-3x4p | pillow 12.3.0 | high | Pillow: TIFF encoder ColorMap plane-size mismatch causes a heap out-of-bounds read |
| GHSA-q45j-58j2-45rg | pillow 12.3.0 | high | Pillow: TiffDecode returns uninitialized memory as pixels for short JPEG strips |
| GHSA-v4x8-3wr5-3wq8 | filelock 3.29.0 | high | filelock ReadWriteLock: SQLite reopens the lock database by name, so a planted symlink or journal file makes the lock user's process overwrite or unlink its own files |
| GHSA-xvh5-g6gv-559v | pillow 12.3.0 | high | Pillow: Memory disclosure and segfault in libtiff encoder via crafted TIFF tags |
| GHSA-24rc-8hj2-v98c | pillow 12.3.0 | moderate | Pillow: BMP RLE decoder memory-amplification DoS via unbounded delta escape / absolute mode |
| GHSA-254f-3936-288h | pillow 12.3.0 | moderate | Pillow: PdfParser can recurse without limit in get_value() and linearize_page_tree() |
| GHSA-4558-3h8r-v8xp | pillow 12.3.0 | moderate | Pillow: P;2L and P;4L decoders may read 1 to 3 bytes past the passed buffer size |
| GHSA-462x-pgg6-55fp | pillow 12.3.0 | moderate | Pillow tiled-TIFF decoder reads past tile buffer in copy4 (Unpack.c:1290) |
| GHSA-4rm8-3hmm-39fg | pillow 12.3.0 | moderate | Pillow: Reachable undefined behavior in native integer operations, potentially leading to denial of service or logic integrity compromise |
| GHSA-4rr5-89j8-mwwm | pillow 12.3.0 | moderate | Pillow: Heap use-after-free when encoding TIFF to an in-memory buffer |
| GHSA-654x-cwwv-5j9c | pillow 12.3.0 | moderate | Pillow: Arrow export leaks stale heap memory when PILLOW_ALIGNMENT > 1 |
| GHSA-69hj-f68j-2879 | filelock 3.29.0 | moderate | filelock: UnixFileLock truncates and chmods any regular file another user renames or hard-links onto the lock path |
| GHSA-74r2-7ff9-mjj2 | pillow 12.3.0 | moderate | Pillow: Quadratic GIF comment concatenation allows DoS in Image.open() |
| GHSA-8mx5-7m5m-r77g | filelock 3.29.0 | moderate | filelock: WindowsFileLock ignores mode: a 0o600 lock file and the ReadWriteLock database inherit the directory ACL |
| GHSA-cwqr-hh33-gh44 | filelock 3.29.0 | moderate | filelock ReadWriteLock: a crafted lock database makes every acquire stall or hang regardless of timeout |
| GHSA-fc9g-5qg7-mf45 | pillow 12.3.0 | moderate | Pillow: Quadratic GIF comment copying during save |
| GHSA-fq56-3cx3-fjxp | filelock 3.29.0 | moderate | filelock: SoftFileLock stale-lock break removes a live lock file on a reused inode number and admits two holders |
| GHSA-j8f7-rjxc-mr56 | filelock 3.29.0 | moderate | filelock: ReadWriteLock follows a symlink at the lock path into SQLite |
| GHSA-p8hx-v2p6-rp84 | pillow 12.3.0 | moderate | Pillow: Decompression-bomb protection bypass via multi-frame seek() in MPO and DCX (MpoImageFile.seek / DcxImageFile.seek) |
| GHSA-rfgq-q3w2-pmv2 | pillow 12.3.0 | moderate | Pillow: Image.quantize() with empty palette leaks uninitialized stack memory |
| GHSA-rfpc-qcw5-3pc4 | filelock 3.29.0 | moderate | filelock: SoftFileLock removes a live holder's marker when another user forges the PID in a writable marker |
| GHSA-vx6w-vv9f-6gvg | pillow 12.3.0 | moderate | Pillow: EPS load(scale) lets Ghostscript render past the decompression bomb limit |
| GHSA-xgh8-jp6q-p5x8 | pillow 12.3.0 | moderate | Pillow: ReDoS in XbmImagePlugin: 512-byte file stalls Image.open() for minutes |
| GHSA-567q-5qvw-pf92 | filelock 3.29.0 | low | filelock: On Windows an oplock on a soft lock's marker holds SoftFileLock.acquire() past its timeout and blocks the stale break |
| GHSA-9vhv-jxww-xfm5 | filelock 3.29.0 | low | filelock: ReadWriteLock on Windows acts on SQLite side files another local user places beside its database |
Suppressions are markers that silence a linter, type-checker, or security scanner. See security.html for the full ledger across the org.
Counts non-blank, non-comment lines (sloc). Excludes .venv,
target, dist, build,
__pycache__, _site, and lockfiles
(uv.lock, Cargo.lock). Tests are paths whose
ancestors contain tests, test, or
benches. Authorship: this codebase is
AI-assisted — lines were generated with Claude (Anthropic) and
human-reviewed before commit. We count what's in git;
we do not claim humans typed every character.