From 8ac8e50a58364ddbfc77cde2a1bc468f091c7720 Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Thu, 13 Apr 2017 01:25:38 +0100 Subject: [PATCH] crypto: make LazyTransform compabile with Streams1 Makes LazyTransform writable by Streams1 by assigning .writable = true before the actual classes are loaded. Fixes: https://github.com/nodejs/node/issues/12269 PR-URL: https://github.com/nodejs/node/pull/12380 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Anna Henningsen --- lib/internal/streams/lazy_transform.js | 2 ++ .../test-crypto-lazy-transform-writable.js | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 test/parallel/test-crypto-lazy-transform-writable.js diff --git a/lib/internal/streams/lazy_transform.js b/lib/internal/streams/lazy_transform.js index bd68bef4b6dd17..9f2ec8b99c2344 100644 --- a/lib/internal/streams/lazy_transform.js +++ b/lib/internal/streams/lazy_transform.js @@ -10,6 +10,8 @@ module.exports = LazyTransform; function LazyTransform(options) { this._options = options; + this.writable = true; + this.readable = true; } util.inherits(LazyTransform, stream.Transform); diff --git a/test/parallel/test-crypto-lazy-transform-writable.js b/test/parallel/test-crypto-lazy-transform-writable.js new file mode 100644 index 00000000000000..2c4fbaf39a6738 --- /dev/null +++ b/test/parallel/test-crypto-lazy-transform-writable.js @@ -0,0 +1,34 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const crypto = require('crypto'); +const Stream = require('stream'); +const util = require('util'); + +const hasher1 = crypto.createHash('sha256'); +const hasher2 = crypto.createHash('sha256'); + +// Calculate the expected result. +hasher1.write(Buffer.from('hello world')); +hasher1.end(); + +const expected = hasher1.read().toString('hex'); + +function OldStream() { + Stream.call(this); + + this.readable = true; +} +util.inherits(OldStream, Stream); + +const stream = new OldStream(); + +stream.pipe(hasher2).on('finish', common.mustCall(function() { + const hash = hasher2.read().toString('hex'); + assert.strictEqual(expected, hash); +})); + +stream.emit('data', Buffer.from('hello')); +stream.emit('data', Buffer.from(' world')); +stream.emit('end');