Skip to content

Commit c5b5375

Browse files
committed
fs: fix callback with error if SyncWriteStream writeSync failed
Catch SyncWriteStream write file error. Fixes: #47948
1 parent 0736d0b commit c5b5375

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

lib/internal/fs/sync_write_stream.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ ObjectSetPrototypeOf(SyncWriteStream.prototype, Writable.prototype);
2323
ObjectSetPrototypeOf(SyncWriteStream, Writable);
2424

2525
SyncWriteStream.prototype._write = function(chunk, encoding, cb) {
26-
writeSync(this.fd, chunk, 0, chunk.length);
27-
cb();
26+
try {
27+
writeSync(this.fd, chunk, 0, chunk.length);
28+
cb();
29+
} catch (e) {
30+
cb(e);
31+
}
2832
return true;
2933
};
3034

test/parallel/test-internal-fs-syncwritestream.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,15 @@ const filename = path.join(tmpdir.path, 'sync-write-stream.txt');
7474
assert.strictEqual(stream.fd, null);
7575
}));
7676
}
77+
78+
// Verify write file failed trigger error event
79+
{
80+
const fd = fs.openSync(filename, 'w');
81+
const stream = new SyncWriteStream(fd);
82+
83+
assert.strictEqual(stream.fd, fd);
84+
stream.on('error', common.mustCall());
85+
stream._write({}, common.mustCall((err) => {
86+
assert(err);
87+
}));
88+
}

0 commit comments

Comments
 (0)