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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔴 This PR fixes CVE-2026-40192 in
template/requirements.txtby upgrading Pillow to 12.2.0, butchart_data_extractor/poetry.lockstill pins Pillow at 12.1.1 (line 599), leaving that environment exposed to the same FITS decompression bomb vulnerability. Runpoetry update pillowinchart_data_extractor/and commit the updated lock file to complete the fix.Extended reasoning...
Incomplete security fix:
chart_data_extractor/poetry.lockstill pins Pillow 12.1.1This PR correctly updates
template/requirements.txttopillow==12.2.0to patch CVE-2026-40192, which allows a specially crafted FITS image to trigger unbounded GZIP decompression, leading to OOM denial-of-service. However, the repository contains a second Pillow installation path that was not updated:chart_data_extractor/poetry.lock.Affected code path: In
chart_data_extractor/poetry.lock(lines 598–603), the lock file resolves Pillow to version 12.1.1 withoptional = falseandgroups = ["main"]. This means Pillow is a non-optional, main-group dependency that is unconditionally installed bypoetry install. Pillow arrives as a transitive dependency ofmatplotlib(whichpyproject.tomllists as a direct dependency), and the lock file explicitly pins it to the vulnerable version.Why existing checks don't catch it: The PR diff only touches
template/requirements.txt. Poetry lock files are not automatically updated when arequirements.txtin a sibling directory is changed; each directory with apyproject.toml/poetry.lockpair is managed independently. The CI workflow.github/workflows/charts_tests.ymlrunspoetry installinchart_data_extractor/, so every CI build for that component installs the vulnerable Pillow 12.1.1.Impact: Any developer or CI pipeline that runs
poetry installinchart_data_extractor/will install Pillow 12.1.1 and remain exposed to CVE-2026-40192. Whilechart_data_extractoritself may not directly process FITS images, Pillow is present in the environment and could be exercised by upstream code, tests, or future changes.Step-by-step proof:
poetry installinchart_data_extractor/.chart_data_extractor/poetry.lockand installspillow==12.1.1(line 599) becauseoptional = falseand it is in themaingroup.PIL.Image.open(), triggering unbounded memory consumption.Fix: Run
poetry update pillow(orpoetry lock --no-updateafter manually editingpyproject.tomlto constrain the version) insidechart_data_extractor/, then commit the updatedpoetry.lockas part of this PR.