Repository navigation
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests.
Additional details and impacted files@@ Coverage Diff @@
## main #635 +/- ##
==========================================
- Coverage 79.71% 72.16% -7.55%
==========================================
Files 166 166
Lines 10573 10573
==========================================
- Hits 8428 7630 -798
- Misses 2145 2943 +798 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
pip-audit was failing on advisories published since the lockfile was last refreshed, unrelated to the Brotli bump. Upgrade every flagged package that has a fix installable on Python 3.10 with flwr 1.18 (aiohttp, anyio, certifi, gitpython, monai, msgpack, multidict, nltk, pip, pyasn1, setuptools, starlette, torch, tornado, urllib3, virtualenv, werkzeug, and others). Ignore the remaining advisories, which have no installable fix under the project's pins (cryptography and protobuf capped by flwr, datasets and fsspec capped by the datasets<3 pin and flwr-datasets, pillow, filelock and keras fixes requiring Python 3.11+, transformers fixes only in 5.x or none).
Member
Author
|
pre-commit.ci run |
The APFL smoke test is the only standard smoke test whose metrics moved after the dependency upgrades (torch 2.12 to 2.14 is the likely cause). Values are taken from the Linux CI run, since this test does not run locally.
Second half of the APFL metric refresh: the client fit accuracies and losses, taken from the Linux CI run once the eval metrics matched.
This branch has not been deployed
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.
Why
CVE-2026-111497 is an out-of-bounds write in the Brotli decoder that allows remote code execution through a crafted br-compressed stream. The PyPI
Brotlipackage up to 1.2.0 andbrotlicffi1.2.0.x carry the same decoder. Both are fixed in Brotli 1.2.1 and brotlicffi 1.2.1.0. (Node.js is affected too, but this repo has no Node version pins, so this PR only covers the Python packages.)What changed
uv.lock:brotli1.2.0 to 1.2.1,brotlicffi1.2.0.1 to 1.2.1.0, viauv lock --upgrade-package brotli --upgrade-package brotlicffiwith uv 0.9.11 (the version CI pins). No other packages changed.revision = 2torevision = 3, andrequires-pythonnormalized from">=3.10.0, <3.11"to"==3.10.*"(same meaning). uv 0.7.20 produced the samerequires-pythonchange, so it is uv normalization, not a constraint change.py7zrin thellmdependency group (brotli on CPython, brotlicffi on PyPy).How I verified it
uv lock --locked(uv 0.9.11): passes.uv sync --locked(uv 0.9.11), default groups plusdocs/test/dev: passes. brotli is not in those groups, so I then installed thebrotlientry fromuv export --locked --group llmwith--require-hashesinto the synced env:python -c "import brotli; print(brotli.__version__)"prints1.2.1.pre-commit run --files uv.lock: all hooks pass, includinguv-lock.py7zrin thellmgroup, and the suite is heavy.Deploy impact
No deploy on merge.
docs.ymlruns on push to main whenuv.lockchanges and rebuilds and pushes the docs site to GitHub Pages; that is the only publish step a merge triggers. PyPI publishing runs only onv*tags.CI fix: pip-audit (second commit)
run-code-checkfailed at the pip-audit step, not because of this bump: pip-audit flagged 258 advisories in 26 packages that were published after the lockfile was last refreshed.mainhas the same lockfile apart from brotli, so it would fail the same way.uv.lock:uv lock --upgrade-package ...(uv 0.9.11) for every flagged package. Packages that reached a fixed version include aiohttp 3.14.5, anyio 4.14.2, certifi 2026.10.23, gitpython 3.2.1, monai 1.6.1, msgpack 1.2.3, multidict 7.1.0, nltk 3.10.4, pip 26.2.2, pyasn1 0.6.4, setuptools 84.2.1, starlette 1.7.0, torch 2.14.1 (torchvision 0.29.1), tornado 6.5.10, urllib3 2.8.0, virtualenv 21.14.13, werkzeug 3.1.9. 32 packages changed in total; nothing was added or removed..github/workflows/static_code_checks.yaml: added the advisories that have no fix installable under this project's pins toignore-vulns, with a comment explaining each group, following the existing entries:Clearing these for real means moving to Python 3.11+ and a newer flwr, which is a bigger change than this PR.
Verified locally, the same way CI does:
uv sync --group dev --group test --group codestyle(uv 0.9.11), then pip-audit 2.10.0 against.venvwith the workflow's ignore list: "No known vulnerabilities found, 70 ignored".uv run pre-commit run --all-files: every hook passes (includinguv-lock, ruff, mypy, nbqa-mypy).uv run pytest -m "not smoketest" tests: 475 passed, 33 deselected.Smoke test metrics (third and fourth commits)
With the upgraded lock,
test_apflin the standard smoke tests failed on metric drift (round 2 val global accuracy, for example, moved from 0.72833 to 0.765). Every other standard smoke test passed unchanged. torch 2.12 to 2.14 is the likely cause, and the APFL values were last refreshed the same way after the May dependency upgrade (e72a0e6, 984b08a). This test is skipped locally ("Test doesn't work locally") and a forced local run gives different numbers on macOS, so I took the new values from the Linux CI runs: eval metrics from the first failing run, then client training metrics once those matched. Onlytests/smoke_tests/apfl_server_metrics.jsonandapfl_client_metrics.jsonchanged.Still red:
test_apflis bimodal on CI. Across five runs on this branch with the same lock, APFL produced one of two sets of values: set A (runs 1 and 2, now in the JSON files; the server metrics matched on run 2) and set B (runs 3 to 5, for example round 1 val personal accuracy 0.53056 vs 0.52189, round 3 val local accuracy 0.65222 vs 0.81022). This looks like the same flakinessmainalready has:test_apflfailed the standard smoke tests on six recent runs (September and October) that did not touch torch (for example the gitpython, virtualenv and anyio Dependabot PRs and pre-commit-ci-update-config). Fail-fast then cancels the other groups, which otherwise pass. This needs a maintainer decision: investigate the nondeterminism, loosen the APFL tolerance, or accept a rerun that lands on set A.pre-commit.ci
pre-commit.ci fails only on the
uv-lockhook: it cannot download CPython 3.10.20 from GitHub ("dns error ... Temporary failure in name resolution"). It failed the same way on the original Brotli commit, before any of these changes, and again after apre-commit.ci runre-trigger. The same hook passes in the GitHub Actionsrun-code-checkjob.