fix(ce-gemini-imagegen): bump Pillow floor to 10.3.0 to clear 4 CVEs#608
Merged
tmchow merged 1 commit intoEveryInc:mainfrom Apr 20, 2026
Merged
Conversation
The `Pillow>=10.0.0` constraint admitted four CVEs affecting this skill's PIL.Image usage (imported in 5 scripts): | CVE | Severity | Pillow fix | |-------------------------|----------|------------| | PYSEC-2023-175 | critical | 10.0.1 | | GHSA-j7hp-h8jx-5ppr | high | 10.0.1 | | GHSA-3f63-hfp8-52jq | critical | 10.2.0 | | GHSA-44wm-f244-xhp3 | high | 10.3.0 | Bumping the floor to 10.3.0 eliminates all four in one hop. Added a comment above the pin so future contributors know why the floor was chosen and can bump again when the next Pillow CVE lands. Verified against OSV per-ecosystem fix data (PyPI Pillow specifically — osv-scanner's raw `fixed_versions` list surfaces cross-ecosystem values from libwebp / Electron that don't apply here). Provenance: surfaced by a Claude Code plugin static analyzer we're building (details in PR description).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The
Pillow>=10.0.0constraint inplugins/compound-engineering/skills/ce-gemini-imagegen/requirements.txtadmits four CVEs that affect this skill'sPIL.Imageusage (imported in 5 of its scripts:gemini_images.py,compose_images.py,multi_turn_chat.py,edit_image.py, plus the README example).BuildHuffmanTable(CVE-2023-4863)Bumping the floor to
>=10.3.0clears all four in a single hop. Added a comment above the pin so future contributors know why the floor was chosen and can bump again when the next Pillow CVE lands.Why the floor instead of an upper bound
Tightening only the lower bound (rather than pinning a narrow range) keeps the constraint additive — any user currently on a non-vulnerable version (10.3.0 through 11.x) is unaffected, and fresh
pip installresolution still lands on the latest available.The immediate exposure was narrow for fresh installs (pip resolves
>=10.0.0to the latest available, which is currently past the CVE window), but the constraint itself documents intent — saying "this skill works with Pillow 10.0.0+" was a claim the CVE data falsified. Reproducible-build scenarios with pinned lockfiles, airgapped installs, or older pip resolvers could still land on vulnerable versions.How this was found
Surfaced by Griffith, a Claude Code plugin static analyzer we're building. It's in Phase 1.5 preview (not yet stable; schema is still
0.1), runs purely static analysis — no plugin code is executed — and delegates CVE data to Google's osv-scanner for the supply-chain tier.If you want to reproduce the finding yourself:
Expected output: the four CVEs above, grouped by severity, under a
## Dependencies/CVE scansection.Happy to share the full JSON report (
--jsonflag), paste the wrapper's rendered markdown, or walk through anything else — just ask. Also genuinely interested in feedback on the tool itself if it comes up. One caveat I'll flag proactively: thefixed_versionslist osv-scanner emits is cross-ecosystem (for the libwebp CVE it includes Rust / Electron / Go / NuGet versions), so I verified the Pillow-specific fix versions against OSV'saffected[]array directly rather than trusting the raw aggregated list. We have a Griffith follow-up for per-ecosystem filtering.Test plan
api.osv.dev/v1/vulns/<id>)PIL.Imageis actively imported in the skill's scripts (grep)