fix(mosaic): reject unsafe pr merge numbers (#520)
This commit is contained in:
@@ -142,4 +142,75 @@ if ! grep -q '/api/v1/repos/mosaicstack/stack/pulls/123/merge' "$LOG_FILE"; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SENTINEL="$SANDBOX/injected-sentinel"
|
||||
INJECTION="123; touch $SENTINEL #"
|
||||
|
||||
cat > "$MOCK_BIN/gh" <<'EOF'
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
printf 'gh %q ' "$@" >> "$PR_MERGE_TEST_LOG"
|
||||
printf '\n' >> "$PR_MERGE_TEST_LOG"
|
||||
if [[ "$*" == *"pr view"* ]]; then
|
||||
cat <<'JSON'
|
||||
{"number":123,"title":"mock","baseRefName":"main","headRefName":"feature/mock"}
|
||||
JSON
|
||||
exit 0
|
||||
fi
|
||||
if [[ "$*" == *"pr merge"* ]]; then
|
||||
exit 0
|
||||
fi
|
||||
echo "unexpected gh invocation: $*" >&2
|
||||
exit 98
|
||||
EOF
|
||||
chmod +x "$MOCK_BIN/gh"
|
||||
|
||||
cd "$REPO_DIR"
|
||||
git remote set-url origin https://github.com/mosaicstack/stack.git
|
||||
: > "$LOG_FILE"
|
||||
rm -f "$SENTINEL"
|
||||
if "$SCRIPT_DIR/pr-merge.sh" -n "$INJECTION" -m squash --skip-queue-guard > "$OUTPUT" 2>&1; then
|
||||
echo "Expected GitHub metacharacter PR number to be rejected." >&2
|
||||
sed 's/redacted-test-token/***REDACTED***/g' "$OUTPUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -e "$SENTINEL" ]]; then
|
||||
echo "GitHub metacharacter PR number executed injected shell command." >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -s "$LOG_FILE" ]]; then
|
||||
echo "GitHub metacharacter PR number should be rejected before gh calls." >&2
|
||||
sed 's/redacted-test-token/***REDACTED***/g' "$LOG_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -q 'Invalid PR number' "$OUTPUT"; then
|
||||
echo "Expected invalid PR number error for GitHub metacharacter input." >&2
|
||||
sed 's/redacted-test-token/***REDACTED***/g' "$OUTPUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$REPO_DIR"
|
||||
git remote set-url origin https://git.mosaicstack.dev/mosaicstack/stack.git
|
||||
export GITEA_LOGIN="git.mosaicstack.dev"
|
||||
: > "$LOG_FILE"
|
||||
rm -f "$SENTINEL"
|
||||
if "$SCRIPT_DIR/pr-merge.sh" -n "$INJECTION" -m squash --skip-queue-guard > "$OUTPUT" 2>&1; then
|
||||
echo "Expected Gitea metacharacter PR number to be rejected." >&2
|
||||
sed 's/redacted-test-token/***REDACTED***/g' "$OUTPUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -e "$SENTINEL" ]]; then
|
||||
echo "Gitea metacharacter PR number executed injected shell command." >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -s "$LOG_FILE" ]]; then
|
||||
echo "Gitea metacharacter PR number should be rejected before tea/curl calls." >&2
|
||||
sed 's/redacted-test-token/***REDACTED***/g' "$LOG_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -q 'Invalid PR number' "$OUTPUT"; then
|
||||
echo "Expected invalid PR number error for Gitea metacharacter input." >&2
|
||||
sed 's/redacted-test-token/***REDACTED***/g' "$OUTPUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "pr-merge.sh Gitea fallback regression passed"
|
||||
|
||||
Reference in New Issue
Block a user