Commit 09a8ed5
committed
fix: eliminate TOCTOU races in catalog_fetch() for file:// and bare path URLs
Remove exists() pre-checks and catch FileNotFoundError from read_text()
for both file:// and bare path catalog sources. Also catches
OSError/UnicodeError to preserve the decode-error wrapping contract.
Add regression test for the TOCTOU fix covering both file:// URLs and
bare paths: 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)1 parent e80c541 commit 09a8ed5
2 files changed
Lines changed: 29 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
147 | 147 | | |
148 | 148 | | |
149 | 149 | | |
| 150 | + | |
| 151 | + | |
150 | 152 | | |
151 | 153 | | |
152 | 154 | | |
153 | 155 | | |
154 | 156 | | |
155 | 157 | | |
156 | 158 | | |
| 159 | + | |
| 160 | + | |
157 | 161 | | |
158 | 162 | | |
159 | 163 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
4 | 7 | | |
5 | 8 | | |
6 | 9 | | |
| |||
201 | 204 | | |
202 | 205 | | |
203 | 206 | | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
0 commit comments