fix: eliminate TOCTOU race in yamlio.load_yaml() - #3909
Quratulain-bilal wants to merge 2 commits into
Conversation
Remove exists() pre-check and catch FileNotFoundError from read_text() to provide a clear BundlerError even under race conditions.
There was a problem hiding this comment.
Pull request overview
Eliminates the TOCTOU race when loading YAML files.
Changes:
- Converts
FileNotFoundErrorintoBundlerError. - Removes the vulnerable existence pre-check.
- Missing a targeted regression test.
Show a summary per file
| File | Description |
|---|---|
src/specify_cli/bundler/lib/yamlio.py |
Handles deletion during file reads. |
Review details
Tip
Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- Files reviewed: 1/1 changed files
- Comments generated: 1
- Review effort level: Balanced
Add regression test for the TOCTOU fix in load_yaml(). The mocked Path is observable as present (exists() returns True) but read_text() raises FileNotFoundError, proving the exists() removal eliminates the race window. Co-authored-by: GitHub Copilot (model: mimo-v2.5-free, supervised)
|
Thanks — has a test, appreciated. Please add the AI-disclosure per CONTRIBUTING. Bigger-picture: this is the same TOCTOU fix as #3908 (there it's |
Problem
yamlio.load_yaml()checksexists()then callsread_text(). The file can be deleted between the two calls, causing a rawFileNotFoundErrorinstead of the clearBundlerError.Fix
Remove the
exists()pre-check and catchFileNotFoundErrorfromread_text().Testing
BundlerErroris raised when file is missing