aboutsummaryrefslogtreecommitdiff
path: root/modules/core/virtual-fs.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/virtual-fs.js')
-rw-r--r--modules/core/virtual-fs.js21
1 files changed, 16 insertions, 5 deletions
diff --git a/modules/core/virtual-fs.js b/modules/core/virtual-fs.js
index a505699..68d02bf 100644
--- a/modules/core/virtual-fs.js
+++ b/modules/core/virtual-fs.js
@@ -8,6 +8,12 @@ class VirtualFileSystem {
try {
const saved = localStorage.getItem('webx11_filesystem');
if (saved) {
+ // Safety: refuse to load if data is excessively large (>512KB raw)
+ if (saved.length > 524288) {
+ console.warn('FS data too large (' + (saved.length/1024).toFixed(0) + 'KB), skipping load');
+ localStorage.removeItem('webx11_filesystem');
+ return;
+ }
const data = JSON.parse(saved);
this.root = data.root || this.root;
this.currentPath = data.currentPath || [];
@@ -15,11 +21,16 @@ class VirtualFileSystem {
} catch (e) { console.error('FS load error:', e); }
}
saveToStorage() {
- try {
- localStorage.setItem('webx11_filesystem', JSON.stringify({
- root: this.root, currentPath: this.currentPath
- }));
- } catch (e) { console.error('FS save error:', e); }
+ if (this._storageSavePending) return;
+ this._storageSavePending = true;
+ setTimeout(() => {
+ this._storageSavePending = false;
+ try {
+ localStorage.setItem('webx11_filesystem', JSON.stringify({
+ root: this.root, currentPath: this.currentPath
+ }));
+ } catch (e) { console.error('FS save error:', e); }
+ }, 2000);
}
getCurrentDir() {
let dir = this.root;