trailofbits / trailofbits/claude-code-config

git push hook regex false-positives on branch names containing "main"

Open Beginner friendly
#46 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Shell
Stars
2.1k
Forks
161
Avg merge
3d 59m
Merged PRs (30d)
1

Description

The git push PreToolUse hook matches main/master anywhere in the command string, blocking pushes to branches that contain these as substrings:

git push -u origin deps/aiohttp-3.13.5-remaining  # blocked — "main" in "remaining"
git push origin feature/maintain-state              # blocked — "main" in "maintain"
git push origin fix/mainframe-bug                   # blocked — "main" in "mainframe"

The fix requires main/master to appear as a standalone ref target by checking the preceding character is a whitespace, colon (refspec), slash (fully-qualified ref), or + (force-push prefix):

-git[[:space:]]+push.*(main|master)
+git[[:space:]]+push[[:space:]].*([[:space:]]|:|/|\+)(main|master)([[:space:]]|$)

This matches the rigor level applied to the rm hook in #33.

Blocked:

  • git push origin main
  • git push -u origin main
  • git push origin feature:main (refspec)
  • git push origin refs/heads/main (fully-qualified)
  • git push origin +main (force prefix)
  • git push origin HEAD:refs/heads/main

Allowed:

  • git push -u origin deps/aiohttp-3.13.5-remaining
  • git push origin feature/maintain-state
  • git push origin fix/mainframe-bug
  • git push (bare push to tracking branch)

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Find the git push PreToolUse hook and inspect its current branch-name regex, then compare its matching rules with the rm hook referenced in #33. Update the matching behavior so the listed protected refs are blocked while the allowed branch names and bare push remain allowed.

Written by the indexing model from the issue text.

Assessment

Tech stack
shell
Domain
cli, tooling
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.