From 513c50315b50d928adb7faab8c1c79c7b125b3ab Mon Sep 17 00:00:00 2001 From: Philip Loibl Date: Sat, 29 Nov 2025 06:04:46 +0100 Subject: [PATCH 1/2] fix file write truncation bug --- src/fileSystem/internalFs.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/fileSystem/internalFs.js b/src/fileSystem/internalFs.js index 870da7c41..a28eb0a21 100644 --- a/src/fileSystem/internalFs.js +++ b/src/fileSystem/internalFs.js @@ -48,10 +48,16 @@ const internalFs = { name, { create, exclusive }, (fileEntry) => { - fileEntry.createWriter((file) => { - file.onwriteend = (res) => resolve(filename); - file.onerror = (err) => reject(err.target.error); - file.write(data); + fileEntry.createWriter((writer) => { + writer.onerror = (err) => reject(err.target.error); + // Truncate file to 0 to clear any old content + // This prevents trailing garbage when new data is smaller than old data + writer.truncate(0); + writer.onwriteend = () => { + // After truncate completes, write new data + writer.onwriteend = (res) => resolve(filename); + writer.write(data); + }; }); }, reject, From f22eb850f667b62e83d2c0f28aec39e5531fc8c8 Mon Sep 17 00:00:00 2001 From: Philip Loibl Date: Sun, 4 Jan 2026 07:01:43 +0100 Subject: [PATCH 2/2] fix second write after failed truncate by RohitKushvaha01 --- src/fileSystem/internalFs.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/fileSystem/internalFs.js b/src/fileSystem/internalFs.js index a28eb0a21..30bef3ff0 100644 --- a/src/fileSystem/internalFs.js +++ b/src/fileSystem/internalFs.js @@ -49,15 +49,12 @@ const internalFs = { { create, exclusive }, (fileEntry) => { fileEntry.createWriter((writer) => { - writer.onerror = (err) => reject(err.target.error); - // Truncate file to 0 to clear any old content - // This prevents trailing garbage when new data is smaller than old data - writer.truncate(0); - writer.onwriteend = () => { - // After truncate completes, write new data - writer.onwriteend = (res) => resolve(filename); + writer.onerror = (e) => reject(e.target.error); + writer.onwrite = () => { + writer.onwrite = () => resolve(filename); writer.write(data); }; + writer.truncate(0); }); }, reject,