You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Minor Race Condition (TOCTOU) during concurrent theme imports #217
В методе ThemeRegistryService.importThemeFile есть классический баг Time-Of-Check to Time-Of-Use при проверке существования директории:
var finalExtDir =Directory(p.join(extensionsDir.path, preferredBaseName));
while (await finalExtDir.exists()) {
// ... увеличение счетчика ...
}
await finalExtDir.create(recursive:true);
Если произойдут два мгновенных параллельных вызова импорта одной и той же темы, обе корутины могут одновременно проверить await finalExtDir.exists(), получить false, и обе попытаются создать директорию и записать туда свои theme.json.
Краша не происходит из-за recursive: true, но возможна молчаливая перезапись. Требуется добавить блокировку (мьютекс) или обрабатывать FileExistsException при recursive: false.
Activity