Commit fcfc372
fix(installer): validate app archive before deleting installed app on update
Installer::updateApp() removed the currently-installed app directory
(`rmdirr($basedir)`) before copying the new version from the extracted
archive, and — unlike installApp() — never checked that the archive
actually contained a directory named after the app id. An invalid
tarball (top-level directory not matching the app id) therefore deleted
the installed app and then tried to copy from a non-existent source,
leaving the app broken and surfacing a misleading error instead of a
clear message (issue #34669).
Mirror installApp()'s guard in updateApp(): compute the expected app
directory inside the extract dir and, BEFORE the destructive removal of
the installed app, verify it exists. If not, clean up the extract dir
and throw the same translated "Archive does not contain a directory
named %s" error installApp() uses. The installed app is now left intact
on invalid input, and the success path for valid archives is unchanged.
Adds a regression test (with an invalid-archive fixture) asserting the
clear error is thrown and the previously-installed app is not deleted.
Fixes #34669
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <1005065+DeepDiver1975@users.noreply.github.com>1 parent 4921c51 commit fcfc372
3 files changed
Lines changed: 66 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
214 | 214 | | |
215 | 215 | | |
216 | 216 | | |
| 217 | + | |
| 218 | + | |
217 | 219 | | |
218 | 220 | | |
219 | 221 | | |
| |||
230 | 232 | | |
231 | 233 | | |
232 | 234 | | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | 235 | | |
238 | 236 | | |
239 | 237 | | |
240 | 238 | | |
241 | 239 | | |
242 | 240 | | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
243 | 254 | | |
244 | 255 | | |
245 | 256 | | |
| |||
Binary file not shown.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
94 | 145 | | |
95 | 146 | | |
96 | 147 | | |
| |||
0 commit comments