Skip to content

Two Node.FileSystem bug fixes + test cases - #52

Merged
robinheghan merged 2 commits into
gren-lang:mainfrom
dkoontz:file-append-bug
Jul 31, 2026
Merged

Two Node.FileSystem bug fixes + test cases#52
robinheghan merged 2 commits into
gren-lang:mainfrom
dkoontz:file-append-bug

Conversation

@dkoontz

@dkoontz dkoontz commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes two bugs in the FileSystem.writeFileStream JS kernel (src/Gren/Kernel/FileSystem.js) and adds an integration test suite covering some of the FileSystem API.

Bug 1: Append mode crashes with ERR_OUT_OF_RANGE

writeFileStream encodes its mode as an integer pos: 0 = Replace, -1 = Append, n > 0 = ReplaceFrom n. The start option was computed in the kernel as:

start: pos === 0 ? undefined : pos

For Append (pos = -1) this passed start: -1 to fs.createWriteStream, which Node rejects with ERR_OUT_OF_RANGE, throwing synchronously and failing the Task before any bytes are written.

Fix (384a660): widen the guard to cover both non-offset modes:

start: pos <= 0 ? undefined : pos

Bug 2: writeFileStream using the mode ReplaceFrom leaves trailing bytes from the original file if the original file's length is greater than the written value.

ReplaceFrom n opens the file with flags: "r+" and start: n. createWriteStream writes at the offset but does not truncate, so when the new payload is shorter than the suffix it replaces, stale bytes remain:

  • file "abcdef", ReplaceFrom 3 + "XY" → produced "abcXYf" instead of "abcXY".

Fix (76b572): once the stream drains, truncate the file to the prefix length plus what was written:

if (pos > 0) {
fstream.on("finish", function () {
fs.truncate(filePath, pos + fstream.bytesWritten, (_) => {});
});
}

Tests

  • writeFile, appendToFile
  • writeFileStream in all three modes (Replace, ReplaceFrom, Append) — the latter two directly testing the bugs above
  • truncateFile (shrink and zero-pad cases)
  • copyFile, remove
  • readFile, readFileStream (Beginning, From, Between)

@robinheghan

Copy link
Copy Markdown
Member

Thank you!

@robinheghan robinheghan reopened this Jul 31, 2026
@robinheghan
robinheghan merged commit 4589714 into gren-lang:main Jul 31, 2026
4 checks passed
@dkoontz
dkoontz deleted the file-append-bug branch July 31, 2026 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants