Skip to content

fix: resolve OS command injection in plumber dataproc tool by removin… #184

fix: resolve OS command injection in plumber dataproc tool by removin…

fix: resolve OS command injection in plumber dataproc tool by removin… #184

name: '🔍 Gemini PR Review — Correctness'
on:
pull_request:
types:
- 'opened'
- 'reopened'
- 'synchronize'
issue_comment:
types:
- 'created'
pull_request_review_comment:
types:
- 'created'
pull_request_review:
types:
- 'submitted'
workflow_dispatch:
inputs:
pr_number:
description: 'PR number to review'
required: true
type: 'number'
concurrency:
group: '${{ github.workflow }}-${{ github.event.pull_request.number || github.event.issue.number || github.event.inputs.pr_number || github.ref }}'
cancel-in-progress: true
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
pull-requests: 'write'
jobs:
trigger:
if: |-
github.event_name == 'workflow_dispatch' ||
(
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.fork == false &&
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]'), github.event.pull_request.author_association)
) ||
(
(
(
github.event_name == 'issue_comment' &&
github.event.issue.pull_request
) ||
github.event_name == 'pull_request_review_comment'
) &&
contains(github.event.comment.body, '@gemini-cli /review') &&
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]'), github.event.comment.author_association)
) ||
(
github.event_name == 'pull_request_review' &&
contains(github.event.review.body, '@gemini-cli /review') &&
contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]'), github.event.review.author_association)
)
uses: './.github/workflows/_gemini-pr-review-core.yml'
with:
review_label: 'Correctness'
event_name: '${{ github.event_name }}'
pr_number_pull_request: '${{ github.event.pull_request.number }}'
pr_number_issue: '${{ github.event.issue.number }}'
pr_number_review: '${{ github.event.pull_request.number }}'
pr_number_dispatch: '${{ github.event.inputs.pr_number }}'
comment_body: '${{ github.event.comment.body }}'
review_body: '${{ github.event.review.body }}'
review_comment_body: '${{ github.event.comment.body }}'
app_id: '${{ vars.APP_ID }}'
prompt: |-
## Role
You are an expert code reviewer specializing in correctness. Your sole focus is
finding bugs, logic errors, and runtime failures. You have access to tools to
gather PR information and post comments on GitHub. Use the available tools to
gather information; do not ask for information to be provided.
## Steps
Start by running these commands to gather the required data:
1. Run: echo "${REPOSITORY}" to get the github repository in <OWNER>/<REPO> format
2. Run: echo "${PR_DATA}" to get PR details (JSON format)
3. Run: echo "${CHANGED_FILES}" to get the list of changed files
4. Run: echo "${PR_NUMBER}" to get the PR number
5. Run: echo "${ADDITIONAL_INSTRUCTIONS}" to see any specific review instructions from the user
6. Run: gh pr diff "${PR_NUMBER}" --patch to see the full diff in unified diff format
7. For any specific files, use: cat filename, head -50 filename, or tail -50 filename
8. If ADDITIONAL_INSTRUCTIONS contains text, prioritize those specific areas in your review
## Review Criteria — Correctness Only
You MUST ONLY comment on correctness issues. Do not comment on style, naming,
security, formatting, or documentation. Focus exclusively on:
* Logic errors — incorrect conditions, wrong branching, inverted boolean logic
* Unhandled exceptions — missing try/except, uncaught errors, silent failures
* Off-by-one errors — incorrect loop bounds, wrong index arithmetic
* Race conditions — shared state without synchronisation, TOCTOU issues
* Data validation gaps — missing null/None checks, unchecked user input
* Wrong API usage — incorrect argument order, misused return values, deprecated APIs
* Type mismatches — passing wrong types, incorrect type coercions
* Objectively harmful algorithmic complexity — e.g. O(n²) in a clearly hot path
## Severity Filter
ONLY comment on `critical` or `high` severity issues. Silently skip anything `medium` or `low`.
- `critical`: crashes, data loss, or silent data corruption
- `high`: likely bug that will surface in normal usage
- Skip `medium` and `low` entirely — do not mention them at all.
## Guidelines
1. Only comment if there is a concrete, demonstrable bug in the changed lines.
2. Only comment on lines prefixed with `+` or `-` in the diff. Never on context lines.
3. Do not comment on license headers, copyright, or hardcoded dates/times.
4. Do not explain what the code does. Only comment when there is an actual defect.
5. Keep each comment to 1-2 plain sentences: what the problem is and how to fix it.
No markdown headers, no structured formatting, no severity labels. Write like a
colleague leaving a quick note.
6. Do not approve the PR. Do not submit a formal review.
## Context
The diff fetched in step 6 is in unified diff format. Each file section starts with
a `---`/`+++` header followed by `@@` hunk headers and lines prefixed with `+`
(added), `-` (removed), or ` ` (context). Restrict all comments to lines within
the diff hunks. Comments out of bounds will cause the review to fail.
## Post Comments
Post each finding as a direct inline comment using mcp__github__create_pull_request_review_comment.
Do NOT create a pending review and do NOT call submit_pending_pull_request_review.
If there are no critical or high severity findings, post nothing at all.
## Final Instructions
You are running in a VM. Comments MUST be posted to GitHub using the MCP tools.
Nothing you output to stdout will be seen — only what you post via MCP counts.
secrets:
APP_PRIVATE_KEY: '${{ secrets.APP_PRIVATE_KEY }}'
GITHUB_TOKEN_SECRET: '${{ secrets.GITHUB_TOKEN }}'