Skip to content

chore(deps): bump urllib3 from 2.7.0 to 2.8.0 - #12

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/urllib3-2.8.0
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/urllib3-2.8.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 20, 2026 •

Copy link
Copy Markdown

Bumps urllib3 from 2.7.0 to 2.8.0.

Release notes

Sourced from urllib3's releases.

2.8.0

🚀 urllib3 is fundraising for HTTP/2 support

urllib3 is raising ~$40,000 USD to release HTTP/2 support and ensure long-term sustainable maintenance of the project. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects please consider contributing financially to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.

Thank you for your support.

Security

Fixed the following security issues:

  • The TLS configuration for HTTPS proxies could be ignored or overridden. (High severity, GHSA-8988-9cw3-xx77)
  • HTTPResponse.stream() and read_chunked() could buffer a chunk-size line of unbounded length in memory. (High severity, GHSA-vxq7-64xx-v4gw)
  • Chunked Deflate streaming could enter an infinite loop. (Medium severity, GHSA-gh4c-6fx4-qh6g)

[!IMPORTANT] urllib3 2.8.0 fixes HTTPS proxy TLS configuration being ignored or overridden by destination settings. Configurations relying on that behavior may require changes.

Configure proxy CA certificates and client certificates in proxy_ssl_context, and proxy identity checks with proxy_assert_hostname or proxy_assert_fingerprint. Destination client certificates and identity overrides no longer apply to HTTPS forwarding proxy connections.

[!NOTE] CVE IDs had not yet been assigned to these advisories at the time of release due to a backlog at GitHub's CNA.

Deprecations & Removals

  • Deprecated using an empty collection as the Retry option allowed_methods to retry any verb. (#5044)

Features

  • Added Url.auth_decoded and Url.auth_decoded_joined convenience properties to the result of parse_url(). (#4945)
  • Added basic_auth_encoding and proxy_basic_auth_encoding parameters to urllib3.util.make_headers(). (#5092)

Bugfixes

  • Fixed response header handling to replace obsolete folded header lines (obs-fold) with spaces in accordance with RFC 9112, preventing raw CRLF sequences from appearing in header values such as Set-Cookie. (#1362)

  • Fixed usage of proxy_ssl_context with ProxyManager when use_forwarding_for_https=True. Passing ssl_context instead of proxy_ssl_context for HTTPS proxies in this configuration now emits a FutureWarning and will raise an error in v3.0. (#2577)

  • Changed behavior of the default ConnectionPool.pool initialization. LifoQueue is now resolved from the queue module after the ConnectionPool is instantiated instead of using the default cached QueueCls class property. This is done because sometimes the queue.LifoQueue is monkey-patched late in the program, such as by gevent. (#3289)

  • Raised UnrewindableBodyError instead of ValueError when retrying a request whose body had tell() but not seek(). (#3779)

  • Decoded percent-encoded SOCKS proxy credentials before authenticating with the proxy server. (#3785)

  • Fixed HTTPResponse.drain_conn() to discard unread response data in 64 KiB chunks (same as the default amt when doing HTTPResponse.stream(...)). (#5019)

  • Fixed is_ipaddress() to detect non-standard IPv4 forms accepted by socket.connect, such as hex (0x7f000001), octal (0177.0.0.1), and decimal integers (2130706433), ensuring SSL certificate verification uses the correct mode for these addresses. (#5029)

  • Fixed HTTPConnectionPool.urlopen raising a misleading FullPoolError instead of ValueError when called with an invalid timeout argument on a pool created with block=True. (#5059)

  • Fixed port-zero handling to preserve explicit :0 values instead of substituting the default ports 80 or 443 in URL parsing, pool selection, proxy configuration, connection_from_url(), and HTTP/2 request authority. (#5071, #5101)

  • Fixed a bug where PoolManager passed the assert_hostname and assert_fingerprint parameters to HTTP connection pools. (#5077)

  • Fixed HTTPConnectionPool.urlopen() and HTTP proxy forwarding to strip URL fragments from absolute request targets before sending requests. (#5079)

  • Added safeguards to the proxy tunneling code to prevent potential security issues when handling invalid characters in the proxy host and HTTP headers. This change affects users of Python 3.10, Python 3.11, and Python 3.12 when the standard library does not contain the fix; those on newer Python versions should upgrade to 3.13.14+ or 3.14.5+ to get the same security fixes. (#5091)

  • Fixed HTTPSConnection.connect() overriding ProxyConfig.ssl_context's certificate policy and proxy identity checks with the target connection's TLS settings when forwarding through an HTTPS proxy.

    HTTPSConnection no longer applies target SNI, assertions, or client credentials to forwarding proxy handshakes and continues to use its ssl_context as a fallback when an HTTPS proxy forwards an HTTP target. (#5093)

  • Fixed URL parsing to more strictly enforce RFC 3986 host syntax, rejecting invalid host input such as raw spaces and control characters, malformed percent-encodings, and percent-encoded control characters in HTTP(S) hosts and IPv6 zone identifiers, including proxy CONNECT tunnel targets. Host normalization now also follows RFC 3986 normalization rules for percent-encoded octets by decoding percent-encoded unreserved characters and uppercasing the hexadecimal digits of retained percent-encoded octets. (#5095)

... (truncated)

Changelog

Sourced from urllib3's changelog.

2.8.0 (2026-09-15)

Security

Fixed the following security issues:

  • The TLS configuration for HTTPS proxies could be ignored or overridden. (High severity, GHSA-8988-9cw3-xx77 <https://github.com/urllib3/urllib3/security/advisories/GHSA-8988-9cw3-xx77>__)
  • HTTPResponse.stream() and read_chunked() could buffer a chunk-size line of unbounded length in memory. (High severity, GHSA-vxq7-64xx-v4gw <https://github.com/urllib3/urllib3/security/advisories/GHSA-vxq7-64xx-v4gw>__)
  • Chunked Deflate streaming could enter an infinite loop. (Medium severity, GHSA-gh4c-6fx4-qh6g <https://github.com/urllib3/urllib3/security/advisories/GHSA-gh4c-6fx4-qh6g>__)

.. caution::

urllib3 2.8.0 fixes HTTPS proxy TLS configuration being ignored or
overridden by destination settings. Configurations relying on that
behavior may require changes.

Configure proxy CA certificates and client certificates in proxy_ssl_context, and proxy identity checks with proxy_assert_hostname or proxy_assert_fingerprint. Destination client certificates and identity overrides no longer apply to HTTPS forwarding proxy connections.

Deprecations & Removals

  • Deprecated using an empty collection as the Retry option allowed_methods to retry any verb. ([#5044](https://github.com/urllib3/urllib3/issues/5044) <https://github.com/urllib3/urllib3/issues/5044>__)

Features

  • Added Url.auth_decoded and Url.auth_decoded_joined convenience properties to the result of parse_url(). ([#4945](https://github.com/urllib3/urllib3/issues/4945) <https://github.com/urllib3/urllib3/issues/4945>__)
  • Added basic_auth_encoding and proxy_basic_auth_encoding parameters to urllib3.util.make_headers(). ([#5092](https://github.com/urllib3/urllib3/issues/5092) <https://github.com/urllib3/urllib3/issues/5092>__)

Bugfixes

... (truncated)

Commits
  • b1d30ab Release 2.8.0
  • 9016d7e Skip test_read_chunked_with_trailing_data_does_not_hang for brotlicffi (#5258)
  • 9101f58 Fix nox -s docs warning (#5256)
  • cd770b0 Merge commit from fork
  • ea2ad7b Merge commit from fork
  • 0716e31 Fix loading unencrypted client keys with a password in pyOpenSSL (#5255)
  • 43c68c8 Test pickling of InvalidChunkLength (#5247)
  • 308b279 Share security policy between GitHub and Read the Docs (#5253)
  • 53fa073 Add policy on duplicate pull requests (#5252)
  • 5f2a6a8 Assert on the ALPN extension in test_tunnel_sets_http_11_alpn (#5232)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the Security Alerts page.

Summary by cubic

Updates urllib3 from 2.7.0 to 2.8.0, fixing three security advisories: HTTPS proxy TLS configuration being overridden (GHSA-8988-9cw3-xx77), unbounded chunk-size line buffering (GHSA-vxq7-64xx-v4gw), and an infinite loop in chunked Deflate streaming (GHSA-gh4c-6fx4-qh6g).

Migration

  • HTTPS proxy TLS now requires configuring proxy certificates and identity checks via proxy_ssl_context/proxy_assert_hostname/proxy_assert_fingerprint; destination TLS settings no longer apply to forwarding proxy connections.

Written for commit f606c93. Summary will update on new commits.

View guided diff Turn on auto-fix

Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.7.0 to 2.8.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](urllib3/urllib3@2.7.0...2.8.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.8.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code labels Oct 20, 2026
@coderabbitai

coderabbitai Bot commented Oct 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: JWEB0689/coderabbit/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6fa1826e-8d0f-4805-88a1-95a949dc77df

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the chore label Oct 20, 2026
Comment thread uv.lock
[[package]]
name = "urllib3"
version = "2.7.0"
version = "2.8.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔥 The Roast: Three high-severity advisories stroll through the lockfile while the front door to PyPI is left politely ajar behind them. urllib3 is not declared anywhere in pyproject.toml — it rides along as a ghost dependency inside requests, boto3, giteapy, and PyGithub. A fresh pip install pr-agent happens to drag 2.8.0 along for the ride, but any environment that already has urllib3 2.7.0 installed gets a friendly "Requirement already satisfied" and stays vulnerable, because pip has no reason to touch a transitive dependency that still fits requests' <3 cap. So this PR patches our lockfile (and therefore our Docker/CI builds) while the very people who pip install pr-agent keep the vulnerable version. Meanwhile pr_agent/git_providers/gerrit_provider.py:15 does a plain import urllib3.util, so we are not even a transitive consumer — we are a direct one in a trench coat.

🩹 The Fix: Declare it with a floor, exactly as your own policy at pyproject.toml:28-31 demands ("Security-sensitive packages below declare >=patched,<next-major ranges ... the floor is the last vetted patched release", The-PR-Agent#2523) and as the certifi precedent did in The-PR-Agent#3204 (bf05b468 added certifi>=2026.7.22 plus tests/unittest/test_certifi_pin_policy.py):

  "urllib3>=2.8.0,<3",

Re-run uv lock afterwards, and add a guard test next to test_certifi_pin_policy.py asserting urllib3 declares a floor rather than an == pin, so the next dependabot bump cannot quietly drop the guarantee again.

📏 Severity: warning

Comment thread uv.lock
[[package]]
name = "urllib3"
version = "2.7.0"
version = "2.8.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔥 The Roast: urllib3.util.parse_url — the one and only urllib3 API this codebase calls directly — just got a personality transplant in 2.8.0: "Fixed URL parsing to more strictly enforce RFC 3986 host syntax, rejecting invalid host input such as raw spaces and control characters, malformed percent-encodings, and percent-encoded control characters in HTTP(S) hosts". Meanwhile GerritProvider.__init__ (pr_agent/git_providers/gerrit_provider.py:226-229) hands the operator-supplied gerrit.url straight into parse_url and then immediately dereferences parsed.scheme, parsed.host, parsed.port with zero guard rails. 2.7 was lenient about host syntax; 2.8.0 explicitly tightened it, so hosts that used to parse fine can now be rejected — and the parser signals that by handing back None or raising, not by returning a Url you can trust. The result would be a provider that detonates at init with AttributeError: 'NoneType' object has no attribute 'scheme', a crash message that tells an operator precisely nothing. The shipped example config even uses a non-HTTP scheme (# url = "ssh://gerrit.example.com:29418", pr_agent/settings/configuration.toml:407), so the validation path that actually matters here is not even the one the upstream notes spell out. And no test in the suite pins a gerrit.url that would catch any of this.

🩹 The Fix: Treat the parse as fallible and turn a bad URL into an actionable config error instead of an AttributeError (add import urllib3.exceptions alongside the existing import urllib3.util):

try:
    parsed = urllib3.util.parse_url(base_url)
except urllib3.exceptions.LocationParseError as e:
    raise ValueError(f"Invalid gerrit.url {base_url!r}: {e}") from e
if parsed is None or not parsed.host:
    raise ValueError(f"Invalid gerrit.url {base_url!r}")

Add unit tests in tests/unittest/test_gerrit_provider.py: one feeding a host 2.8 rejects (raw space, control character, malformed percent-encoding) and asserting a clear ValueError rather than a TypeError/AttributeError, plus one keeping the shipped ssh:// example working.

📏 Severity: suggestion

@kilo-code-bot

kilo-code-bot Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Code Review Roast 🔥

Verdict: 2 Issues Found | Recommendation: Address before merge

Overview

Severity Count
🚨 critical 0
⚠️ warning 1
💡 suggestion 1
🤏 nitpick 0
Issue Details (click to expand)
File Line Roast
uv.lock 3732 Three high-severity advisories shipped to the lockfile, but pyproject.toml declares no urllib3 requirement at all — pip consumers with urllib3 2.7.0 already installed keep the vulnerable version. Add a >=2.8.0,<3 floor per the repo's own security-pin policy (The-PR-Agent#2523) and the certifi precedent (The-PR-Agent#3204).
uv.lock 3732 urllib3 2.8.0 tightened parse_url host validation; GerritProvider.__init__ (pr_agent/git_providers/gerrit_provider.py:226-229) dereferences the parse result with no guard, so a rejected gerrit.url becomes an AttributeError instead of a config error. Guard the parse and add a regression test.

🏆 Best part: The bump itself is pristine — three lines, correct hashes, no stray lockfile churn, no requires-python drift, and it clears a High-severity HTTPS-proxy TLS advisory plus the unbounded chunk-size buffering bug. Dependency hygiene is a surprisingly common place for subtle lockfile rot, and this one is surgically clean. I had my flamethrower loaded and found nothing to burn. Suspicious.

💀 Worst part: The security fix only reaches this repo's own builds. urllib3 has no entry in pyproject.toml, so a consumer who already has 2.7.0 installed gets pip's "Requirement already satisfied" and stays exposed to GHSA-8988-9cw3-xx77, GHSA-vxq7-64xx-v4gw, and GHSA-gh4c-6fx4-qh6g — while pr_agent/git_providers/gerrit_provider.py:15 imports urllib3 directly, making it a direct dependency wearing a trench coat. Your own policy comment at pyproject.toml:28-31 already demands >=patched,<next-major floors for exactly this, and The-PR-Agent#3204 (bf05b468) did it for certifi. The floor is one line. The vulnerability window is however long your users take to pip install -U.

📊 Overall: A well-executed lockfile bump that patched the server and left the front porch unlocked. Add the floor, guard the one parse call, and this becomes a genuinely good dependency PR.

Fix these issues in Kilo Cloud

Files Reviewed (1 files)
  • uv.lock - 2 issues
Context read (unchanged, for verification)
  • pyproject.toml - dependency floors policy, urllib3 not declared
  • pr_agent/git_providers/gerrit_provider.py:15,226-229 - direct urllib3.util.parse_url usage
  • pr_agent/settings/configuration.toml:407 - shipped ssh:// gerrit URL example
  • tests/unittest/test_gerrit_provider.py, tests/unittest/test_certifi_pin_policy.py - existing coverage and policy-guard precedent

Reviewed by free · Input: 80K · Output: 24.6K · Cached: 1.3M

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants