Skip to content

Minor Race Condition (TOCTOU) during concurrent theme imports #217

Description

@ZhuchkaTriplesix

В методе 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.

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions