Skip to content

Commit 5840138

Browse files
committed
stream: fix undefined in Readable object mode
Fixes `this.push(undefined)`. Fixes: #13753 PR-URL: #13760 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent 57b7285 commit 5840138

2 files changed

Lines changed: 46 additions & 2 deletions

File tree

‎lib/_stream_readable.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
215215
stream.emit('error',er);
216216
}elseif(state.objectMode||chunk&&chunk.length>0){
217217
if(typeofchunk!=='string'&&
218-
Object.getPrototypeOf(chunk)!==Buffer.prototype&&
219-
!state.objectMode){
218+
!state.objectMode&&
219+
Object.getPrototypeOf(chunk)!==Buffer.prototype){
220220
chunk=Stream._uint8ArrayToBuffer(chunk);
221221
}
222222

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'use strict';
2+
constcommon=require('../common');
3+
constassert=require('assert');
4+
const{ Readable, Writable, Transform }=require('stream');
5+
6+
{
7+
conststream=newReadable({
8+
objectMode: true,
9+
read: common.mustCall(()=>{
10+
stream.push(undefined);
11+
stream.push(null);
12+
})
13+
});
14+
15+
stream.on('data',common.mustCall((chunk)=>{
16+
assert.strictEqual(chunk,undefined);
17+
}));
18+
}
19+
20+
{
21+
conststream=newWritable({
22+
objectMode: true,
23+
write: common.mustCall((chunk)=>{
24+
assert.strictEqual(chunk,undefined);
25+
})
26+
});
27+
28+
stream.write(undefined);
29+
}
30+
31+
{
32+
conststream=newTransform({
33+
objectMode: true,
34+
transform: common.mustCall((chunk)=>{
35+
stream.push(chunk);
36+
})
37+
});
38+
39+
stream.on('data',common.mustCall((chunk)=>{
40+
assert.strictEqual(chunk,undefined);
41+
}));
42+
43+
stream.write(undefined);
44+
}

0 commit comments

Comments
 (0)