Skip to content

Take x402 2.19.0 in the lock, which an earlier merge dropped - #112

Merged
vvillait88 merged 1 commit into
mainfrom
x402-lock-fix
Aug 12, 2026
Merged

Take x402 2.19.0 in the lock, which an earlier merge dropped#112
vvillait88 merged 1 commit into
mainfrom
x402-lock-fix

Conversation

@vvillait88

Copy link
Copy Markdown
Contributor

Summary

Lands the x402 2.18.0 to 2.19.0 lock bump that was written and reviewed earlier today but never actually merged: the branch carrying it was PR'd at the commit before it, so main kept resolving 2.18.0 while that PR's body said the bump was included. Caught while pruning stale branches, by comparing branch content against main rather than trusting ancestry (squash merges rewrite SHAs, so "not fully merged" proves nothing either way).

2.19.0 is a security fix. x402_http_server_base normalized a request path by decoding percent-escapes globally, so a decoded byte could create a segment boundary the router never saw, and a wildcard tail carrying a decoded line feed failed to match its own route, skipping payment verification and settlement outright. 2.19.0 decodes one segment at a time and re-escapes any separator a decode yields.

Scope is our own test and dev resolution only. The declared range is x402[evm,fastapi]>=2.9,<3 and is unchanged, so anyone installing the x402 extra already resolves 2.19.0 or newer. Nothing published was affected, and no release is needed for this.

Type of change

  • Bug fix (no breaking change)
  • New feature (no breaking change)
  • Breaking change (existing callers must update)
  • Docs, tests, or internal maintenance only

Public API

None. Lockfile only; the declared dependency range does not move.

Test plan

ruff check clean, ty check agentscore_commerce/ clean, pytest tests/ 1861 passed / 4 skipped with coverage 95.35% against the 95% floor, all against the upgraded lock.

Checklist

  • Tests cover the new behavior, and the suite passes locally
  • Lint, format, and type checks pass
  • Docs and README examples updated if the public surface changed
  • No secrets, credentials, or personal data in the diff or the tests

The bump was written and reviewed but never landed: the branch carrying it
was PR'd at the commit before it, so main kept resolving 2.18.0 while the PR
body said otherwise.

2.19.0 fixes path normalization in x402_http_server_base, where decoding
percent-escapes globally let a decoded byte create a segment boundary the
router never saw, so a wildcard tail carrying a decoded line feed failed to
match its own route and skipped payment verification and settlement.

Scope is our own test and dev resolution only. The declared range is
x402>=2.9,<3 and is unchanged, so consumers installing the x402 extra
already resolve 2.19.0 or newer; nothing published was affected.
@vvillait88
vvillait88 merged commit dfd3e5f into main Aug 12, 2026
7 checks passed
@vvillait88
vvillait88 deleted the x402-lock-fix branch August 12, 2026 13:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant