Repository navigation
fix(deps)!: hono ^4.13.16 and @hono/node-server ^2.1.6 clear seven public advisories; a request path holding a backslash is answered 400 - #33225
Draft
objectstack-fleet[bot] wants to merge 2 commits into
Conversation
Both releases fix public advisories that the scheduled OSV audit reports against the locked hono 4.13.12 and @hono/node-server 2.1.5. The two workspace override targets lift in lockstep with the declared ranges, so the workspace lock and a downstream install both land on the fixed releases. @hono/node-server 2.1.6 answers 400 to a request whose path holds a backslash, where 2.1.5 rewrote it to '/' and routed it. A real-listener pin records that answer beside the same route without the backslash. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L9qibyksdYkFdXq4KWWzwP
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 27 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
This was referenced Nov 14, 2026
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.
Requested by Tesla · project thread
Fixes #33211
Clause-②: yes (narrowing) —
@hono/node-server2.1.6 answers400 Bad Requestto a request whose path (the part before?) holds a backslash, before any route runs; up to 2.1.5 the backslash was rewritten to/and the request reached the route that path names. No other status, header, body or error text of ours moves, and the request-body limit (413 PAYLOAD_TOO_LARGE) answers as before.Metadata-protocol: none
Skills-docs: none — no skill under
skills/**and no page undercontent/docs/**teaches request-path spelling at the HTTP door.维护者速读
hono升到^4.13.16、@hono/node-server升到^2.1.6(锁文件实际落在 4.13.18 / 2.1.8),工作区里这两条 override 的目标同步抬高,7 个包的声明版本一起改,下游安装也会拿到修复版。/api/v1\health)的请求,现在直接回 400,以前会被改成/继续路由;浏览器和常见 HTTP 库本来就不会发这种请求。请求体上限的 413 不受影响。回滚 = revert 本 PR。pnpm-workspace.yaml的两条 override 和注释;.changeset/33211-hono-security-bump.md(BREAKING 说明);packages/plugins/plugin-hono-server/src/request-target-backslash.pin.test.ts。pnpm --filter @objectstack/plugin-hono-server exec vitest run src/request-target-backslash.pin.test.ts,预期 3/3 通过(带反斜杠 400,不带 200,?后的反斜杠 200)。What changes
hono^4.13.9→^4.13.16inplugin-hono-serverandplugin-auth(dependencies) and in@objectstack/hono,trigger-api,plugin-webhooks,plugin-approvals(devDependencies).@hono/node-server^2.1.3→^2.1.6inplugin-hono-server(dependency) andclient(devDependency). The@objectstack/honopeer range onhonostays^4.12.8, as the workspace note records.pnpm-workspace.yaml:'hono@<5.0.0'target^4.13.5→^4.13.16,'@hono/node-server@<3.0.0'target^2.1.3→^2.1.6, selectors unchanged at the major boundary, one dated note line each. The overrides rewrite every in-scope specifier, so the declarations alone would not move the lock (precedentValidate Package Dependenciesnow fails on every PR and will fail on main's next scheduled run — 15 advisories across 7 packages (2 Critical innext), all with fix versions, and no lockfile moved #16999, deps: the daily OSV scan has been red since at least 2026-10-26 on 6 public advisories; bump@hono/node-server(a shipped dependency of plugin-hono-server and client),qsandsysteminformation, and decidedeepmerge(no fixed version) #27921; seat claim amendment 6871660942).pnpm install). Only hono and node-server keys move:hono@4.13.12→4.13.18,@hono/node-server@2.1.5(hono@4.13.12)→2.1.8(hono@4.13.18), the two override lines and the in-scope specifiers (56 lines, 28 +/28 −). The caret targets float to the newest patch, as finding: pnpm override 台账两项体检事实 —— 26/28 条自失效上界形状、3 条 #5835 裁决范围外的空转 override #6095 measured for this override shape; that is also what a downstream install of^4.13.16/^2.1.6resolves today..changeset/33211-hono-security-bump.md, patch for the seven packages, BREAKING banner for the backslash-path 400, ADR-0087 dispositionnot-required (no-migration-prescription).packages/plugins/plugin-hono-server/src/request-target-backslash.pin.test.ts(asked by the seat): over a real listener and a raw socket (fetchnormalises the backslash client-side),/api/v1/things\t_1answers 400,/api/v1/things/t_1answers 200, and/api/v1/things/t_1?q=a\banswers 200.Tests
All at commit
76bc2487on a closure rebuilt with declarations (turbo run build --filter='./packages/**' --filter='@objectstack/dogfood^...' --filter='./ui/**', 118/118). The merge oforigin/mainat56fd8aebbrought nopackage.json, lock or workspace change, so nothing was re-run after it.pnpm --filter PKG test)@objectstack/plugin-hono-server(incl. #33172body-limit.test.ts,request-body-refusal.test.ts, the new pin)@objectstack/hono(incl.hono-body-refusal.test.ts)@objectstack/rest@objectstack/runtime@objectstack/plugin-auth@objectstack/plugin-approvals@objectstack/client@objectstack/plugin-webhooks@objectstack/trigger-apirequest-target-backslash.pin.test.ts: 3/3.Acceptance notes
api.osv.devis refused by this container's proxy, so the scan itself is not run locally: NOT MEASURED locally, read from this PR'sValidate Dependenciesrun. After the bumppnpm-lock.yamlholds onlyhono@4.13.18and@hono/node-server@2.1.8, both at or above every advisory's fixed version.osv-scanner.tomlis unchanged (no new exemption).hono/utils/bodyand node-server's request-body path did not change, so fix(plugin-hono-server, hono)!: a request body over the server's limit is answered 413 PAYLOAD_TOO_LARGE and is not read past the limit #33172's request-body limit answers as before (pins and dogfood below). Changes that do not move an answer of ours: node-server websocket-upgrade target checks (we run no node-server upgrade), response-stream cancel on a destroyed socket, hono RegExpRouter wildcard/middleware matching rewrite andgetPathhandling of a malformed%(the suites below stay green, no route of ours moved), query-key lookup for crafted queries, and csrf / validator / hono serve-static /.mount()/ cookie / accepts changes in middlewares we do not import.ruling|Ruling-ref|maintainer|⛔) on the touched surface: hits only inpnpm-workspace.yaml's better-auth and scim notes, which do not govern the hono lines. No hits in the touchedpackage.jsonfiles.Verification
Ablation of the backslash pin (node-server's refusal put back to 2.1.5's behaviour)
@hono/node-server@2.1.8dist/index.mjs(whatplugin-hono-serverresolves; no vitest alias), the lineif (query === -1 || backslash < query) throw new RequestError("Backslash in request path");replaced by a comment. On disk: anchor count 0, marker count 1.1 failed | 2 passed (3). The backslash request was routed:Received: "HTTP/1.1 200 OK ... {\"success\":true,\"data\":{\"id\":\"t_1\"}}"atrequest-target-backslash.pin.test.ts:53.1c062cab…), re-run3 passed (3).Dogfood boot (`pnpm dev:crm -- --fresh -p 38421`, Console built with `pnpm console:build`)
GET /→ 200text/html, redirected to/_console/, titleObjectOS.GET /api/v1/data/crm_account?limit=2→ 200 with records.POST /api/v1/data/crm_account/query→413"code":"PAYLOAD_TOO_LARGE"; a small body on the same door → 200.GET /api/v1/health→200 OK;GET /api/v1\health→400 Bad Request;GET /api/v1/health?x=a\b→200 OK.@hono/node-server@2.1.8_hono@4.13.18. Server stopped afterwards.Gates (derived at 76bc248, 79 commands)
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 79 commands; each run with stdin from/dev/null, exit codes recorded before any pipe: 79 × exit 0.--ranreconciliation:79 derived, 79 run, 0 NOT-MEASURED, 0 UNRUN(a derived zero: every line carries an exit code, none is 3).dist/(5 prerequisite/resolve reds:check:skill-examples,check:dts-closure,check:dual-build-cjs-loads,check:i18n,check:lean-entry-closure). That pass was discarded, the closure rebuilt with declarations, and all 79 re-run green.pnpm lint(eslint . --no-inline-config) at56fd8aeb→ exit 0.api.osv.devrefused by the container proxy); this PR'sValidate Dependenciesrun is the reading.Full dogfood battery at 56fd8ae (owed by the narrowing arm)
pnpm --filter @objectstack/dogfood testunder the verify lock, no shard, no path:VERDICT command-exit 1·Test Files 1 failed | 465 passed | 1 skipped (467)·Tests 6 failed | 3932 passed | 31 skipped (3969).test/print-service-render.dogfood.test.ts(6 of 8: "The print page did not finish rendering within 30 s … the console never showed a print page for the record"). It runs only where a built Console and a Chromium are both present; CI's dogfood job builds no Console, so CI skips it. This container had both because the dogfood boot above built the Console.hono/@hono/node-servercontents swapped back to main's 4.13.12 / 2.1.5 (copied from the npm tarballs, restored afterwards, tree hashes compared equal), fails the same 6 tests the same way (6 failed | 2 passed (8)). Noted for the seat, not filed by this card.