From 40c93486e8b08f7f37dfd8be95ff03990ab858bd Mon Sep 17 00:00:00 2001 From: Nicolas LaCasse Date: Fri, 20 Jan 2012 15:36:28 +0100 Subject: Fix #2365 zlib crashing on invalid input Fix zlib crashes on error due to improper use of removeListener in the error handler --- lib/zlib.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'lib/zlib.js') diff --git a/lib/zlib.js b/lib/zlib.js index 840927b77..155924f4e 100644 --- a/lib/zlib.js +++ b/lib/zlib.js @@ -122,18 +122,18 @@ function zlibBuffer(engine, buffer, callback) { var buffers = []; var nread = 0; - engine.on('error', function(err) { - engine.removeListener('end'); - engine.removeListener('error'); + function onError(err) { + engine.removeListener('end', onEnd); + engine.removeListener('error', onError); callback(err); - }); + } - engine.on('data', function(chunk) { + function onData(chunk) { buffers.push(chunk); nread += chunk.length; - }); + } - engine.on('end', function() { + function onEnd() { var buffer; switch(buffers.length) { case 0: @@ -153,7 +153,11 @@ function zlibBuffer(engine, buffer, callback) { break; } callback(null, buffer); - }); + } + + engine.on('error', onError); + engine.on('data', onData); + engine.on('end', onEnd); engine.write(buffer); engine.end(); -- cgit v1.2.1