[llvm] workflows/issue-release-workflow: Validate user input in /cherry-pick commands (PR #199249)
via llvm-commits
llvm-commits at lists.llvm.org
Fri May 22 11:38:15 PDT 2026
llvmbot wrote:
<!--IGNORE-->
>> > @llvm/pr-subscribers-github-workflow
>> > Author: Tom Stellard (tstellar)
>> >
>> > Changes
>> > … commands
>> > This protects against mailicious inputs embedded in comments with /cherry-pick commands.
>> >
>> > Full diff: https://github.com/llvm/llvm-project/pull/199249.diff
>> > 1 Files Affected:
>> >
>> > * (modified) .github/workflows/issue-release-workflow.yml (+30-6)
>> >
>> > ```diff
>> > diff --git a/.github/workflows/issue-release-workflow.yml b/.github/workflows/issue-release-workflow.yml
>> > index f1d2c1a29971b..48514f2d56786 100644
>> > --- a/.github/workflows/issue-release-workflow.yml
>> > +++ b/.github/workflows/issue-release-workflow.yml
>> > @@ -26,21 +26,43 @@ on:
>> > types:
>> > - opened
>> >
>> > -env:
>> > - COMMENT_BODY: ${{ github.event.action == 'opened' && github.event.issue.body || github.event.comment.body }}
>> >
>> > jobs:
>> > + backport-commits-validate-input:
>> > + runs-on: ubuntu-24.04
>> > + environment: main-branch-only
>> > + if: >-
>> > + (github.repository == 'llvm/llvm-project') &&
>> > + !startswith(github.event.comment.body, '<!--IGNORE-->') &&
>> > + contains(github.event.action == 'opened' && github.event.issue.body || github.event.comment.body, '/cherry-pick')
>> > + outputs:
>> > + comment-body: ${{ steps.validate.outputs.comment-body }}
>> > + steps:
>> > + - name: Validate Input Comment
>> > + id: validate
>> > + env:
>> > + COMMENT_BODY: ${{ github.event.action == 'opened' && github.event.issue.body || github.event.comment.body }}
>> > + run: |
>> > + # This will strip out everything from the comment except for the /cherry-pick commands.
>> > + # If there are multiple /cherry-pick commands they will all be included in the output.
>> > + # This is fine since the github-automation.py script can handle multiple cherry-pick commands.
>> > + validated_comment=$(\
>> > + grep -o -e '/cherry-pick \(https://github.com/llvm/llvm-project/commit/\)\?[a-f0-9]\+' <<< $COMMENT_BODY \
>> > + )
>> > + echo "Validated Comment is:"
>> > + echo ${validated_comment}
>> > +
>> > + echo comment-body=${validated_comment} >> $GITHUB_OUTPUT
>> > +
>> > backport-commits:
>> > name: Backport Commits
>> > runs-on: ubuntu-24.04
>> > environment: main-branch-only
>> > + needs:
>> > + - backport-commits-validate-input
>> > permissions:
>> > issues: write
>> > pull-requests: write
>> > - if: >-
>> > - (github.repository == 'llvm/llvm-project') &&
>> > - !startswith(github.event.comment.body, '<!--IGNORE-->') &&
>> > - contains(github.event.action == 'opened' && github.event.issue.body || github.event.comment.body, '/cherry-pick')
>> > steps:
>> > - name: Fetch LLVM sources
>> > uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
>> > @@ -58,6 +80,8 @@ jobs:
>> > ./llvm/utils/git/github-automation.py --token ${{ github.token }} setup-llvmbot-git
>> >
>> > - name: Backport Commits
>> > + env:
>> > + COMMENT_BODY: ${{ needs.backport-commits-validate-input.outputs.comment-body }}
>> > run: |
>> > printf "%s" "$COMMENT_BODY" |
>> > ./llvm/utils/git/github-automation.py \
>> > ```
>>
>> Error: Command failed due to missing milestone.
>
>Another benefit of this change is that the job would not have triggered for this PR if the input was being validated.
Error: Command failed due to missing milestone.
https://github.com/llvm/llvm-project/pull/199249
More information about the llvm-commits
mailing list