Fix PR sweeper: stop expanding pull_request.body inside a run comment - #490
Merged
soyalejolopez merged 1 commit intoJul 22, 2026
Merged
Conversation
The "Write PR metadata" step warned that interpolating the PR body into a
shell step is an injection sink, but it wrote the pull_request.body context
expression (in ${{ }} form) inside a comment to say so. GitHub expands ${{ }}
expressions textually before bash runs -- even inside a "#" comment -- so the
PR body was injected into the generated script. On any PR whose body contained
newlines this broke the step with exit code 127 ("$'\r': command not found").
Rewritten as literal "pull_request.body" text so nothing is expanded. The body
is still deliberately never captured; all values continue to flow through env
and jq --arg.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: cecb163d-04c4-4b01-ab7a-14d25f7ec690
Contributor
🛰️ PR Sweeper reportRisk: 🟠 MEDIUM · Security gate: ✅ passing · Files: 1 🔒 Automated guardrails (authoritative)
🤖 Dual-model AI review (advisory)Deep-reasoning reviewer —
|
soyalejolopez
added a commit
that referenced
this pull request
Jul 22, 2026
#484) * Harden supply chain: message-center injection, PII in samples, workflow perms - update-message-center: sanitise fetched Message Center posts against a schema whitelist and JSON.stringify + escape </script>, U+2028/2029 and & when embedding data into the generated page, preventing stored HTML/script injection from upstream feed content. Also removes the unattended 'gh pr merge --auto' step so generated changes require human review. - Sample data: replace real-looking tenant identities, UPNs, phone numbers and GUIDs in three sample CSVs with Contoso / 555-01xx / random-GUID placeholders (no PII). - build-catalog.yml: drop top-level token to 'contents: read' and grant 'contents: write' only to the publish job, so the PR-triggered validate job (which runs untrusted fork changes) can no longer write to the repo. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: cecb163d-04c4-4b01-ab7a-14d25f7ec690 * chore: re-trigger checks after upstream sweeper fix (#490) Empty commit to run Stage 1 PR Sweeper against the now-fixed workflow on master. Will be removed by squash-merge. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: cecb163d-04c4-4b01-ab7a-14d25f7ec690 --------- Co-authored-by: soyalejolopez <88358406+soyalejolopez@users.noreply.github.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.
The "Write PR metadata" step warned that interpolating the PR body into a shell step is an injection sink, but it wrote the pull_request.body context expression (in ${{ }} form) inside a comment to say so. GitHub expands ${{ }} expressions textually before bash runs -- even inside a "#" comment -- so the PR body was injected into the generated script. On any PR whose body contained newlines this broke the step with exit code 127 ("$'\r': command not found").
Rewritten as literal "pull_request.body" text so nothing is expanded. The body is still deliberately never captured; all values continue to flow through env and jq --arg.
Copilot-Session: cecb163d-04c4-4b01-ab7a-14d25f7ec690