summaryrefslogtreecommitdiff
path: root/lib/internal/streams/state.js
diff options
context:
space:
mode:
authorTobias Nießen <tniessen@tnie.de>2018-01-09 20:39:29 +0100
committerTobias Nießen <tniessen@tnie.de>2018-01-29 17:09:13 +0100
commit46e0a55b8492d15acf8cf4fcbcd3c8671e2e30f8 (patch)
tree994a868903f448abbfd4de91e15a01bcb561c387 /lib/internal/streams/state.js
parente0864e50ecf917cbfa98d443e6f122425d6447cf (diff)
downloadandroid-node-v8-46e0a55b8492d15acf8cf4fcbcd3c8671e2e30f8.tar.gz
android-node-v8-46e0a55b8492d15acf8cf4fcbcd3c8671e2e30f8.tar.bz2
android-node-v8-46e0a55b8492d15acf8cf4fcbcd3c8671e2e30f8.zip
stream: add type and range check for highWaterMark
The (h|readableH|writableH)ighWaterMark options should only permit positive numbers and zero. PR-URL: https://github.com/nodejs/node/pull/18098 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'lib/internal/streams/state.js')
-rw-r--r--lib/internal/streams/state.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/internal/streams/state.js b/lib/internal/streams/state.js
new file mode 100644
index 0000000000..cca79c93de
--- /dev/null
+++ b/lib/internal/streams/state.js
@@ -0,0 +1,26 @@
+'use strict';
+
+const errors = require('internal/errors');
+
+function getHighWaterMark(state, options, duplexKey, isDuplex) {
+ let hwm = options.highWaterMark;
+ if (hwm != null) {
+ if (typeof hwm !== 'number' || !(hwm >= 0))
+ throw new errors.TypeError('ERR_INVALID_OPT_VALUE', 'highWaterMark', hwm);
+ return Math.floor(hwm);
+ } else if (isDuplex) {
+ hwm = options[duplexKey];
+ if (hwm != null) {
+ if (typeof hwm !== 'number' || !(hwm >= 0))
+ throw new errors.TypeError('ERR_INVALID_OPT_VALUE', duplexKey, hwm);
+ return Math.floor(hwm);
+ }
+ }
+
+ // Default value
+ return state.objectMode ? 16 : 16 * 1024;
+}
+
+module.exports = {
+ getHighWaterMark
+};