DOG-015 MED: IGNOGlob catastrophic backtracking — ReDoS from an untrusted .gitignore

dog/git/IGNO.c's IGNOGlob (IGNO.c:24-66) recurses on EVERY */** suffix with no memoization and no step budget: for(;;){ if(IGNOGlob(pat,tail)) return YES; if(empty) break; used1(tail); } (:36-40, :46-51). A single crafted pattern like *a*a*a*…*a*b matched against a long non-matching path is exponential-time, and ** nesting compounds it. .gitignore files come from cloned/untrusted repositories, and every worktree scan (be status, diff, post) routes through IGNOMatch per chain-file × per pattern (≤256) × per path prefix — so a hostile repo shipping a crafted .gitignore hangs the process. Method: Issues.

Input

Context

Goals

Constraints

WIP

TODOs

Blockers and bummers

Outcome