From 20a3c5d09c41e2e612885a6ac166144f14179f07 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 14 Jan 2013 16:03:38 -0800 Subject: [PATCH] streams2: Do not allow hwm < lwm There was previously an assert() in there, but this part of the code is so high-volume that the added cost made a measurable dent in http_simple. Just checking inline is fine, though, and prevents a lot of potential hazards. --- lib/_stream_readable.js | 3 +++ lib/_stream_writable.js | 3 +++ test/simple/test-stream2-basic.js | 15 +++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js index 7ad3974..a0caa3b 100644 --- a/lib/_stream_readable.js +++ b/lib/_stream_readable.js @@ -48,6 +48,9 @@ function ReadableState(options, stream) { this.lowWaterMark = ~~this.lowWaterMark; this.highWaterMark = ~~this.highWaterMark; + if (this.lowWaterMark > this.highWaterMark) + throw new Error('lowWaterMark cannot be higher than highWaterMark'); + this.buffer = []; this.length = 0; this.pipes = null; diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 1a907da..2d63c4d 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -49,6 +49,9 @@ function WritableState(options, stream) { this.lowWaterMark = ~~this.lowWaterMark; this.highWaterMark = ~~this.highWaterMark; + if (this.lowWaterMark > this.highWaterMark) + throw new Error('lowWaterMark cannot be higher than highWaterMark'); + this.needDrain = false; // at the start of calling end() this.ending = false; diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js index 0b4f4cf..dff3340 100644 --- a/test/simple/test-stream2-basic.js +++ b/test/simple/test-stream2-basic.js @@ -318,3 +318,18 @@ test('multipipe', function(t) { r.pipe(w[2]); }); }); + +assert.throws(function() { + var bad = new R({ + highWaterMark: 10, + lowWaterMark: 1000 + }); +}); + +assert.throws(function() { + var W = require('stream').Writable; + var bad = new W({ + highWaterMark: 10, + lowWaterMark: 1000 + }); +}); -- 2.7.4