fix(audit L5): unter der Sperre Divis Laufzeit-Caches verwerfen (Options-Cache-Gruppe, GlobalData-/GlobalPreset-Static, et_theme_options) vor raw() und design_rev

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-10-20 00:26:40 +02:00
co-authored by Claude Sonnet 5.5
parent 6e84138979
commit 99c7aab238
28 changed files with 182 additions and 13 deletions
@@ -81,6 +81,19 @@ class DesignSystemWriter implements DiviAdapter
);
}
/**
* Audit L5: GlobalPreset::get_data() keeps a static copy that can be older than another writer's finished save
* (the option cache is dropped by DesignLock). Called under the lock, before reading.
*/
public function refresh(): void
{
try {
(new \ReflectionProperty(GlobalPreset::class, '_data'))->setValue(null, null);
} catch (\ReflectionException) {
// Divi without that property: its reads are not cached this way.
}
}
/** @return array<array-key, mixed> The stored inventory (GlobalPreset::get_data(), formats §3). */
public function presets(): array
{