Repository navigation
fix(tool): port upstream webfetch redirect rule checks (anomalyco/opencode#59748) - #1660
devin-ai-integration[bot] wants to merge 1 commit into
Conversation
…ncode#59748) Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
|
CI note: the only red check is |
Issue for this PR
Closes #1658
Type of change
What does this PR do?
Ports the upstream webfetch permission fixes to the fork's
packages/opencode/src/tool/webfetch.ts:webfetchusedfetch's defaultredirect: "follow", so only the URL the model passed was checked against thewebfetchrules. An allowed page that redirects to a denied URL (for examplehttp://169.254.169.254/...under{"*": "allow", "http://169.254.169.254/*": "deny"}) was fetched and returned to the model. Redirects are now followed by hand (redirect: "manual", max 10 hops). Each target is evaluated against the effective ruleset (ctx.permissions) before it is requested. A denied target throwsPermissionDeniedError; as upstream does, the user is not asked again for redirect targets. Redirects to non-HTTP schemes fail.https://docs.example.com*also matchedhttps://docs.example.com@evil.example/. Fragments are dropped before rules are matched.URL.href, not the raw string the model typed.Upstream made these changes in the v2
packages/core/src/tool/plugin/webfetch.ts. This PR adapts them to the fork's legacy tool and wraps the changes inaltimate_change ... upstream_fix:markers. The failure cache, UA fallback and error messages are unchanged.How did you verify your code works?
packages/opencode/test/tool/webfetch.test.ts: an allowed redirect is followed, a denied redirect target stops before it is requested, non-HTTP and endless redirects fail, and credentials are rejected. Onmain, the denied-redirect, scheme and credential tests fail. With this change, all 37 tests inwebfetch.test.tsandwebfetch-cache.test.tspass.bun run typecheck(tsgo) inpackages/opencodepasses, and so does the pre-pushbun typecheck.bun run script/upstream/analyze.ts --markers --base origin/main --strict: ok.Cost side effects
None. A redirect issues the same number of HTTP requests as before. Rule checks are local.
Screenshots / recordings
Not a UI change.
Checklist
Tracked in #1478.
Written by Devin
Summary by cubic
Fixes the webfetch tool's permission checks so allowed pages can no longer redirect to denied URLs, and incoming URLs are normalized before being matched against rules.
https://docs.example.com*no longer matcheshttps://docs.example.com@evil.example/.URL.hrefinstead of the raw input string.Written for commit 0e4745a. Summary will update on new commits.