stream: fix undefined
in Readable object mode
Fixes `this.push(undefined)`. Fixes: https://github.com/nodejs/node/issues/13753 PR-URL: https://github.com/nodejs/node/pull/13760 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
d1027695b8
commit
9a655e98a4
@ -215,8 +215,8 @@ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
|
|||||||
stream.emit('error', er);
|
stream.emit('error', er);
|
||||||
} else if (state.objectMode || chunk && chunk.length > 0) {
|
} else if (state.objectMode || chunk && chunk.length > 0) {
|
||||||
if (typeof chunk !== 'string' &&
|
if (typeof chunk !== 'string' &&
|
||||||
Object.getPrototypeOf(chunk) !== Buffer.prototype &&
|
!state.objectMode &&
|
||||||
!state.objectMode) {
|
Object.getPrototypeOf(chunk) !== Buffer.prototype) {
|
||||||
chunk = Stream._uint8ArrayToBuffer(chunk);
|
chunk = Stream._uint8ArrayToBuffer(chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
44
test/parallel/test-stream-objectmode-undefined.js
Normal file
44
test/parallel/test-stream-objectmode-undefined.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common');
|
||||||
|
const assert = require('assert');
|
||||||
|
const { Readable, Writable, Transform } = require('stream');
|
||||||
|
|
||||||
|
{
|
||||||
|
const stream = new Readable({
|
||||||
|
objectMode: true,
|
||||||
|
read: common.mustCall(() => {
|
||||||
|
stream.push(undefined);
|
||||||
|
stream.push(null);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.on('data', common.mustCall((chunk) => {
|
||||||
|
assert.strictEqual(chunk, undefined);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const stream = new Writable({
|
||||||
|
objectMode: true,
|
||||||
|
write: common.mustCall((chunk) => {
|
||||||
|
assert.strictEqual(chunk, undefined);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.write(undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const stream = new Transform({
|
||||||
|
objectMode: true,
|
||||||
|
transform: common.mustCall((chunk) => {
|
||||||
|
stream.push(chunk);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
stream.on('data', common.mustCall((chunk) => {
|
||||||
|
assert.strictEqual(chunk, undefined);
|
||||||
|
}));
|
||||||
|
|
||||||
|
stream.write(undefined);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user