mirror of
https://github.com/cloudflare/vinext.git
synced 2026-05-09 08:25:34 +02:00
[PR #107] [MERGED] fix: handle malformed percent-encoded URLs gracefully #316
Labels
No labels
enhancement
enhancement
good first issue
help wanted
nextjs-tracking
nextjs-tracking
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/vinext#316
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/cloudflare/vinext/pull/107
Author: @threepointone
Created: 2/26/2026
Status: ✅ Merged
Merged: 2/26/2026
Merged by: @threepointone
Base:
main← Head:fix/malformed-percent-encoding-dos📝 Commits (1)
c02ae12fix: handle malformed percent-encoded URLs gracefully📊 Changes
8 files changed (+159 additions, -8 deletions)
View changed files
📝
packages/vinext/src/index.ts(+15 -3)📝
packages/vinext/src/server/app-dev-server.ts(+5 -1)📝
packages/vinext/src/server/app-router-entry.ts(+7 -1)📝
packages/vinext/src/server/middleware.ts(+8 -1)📝
packages/vinext/src/server/prod-server.ts(+18 -2)📝
tests/app-router.test.ts(+47 -0)📝
tests/features.test.ts(+45 -0)📝
tests/pages-router.test.ts(+14 -0)📄 Description
Problem
decodeURIComponent()on attacker-controlled request paths throwsURIError: URI malformedfor invalid percent sequences (e.g./%E0%A4%A). When this happens outside a try/catch in a request handler, the uncaught exception terminates the Node process — a single malformed request causes full service outage.Fix
Wrap all
decodeURIComponentcalls on user-controlled input in try/catch across every server entry point. On decode failure, return 400 Bad Request and continue serving.Files changed
prod-server.tsapp-router-entry.tsapp-dev-server.tsindex.tsmiddleware.tsTests
11 regression tests added across three test files:
app-router.test.ts— App Router prod server + dev server (5 tests)pages-router.test.ts— Pages Router prod server (2 tests)features.test.ts— Pages Router dev server (4 tests)🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.