Commit 02413cc
fix(spm): eliminate TOCTOU races in cache prep and spm.sh cleanup (DEVA11Y-482,483)
Two confirmed time-of-check/time-of-use race conditions (APPSEC-415):
F-013 (DEVA11Y-482) — Cache version-dir TOCTOU in the SPM plugin:
prepareArtifact() did a non-atomic check -> removeItem -> createDirectory ->
extract on the cache <version> directory. Concurrent plugin invocations could
corrupt each other's binary state. The download/extract now happens in a
per-invocation staging dir (<version>.tmp.<UUID>) and is atomically published
into place via FileManager.moveItem. If the move fails because another
invocation already published the directory, the loser falls back to reading the
existing executable. The non-concurrent happy path is unchanged; forceDownload
swaps the existing dir aside atomically before publishing.
F-014 (DEVA11Y-483) — Concurrent spm.sh share CWD; cleanup trap deletes a
sibling's Package.swift: the synthetic manifest was written into the user's CWD
and the EXIT trap ran `rm -f Package.swift Package.resolved`, so the first
instance to exit deleted the manifest out from under a second concurrent
instance. The synthetic manifest is now written into a per-invocation
`mktemp -d` dir, passed to `swift package` via `--package-path`, and the cleanup
trap removes only that temp dir (never files in the user's CWD). Include globs
are rooted at the original working directory so the scan still targets the
user's sources. Applied identically to the bash, zsh, and fish variants. The
pre-existing user-supplied-Package.swift path is unchanged.
Scoped to the cleanup-trap / temp-dir CWD fix only; the self-update and
dependency-pinning changes (DEVA11Y-475/477/478) to the same spm.sh files are
handled in a separate PR.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent db817c3 commit 02413cc
4 files changed
Lines changed: 136 additions & 39 deletions
File tree
- Plugins/BrowserStackAccessibilityLint
- scripts
- bash
- fish
- zsh
Lines changed: 52 additions & 18 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
202 | 202 | | |
203 | 203 | | |
204 | 204 | | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
209 | 218 | | |
210 | 219 | | |
211 | 220 | | |
212 | 221 | | |
213 | | - | |
| 222 | + | |
214 | 223 | | |
215 | 224 | | |
216 | | - | |
| 225 | + | |
217 | 226 | | |
218 | 227 | | |
219 | | - | |
| 228 | + | |
220 | 229 | | |
221 | 230 | | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
230 | 259 | | |
231 | | - | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
232 | 267 | | |
233 | 268 | | |
234 | | - | |
235 | | - | |
| 269 | + | |
236 | 270 | | |
237 | 271 | | |
238 | 272 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
43 | 53 | | |
44 | | - | |
45 | | - | |
| 54 | + | |
| 55 | + | |
46 | 56 | | |
47 | | - | |
48 | 57 | | |
49 | 58 | | |
50 | 59 | | |
| |||
53 | 62 | | |
54 | 63 | | |
55 | 64 | | |
56 | | - | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
57 | 68 | | |
58 | 69 | | |
59 | 70 | | |
| |||
69 | 80 | | |
70 | 81 | | |
71 | 82 | | |
72 | | - | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
73 | 93 | | |
| 94 | + | |
74 | 95 | | |
75 | 96 | | |
76 | 97 | | |
77 | 98 | | |
78 | 99 | | |
79 | | - | |
| 100 | + | |
80 | 101 | | |
81 | 102 | | |
82 | 103 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
56 | 66 | | |
57 | | - | |
58 | | - | |
| 67 | + | |
| 68 | + | |
59 | 69 | | |
60 | | - | |
61 | 70 | | |
62 | 71 | | |
63 | 72 | | |
| |||
66 | 75 | | |
67 | 76 | | |
68 | 77 | | |
69 | | - | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
70 | 81 | | |
71 | 82 | | |
72 | 83 | | |
| |||
82 | 93 | | |
83 | 94 | | |
84 | 95 | | |
85 | | - | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
86 | 106 | | |
| 107 | + | |
87 | 108 | | |
88 | 109 | | |
89 | 110 | | |
90 | 111 | | |
91 | 112 | | |
92 | | - | |
| 113 | + | |
93 | 114 | | |
94 | 115 | | |
95 | 116 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
54 | | - | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
55 | 65 | | |
56 | | - | |
57 | | - | |
| 66 | + | |
| 67 | + | |
58 | 68 | | |
59 | | - | |
60 | 69 | | |
61 | 70 | | |
62 | 71 | | |
| |||
65 | 74 | | |
66 | 75 | | |
67 | 76 | | |
68 | | - | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
69 | 80 | | |
70 | 81 | | |
71 | 82 | | |
| |||
81 | 92 | | |
82 | 93 | | |
83 | 94 | | |
84 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
85 | 105 | | |
| 106 | + | |
86 | 107 | | |
87 | 108 | | |
88 | 109 | | |
89 | 110 | | |
90 | 111 | | |
91 | | - | |
| 112 | + | |
92 | 113 | | |
93 | 114 | | |
94 | 115 | | |
| |||
0 commit comments