chore(deps)(deps): bump the production-dependencies group with 3 updates - #330
Merged
doublegate merged 1 commit intoJul 30, 2026
Merged
Conversation
Bumps the production-dependencies group with 3 updates: [cc](https://github.com/rust-lang/cc-rs), [clap](https://github.com/clap-rs/clap) and [libc](https://github.com/rust-lang/libc). Updates `cc` from 1.3.0 to 1.4.0 - [Release notes](https://github.com/rust-lang/cc-rs/releases) - [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md) - [Commits](rust-lang/cc-rs@cc-v1.3.0...cc-v1.4.0) Updates `clap` from 4.6.3 to 4.6.4 - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](clap-rs/clap@clap_complete-v4.6.3...clap_complete-v4.6.4) Updates `libc` from 0.2.186 to 0.2.189 - [Release notes](https://github.com/rust-lang/libc/releases) - [Changelog](https://github.com/rust-lang/libc/blob/0.2.189/CHANGELOG.md) - [Commits](rust-lang/libc@0.2.186...0.2.189) --- updated-dependencies: - dependency-name: cc dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: production-dependencies - dependency-name: clap dependency-version: 4.6.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: production-dependencies - dependency-name: libc dependency-version: 0.2.189 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: production-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
Contributor
Author
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
doublegate
added a commit
that referenced
this pull request
Jul 30, 2026
When agy's cached Google OAuth session lapses on the self-hosted runner, `agy --print` emits its INTERACTIVE login flow to stdout instead of a review -- a live-shaped `accounts.google.com/o/oauth2/...` authorization URL plus a "paste the authorization code here" prompt and an "authentication failed or timed out" tail. That text is non-empty, so `have_text()` classified it as a valid review and the script posted it verbatim as a public PR comment. Incident: it landed on PR #330 (a Dependabot bump) as a "github-actions" review comment carrying the OAuth URL -- noise, phishing-shaped content, and an advertisement that the runner's auth had dropped. That comment has been removed. Root cause: the capture pipeline had no notion of "agy produced output, but the output is an auth prompt, not a review." `have_text()` only checks for non-whitespace bytes. Fix -- two independent layers, plus a helper: * is_auth_prompt() (new): true when a captured file carries agy's interactive-login signature -- the accounts.google.com OAuth endpoint URL, "paste the authorization code", "Authentication required. Please visit", "Waiting for authentication", or "authentication failed or timed out". Keyed on agy runtime strings a genuine review never emits, so a review that merely discusses "authentication" is not misclassified (verified against a benign review sample). * Layer 1 (retry loop): after CR-normalizing each attempt's capture and before the have_text() success break, reject an auth-prompt capture as a hard, NON-retryable failure. Re-auth is a human action on the runner host, so retrying only thrashes the backoff. Blank the capture (so no later path can post it), set auth_failed=1, and break. A dedicated post-loop branch then exits non-zero with an actionable message, ahead of the generic empty-output path. * Layer 3 (pre-post): a final hard guard immediately before `gh pr comment` -- if the fully assembled body still trips the auth-prompt signature, refuse to post and fail the job. This is the last line of defense: a public PR comment must never carry an OAuth URL regardless of any upstream change to body assembly. Behavior on a healthy, authenticated runner is unchanged: a real review never matches is_auth_prompt, so it posts exactly as before. Only the lapsed-session path changes -- from "leak the OAuth URL" to "fail loudly in the job log, post nothing." Syntax-checked (`bash -n`) and the signature validated against the exact leaked comment text, a benign authentication-discussing review, and empty output. Synced byte-identical across the shared reviewer template and RustyNES / RustySNES / RustyN64 (single source of truth). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
doublegate
deleted the
dependabot/cargo/production-dependencies-1a1f3de9fb
branch
July 30, 2026 04:05
doublegate
added a commit
to doublegate/RustySNES
that referenced
this pull request
Jul 30, 2026
* fix(reviewer): never post agy's OAuth login prompt to a PR Sync the shared Antigravity (`agy`) reviewer hardening from the template. When agy's cached Google OAuth session lapses on the self-hosted runner, `agy --print` emits its INTERACTIVE login flow to stdout instead of a review -- a live-shaped `accounts.google.com/o/oauth2/...` authorization URL plus a "paste the authorization code here" prompt. That text is non-empty, so `have_text()` classified it as a valid review and the script posted it verbatim as a public PR comment. The incident surfaced on doublegate/RustyNES#330 (a Dependabot bump); this keeps the shared reviewer byte-identical across the template and all three Rusty* repos. Fix -- two independent layers, plus a helper: * is_auth_prompt() (new): detects agy's interactive-login signature (the accounts.google.com OAuth endpoint URL + agy's own prompt strings). Keyed on runtime strings a genuine review never emits, so a review that merely discusses "authentication" is not misclassified. * Layer 1 (retry loop): reject an auth-prompt capture as a hard, non-retryable failure; blank it, flag it, and exit non-zero with an actionable "re-authenticate agy on the runner host" message. * Layer 3 (pre-post): a final hard guard immediately before `gh pr comment` -- refuse to post any body that trips the signature. Behavior on a healthy, authenticated runner is unchanged. Syntax-checked (`bash -n`) and validated against the exact leaked comment text, a benign authentication-discussing review, and empty output. Byte-identical (same sha256) with the template and RustyNES scripts/agy-review.sh. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): gate auth-prompt detection on the absence of review structure Adopt agy's own adversarial review finding (flagged BLOCKING on the sync PRs): the initial is_auth_prompt() matched the OAuth-login signature anywhere in agy's output, so a GENUINE review that quotes those strings -- e.g. one reviewing this very script (whose diff contains them) or a PR implementing OAuth -- would be wrongly discarded in the retry loop or blocked from posting. Require BOTH conditions now: the auth signature present AND the mandated review structure absent. The reviewer prompt requires a "### Blocking issues" section in every review (agy writes "None found." when clean), which agy's raw interactive login flow never contains. A real review thus keeps its section and posts; only the raw login flow (signature present, structure absent) is rejected. Verified against six cases incl. the exact false-positive agy flagged (a review quoting the auth strings WITH a Blocking-issues section now posts). bash -n clean; byte-identical across the template and all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): anchor the review-structure sentinel to the header line Adopt agy's second-round BLOCKING finding: the review-structure check used an unanchored, case-insensitive `grep -qi 'Blocking issues'`, so the mere phrase appearing in prose or an error line -- alongside an OAuth URL -- would disarm is_auth_prompt() and let the login flow post (a false NEGATIVE = a leak). Anchor to the Markdown section header at line start (`^#{2,4} Blocking issues`, case-sensitive) instead. This fails SAFE: text without a genuine header is treated as a possible login flow and blocked, while a real review's mandated "### Blocking issues" header always matches, so a review that quotes the auth strings still posts. Verified against seven cases, incl. the exact bypass agy described (a raw login flow containing the phrase "blocking issues" in prose + an OAuth URL is now correctly blocked) and a lowercase-phrase-plus-URL log line. bash -n clean; byte-identical across template + all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): key the OAuth-leak guard on the live URL, not review structure Redesign converging several rounds of agy's own adversarial review, which oscillated between the guard being too broad (false positive: suppressing a genuine review that discusses auth or quotes this script) and too narrow (false negative: an OAuth URL leaking when a section header appeared in the same output). Both failure modes came from trying to answer "is this a review?" heuristically. Key on the one artifact that unambiguously marks agy's login flow instead: a live Google OAuth authorization URL (the https scheme + host + /o/oauth2/ endpoint path). * oauth_url_present() -- Layer 3, now UNCONDITIONAL: refuse to post any body carrying such a URL, with no header/structure exemption an interleaved URL could disarm (fixes the round-3 leak finding; also immune to header case and trailing punctuation). * is_auth_prompt() -- Layer 1: a lapsed session is detected by the live URL (always present in the flow) plus agy's terminal failure line; it gates only the retry / clean-exit UX, never the security guarantee. A code review quotes this script's BARE regex (host + path, no scheme) or discusses auth in prose -- neither is a live URL -- so reviewing the reviewer or an OAuth-related PR no longer false-positives. Verified against seven cases covering every scenario agy raised across three rounds: raw login flow (blocked), a review quoting the bare regex (posts), a title-case header with auth prose (posts), a header+colon with an interleaved live URL (blocked), a failure-line-only lapse, empty, and a real review body. bash -n clean; byte-identical across template + all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): drop trailing-slash requirement + remove the phrase fallback Adopt agy's round-4 findings on the OAuth-URL leak guard: * OAUTH_URL_RE no longer requires a trailing slash after `/o/oauth2`. A URL emitted as `.../o/oauth2?client_id=...` or bare `.../o/oauth2` would otherwise slip past oauth_url_present and leak. The scheme (`https?://`) is still required, so a review quoting this script's bare host/path pattern still does not match -- no safety lost. Matching is also made case-insensitive (URL scheme/host are case-insensitive; still self-safe). * Removed the secondary `authentication failed or timed out` substring fallback and collapsed both layers onto the single oauth_url_present check. agy flagged the fallback (correctly) as broad enough to abort a genuine review that merely discusses auth-timeout handling. The live URL is always present in a real login flow, so it is both necessary and sufficient on its own; the same unconditional check now serves Layer 1 (retry / clean-exit) and Layer 3 (block the post). Verified: no-slash and query-only URLs are now blocked; a review quoting the bare pattern or discussing auth timeouts posts normally; the script does not self-match. bash -n clean; byte-identical across template + all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
doublegate
added a commit
to doublegate/RustyN64
that referenced
this pull request
Jul 30, 2026
* fix(reviewer): never post agy's OAuth login prompt to a PR Sync the shared Antigravity (`agy`) reviewer hardening from the template. When agy's cached Google OAuth session lapses on the self-hosted runner, `agy --print` emits its INTERACTIVE login flow to stdout instead of a review -- a live-shaped `accounts.google.com/o/oauth2/...` authorization URL plus a "paste the authorization code here" prompt. That text is non-empty, so `have_text()` classified it as a valid review and the script posted it verbatim as a public PR comment. The incident surfaced on doublegate/RustyNES#330 (a Dependabot bump); this keeps the shared reviewer byte-identical across the template and all three Rusty* repos. Fix -- two independent layers, plus a helper: * is_auth_prompt() (new): detects agy's interactive-login signature (the accounts.google.com OAuth endpoint URL + agy's own prompt strings). Keyed on runtime strings a genuine review never emits, so a review that merely discusses "authentication" is not misclassified. * Layer 1 (retry loop): reject an auth-prompt capture as a hard, non-retryable failure; blank it, flag it, and exit non-zero with an actionable "re-authenticate agy on the runner host" message. * Layer 3 (pre-post): a final hard guard immediately before `gh pr comment` -- refuse to post any body that trips the signature. Behavior on a healthy, authenticated runner is unchanged. Syntax-checked (`bash -n`) and validated against the exact leaked comment text, a benign authentication-discussing review, and empty output. Byte-identical (same sha256) with the template and RustyNES scripts/agy-review.sh. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): gate auth-prompt detection on the absence of review structure Adopt agy's own adversarial review finding (flagged BLOCKING on the sync PRs): the initial is_auth_prompt() matched the OAuth-login signature anywhere in agy's output, so a GENUINE review that quotes those strings -- e.g. one reviewing this very script (whose diff contains them) or a PR implementing OAuth -- would be wrongly discarded in the retry loop or blocked from posting. Require BOTH conditions now: the auth signature present AND the mandated review structure absent. The reviewer prompt requires a "### Blocking issues" section in every review (agy writes "None found." when clean), which agy's raw interactive login flow never contains. A real review thus keeps its section and posts; only the raw login flow (signature present, structure absent) is rejected. Verified against six cases incl. the exact false-positive agy flagged (a review quoting the auth strings WITH a Blocking-issues section now posts). bash -n clean; byte-identical across the template and all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): anchor the review-structure sentinel to the header line Adopt agy's second-round BLOCKING finding: the review-structure check used an unanchored, case-insensitive `grep -qi 'Blocking issues'`, so the mere phrase appearing in prose or an error line -- alongside an OAuth URL -- would disarm is_auth_prompt() and let the login flow post (a false NEGATIVE = a leak). Anchor to the Markdown section header at line start (`^#{2,4} Blocking issues`, case-sensitive) instead. This fails SAFE: text without a genuine header is treated as a possible login flow and blocked, while a real review's mandated "### Blocking issues" header always matches, so a review that quotes the auth strings still posts. Verified against seven cases, incl. the exact bypass agy described (a raw login flow containing the phrase "blocking issues" in prose + an OAuth URL is now correctly blocked) and a lowercase-phrase-plus-URL log line. bash -n clean; byte-identical across template + all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): key the OAuth-leak guard on the live URL, not review structure Redesign converging several rounds of agy's own adversarial review, which oscillated between the guard being too broad (false positive: suppressing a genuine review that discusses auth or quotes this script) and too narrow (false negative: an OAuth URL leaking when a section header appeared in the same output). Both failure modes came from trying to answer "is this a review?" heuristically. Key on the one artifact that unambiguously marks agy's login flow instead: a live Google OAuth authorization URL (the https scheme + host + /o/oauth2/ endpoint path). * oauth_url_present() -- Layer 3, now UNCONDITIONAL: refuse to post any body carrying such a URL, with no header/structure exemption an interleaved URL could disarm (fixes the round-3 leak finding; also immune to header case and trailing punctuation). * is_auth_prompt() -- Layer 1: a lapsed session is detected by the live URL (always present in the flow) plus agy's terminal failure line; it gates only the retry / clean-exit UX, never the security guarantee. A code review quotes this script's BARE regex (host + path, no scheme) or discusses auth in prose -- neither is a live URL -- so reviewing the reviewer or an OAuth-related PR no longer false-positives. Verified against seven cases covering every scenario agy raised across three rounds: raw login flow (blocked), a review quoting the bare regex (posts), a title-case header with auth prose (posts), a header+colon with an interleaved live URL (blocked), a failure-line-only lapse, empty, and a real review body. bash -n clean; byte-identical across template + all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviewer): drop trailing-slash requirement + remove the phrase fallback Adopt agy's round-4 findings on the OAuth-URL leak guard: * OAUTH_URL_RE no longer requires a trailing slash after `/o/oauth2`. A URL emitted as `.../o/oauth2?client_id=...` or bare `.../o/oauth2` would otherwise slip past oauth_url_present and leak. The scheme (`https?://`) is still required, so a review quoting this script's bare host/path pattern still does not match -- no safety lost. Matching is also made case-insensitive (URL scheme/host are case-insensitive; still self-safe). * Removed the secondary `authentication failed or timed out` substring fallback and collapsed both layers onto the single oauth_url_present check. agy flagged the fallback (correctly) as broad enough to abort a genuine review that merely discusses auth-timeout handling. The live URL is always present in a real login flow, so it is both necessary and sufficient on its own; the same unconditional check now serves Layer 1 (retry / clean-exit) and Layer 3 (block the post). Verified: no-slash and query-only URLs are now blocked; a review quoting the bare pattern or discussing auth timeouts posts normally; the script does not self-match. bash -n clean; byte-identical across template + all three Rusty* repos. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.
Bumps the production-dependencies group with 3 updates: cc, clap and libc.
Updates
ccfrom 1.3.0 to 1.4.0Release notes
Sourced from cc's releases.
Changelog
Sourced from cc's changelog.
Commits
413c4ecchore(cc): release v1.4.0 (#1803)3dcd9cefeat: support trim paths with clang-cl.exe (#1799)8896876Bump release-plz/action from 0.5.130 to 0.5.131 (#1798)Updates
clapfrom 4.6.3 to 4.6.4Release notes
Sourced from clap's releases.
Changelog
Sourced from clap's changelog.
Commits
87ec1adchore: Release78f2529docs: Update changelogb61f270Merge pull request #6369 from Metbcy/fix/zsh-completion-ordering74c6666fix(complete): Keep zsh candidate orderd142d8fMerge pull request #6360 from epage/stringba89563style: Prefer explicit string operationsbea966eMerge pull request #6359 from epage/manb811986chore(man):Remove unused required-features0010bf2Merge pull request #6358 from clap-rs/renovate/crate-ci-typos-1.xbab9b24chore(deps): Update compatible (dev) (#6357)Updates
libcfrom 0.2.186 to 0.2.189Release notes
Sourced from libc's releases.
... (truncated)
Changelog
Sourced from libc's changelog.
... (truncated)
Commits
ef0906elibc: Release 0.2.1895a79f76riscv32-musl: Rename padding fields to avoid a conflict3e51062psp: Fixoverflowing_literalswarningse352fddemscripten: add pthread_sigmask, sigwait, sigwaitinfo, sigtimedwait, faccessa...63221b3macros: Requiresafeinsafe_f!invocations707ab52macros: Requireunsafeinf!invocations8e40c94Enable clone3() syscall on sparc-linux and sparc64-linux8427909windows: Add back link names fortime-related symbolsb4863fanuttx: fix wchar_t definition under arm41c683dnuttx: mirror type definitionsDependabot 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 rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditions