stream: only end reading on null, not undefined
authorJonathan Reem <jonathan.reem@gmail.com>
Sat, 28 Jun 2014 18:46:42 +0000 (11:46 -0700)
committerFedor Indutny <fedor@indutny.com>
Mon, 30 Jun 2014 08:45:54 +0000 (12:45 +0400)
The [Stream documentation for .push](http://nodejs.org/api/stream.html#stream_readable_push_chunk_encoding)
explicitly states multiple times that null is a special cased value
that indicates the end of a stream. It is confusing and undocumented
that undefined *also* ends the stream, even though in object mode
there is a distinct and important difference.

The docs for Object-Mode also explicitly mention null as the *only*
special cased value, making no mention of undefined.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
lib/_stream_readable.js
test/simple/test-stream2-readable-non-empty-end.js

index 317b40b..56361e6 100644 (file)
@@ -139,7 +139,7 @@ function readableAddChunk(stream, state, chunk, encoding, addToFront) {
   var er = chunkInvalid(state, chunk);
   if (er) {
     stream.emit('error', er);
-  } else if (util.isNullOrUndefined(chunk)) {
+  } else if (chunk === null) {
     state.reading = false;
     if (!state.ended)
       onEofChunk(stream, state);
index 7314ae7..65b7afd 100644 (file)
@@ -35,7 +35,7 @@ var n = 0;
 test._read = function(size) {
   var chunk = chunks[n++];
   setTimeout(function() {
-    test.push(chunk);
+    test.push(chunk === undefined ? null : chunk);
   });
 };