From a9db51e1343b8fd4ebfe2c5013828ac59a91be71 Mon Sep 17 00:00:00 2001 From: Chris Dickinson Date: Tue, 6 Jan 2015 13:15:09 -0800 Subject: [PATCH] src: zlib: revert concatenated-stream changes Revert "src: fix windows build error" and "zlib: support concatenated gzip files". This reverts commits be413ac732f59ffe621f264239e5e22b77d32025 and 1183ba47dfc2bc8b39f0c10d8dc9e9299a4470bf. Conflicts: test/parallel/test-zlib-from-multiple-gzip-with-garbage.js test/parallel/test-zlib-from-multiple-gzip.js test/parallel/test-zlib-from-multiple-huge-gzip.js --- lib/zlib.js | 9 +- src/node_zlib.cc | 31 ++----- ...st-zlib-from-multiple-gzip-with-garbage.js | 83 ----------------- test/parallel/test-zlib-from-multiple-gzip.js | 74 --------------- .../test-zlib-from-multiple-huge-gzip.js | 93 ------------------- 5 files changed, 8 insertions(+), 282 deletions(-) delete mode 100644 test/parallel/test-zlib-from-multiple-gzip-with-garbage.js delete mode 100644 test/parallel/test-zlib-from-multiple-gzip.js delete mode 100644 test/parallel/test-zlib-from-multiple-huge-gzip.js diff --git a/lib/zlib.js b/lib/zlib.js index 724f9a37b6895e..7c0e47f614cb50 100644 --- a/lib/zlib.js +++ b/lib/zlib.js @@ -582,7 +582,7 @@ Zlib.prototype._processChunk = function(chunk, flushFlag, cb) { self._buffer = new Buffer(self._chunkSize); } - if (availOutAfter === 0 || availInAfter > 0) { + if (availOutAfter === 0) { // Not actually done. Need to reprocess. // Also, update the availInBefore to the availInAfter value, // so that if we have to hit it a third (fourth, etc.) time, @@ -590,13 +590,6 @@ Zlib.prototype._processChunk = function(chunk, flushFlag, cb) { inOff += (availInBefore - availInAfter); availInBefore = availInAfter; - if (availOutAfter !== 0) { - // There is still some data available for reading. - // This is usually a concatenated stream, so, reset and restart. - self.reset(); - self._offset = 0; - } - if (!async) return true; diff --git a/src/node_zlib.cc b/src/node_zlib.cc index 5b8024330b0163..cfa5b8cd6e47a8 100644 --- a/src/node_zlib.cc +++ b/src/node_zlib.cc @@ -63,11 +63,6 @@ enum node_zlib_mode { UNZIP }; -enum node_zlib_error { - kNoError, - kFailed, - kWritePending -}; void InitZlib(v8::Handle target); @@ -208,7 +203,7 @@ class ZCtx : public AsyncWrap { if (!async) { // sync version Process(work_req); - if (CheckError(ctx) == kNoError) + if (CheckError(ctx)) AfterSync(ctx, args); return; } @@ -292,7 +287,7 @@ class ZCtx : public AsyncWrap { } - static node_zlib_error CheckError(ZCtx* ctx) { + static bool CheckError(ZCtx* ctx) { // Acceptable error states depend on the type of zlib stream. switch (ctx->err_) { case Z_OK: @@ -305,18 +300,14 @@ class ZCtx : public AsyncWrap { ZCtx::Error(ctx, "Missing dictionary"); else ZCtx::Error(ctx, "Bad dictionary"); - return kFailed; + return false; default: // something else. - if (ctx->strm_.total_out == 0) { - ZCtx::Error(ctx, "Zlib error"); - return kFailed; - } else { - return kWritePending; - } + ZCtx::Error(ctx, "Zlib error"); + return false; } - return kNoError; + return true; } @@ -330,8 +321,7 @@ class ZCtx : public AsyncWrap { HandleScope handle_scope(env->isolate()); Context::Scope context_scope(env->context()); - node_zlib_error error = CheckError(ctx); - if (error == kFailed) + if (!CheckError(ctx)) return; Local avail_out = Integer::New(env->isolate(), @@ -345,11 +335,6 @@ class ZCtx : public AsyncWrap { Local args[2] = { avail_in, avail_out }; ctx->MakeCallback(env->callback_string(), ARRAY_SIZE(args), args); - if (error == kWritePending) { - ZCtx::Error(ctx, "Zlib error"); - return; - } - ctx->Unref(); if (ctx->pending_close_) ctx->Close(); @@ -554,12 +539,10 @@ class ZCtx : public AsyncWrap { switch (ctx->mode_) { case DEFLATE: case DEFLATERAW: - case GZIP: ctx->err_ = deflateReset(&ctx->strm_); break; case INFLATE: case INFLATERAW: - case GUNZIP: ctx->err_ = inflateReset(&ctx->strm_); break; default: diff --git a/test/parallel/test-zlib-from-multiple-gzip-with-garbage.js b/test/parallel/test-zlib-from-multiple-gzip-with-garbage.js deleted file mode 100644 index f6a0185e0119d6..00000000000000 --- a/test/parallel/test-zlib-from-multiple-gzip-with-garbage.js +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// test unzipping a file that was created by concatenating multiple gzip -// streams. - -var common = require('../common'); -var assert = require('assert'); -var zlib = require('zlib'); - -var util = require('util'); - -var gzipBuffer = new Buffer(128); -var gzipOffset = 0; - -var stream1 = '123\n'; -var stream2 = '456\n'; -var stream3 = '789\n'; - -function gzipAppend(data) { - data.copy(gzipBuffer, gzipOffset); - gzipOffset += data.length; -} - -function writeGzipStream(text, cb) { - var gzip = zlib.createGzip(); - gzip.on('data', gzipAppend); - gzip.write(text, function() { - gzip.flush(function() { - gzip.end(function() { - cb(); - }); - }); - }); -} - -function writeGarbageStream(text, cb) { - gzipAppend(new Buffer(text)); - cb(); -} - -writeGzipStream(stream1, function() { - writeGzipStream(stream2, function() { - writeGarbageStream(stream3, function() { - var gunzip = zlib.createGunzip(); - var gunzippedData = new Buffer(2 * 1024); - var gunzippedOffset = 0; - gunzip.on('data', function (data) { - data.copy(gunzippedData, gunzippedOffset); - gunzippedOffset += data.length; - }); - gunzip.on('error', function() { - assert.equal(gunzippedData.toString('utf8', 0, gunzippedOffset), - stream1 + stream2); - }); - gunzip.on('end', function() { - assert.fail('end event not expected'); - }); - - gunzip.write(gzipBuffer.slice(0, gzipOffset), 'binary', function() { - gunzip.end(); - }); - }); - }); -}); diff --git a/test/parallel/test-zlib-from-multiple-gzip.js b/test/parallel/test-zlib-from-multiple-gzip.js deleted file mode 100644 index 6f4127a4d304c5..00000000000000 --- a/test/parallel/test-zlib-from-multiple-gzip.js +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// test unzipping a file that was created by concatenating multiple gzip -// streams. - -var common = require('../common'); -var assert = require('assert'); -var zlib = require('zlib'); - -var util = require('util'); - -var gzipBuffer = new Buffer(128); -var gzipOffset = 0; - -var stream1 = '123\n'; -var stream2 = '456\n'; -var stream3 = '789\n'; - -function gzipAppend(data) { - data.copy(gzipBuffer, gzipOffset); - gzipOffset += data.length; -} - -function writeGzipStream(text, cb) { - var gzip = zlib.createGzip(); - gzip.on('data', gzipAppend); - gzip.write(text, function() { - gzip.flush(function() { - gzip.end(function() { - cb(); - }); - }); - }); -} - -writeGzipStream(stream1, function() { - writeGzipStream(stream2, function() { - writeGzipStream(stream3, function() { - var gunzip = zlib.createGunzip(); - var gunzippedData = new Buffer(2 * 1024); - var gunzippedOffset = 0; - gunzip.on('data', function (data) { - data.copy(gunzippedData, gunzippedOffset); - gunzippedOffset += data.length; - }); - gunzip.on('end', function() { - assert.equal(gunzippedData.toString('utf8', 0, gunzippedOffset), stream1 + stream2 + stream3); - }); - - gunzip.write(gzipBuffer.slice(0, gzipOffset), 'binary', function() { - gunzip.end(); - }); - }); - }); -}); diff --git a/test/parallel/test-zlib-from-multiple-huge-gzip.js b/test/parallel/test-zlib-from-multiple-huge-gzip.js deleted file mode 100644 index 5533aafeb72f9a..00000000000000 --- a/test/parallel/test-zlib-from-multiple-huge-gzip.js +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// test unzipping a file that was created by concatenating multiple gzip -// streams. - -var common = require('../common'); -var assert = require('assert'); -var zlib = require('zlib'); - -var util = require('util'); - -var HUGE = 64 * 1024; - -var originalBuffer = new Buffer(3 * HUGE); -var originalOffset = 0; - -var gzipBuffer = new Buffer(3 * HUGE); -var gzipOffset = 0; - -function getRandomLetter() { - return (Math.random() * (122 - 97)) + 97; -} - -function generateHugeStream() { - var buffer = new Buffer(HUGE); - for (var i = 0; i < HUGE; i++) - buffer.writeUInt8(getRandomLetter(), i); - - buffer.copy(originalBuffer, originalOffset); - originalOffset += HUGE; - - return buffer; -} - -function gzipAppend(data) { - data.copy(gzipBuffer, gzipOffset); - gzipOffset += data.length; -} - -function writeGzipStream(text, cb) { - var gzip = zlib.createGzip(); - gzip.on('data', gzipAppend); - gzip.write(text, function() { - gzip.flush(function() { - gzip.end(function() { - cb(); - }); - }); - }); -} - -writeGzipStream(generateHugeStream(), function() { - writeGzipStream(generateHugeStream(), function() { - writeGzipStream(generateHugeStream(), function() { - var gunzip = zlib.createGunzip(); - var gunzippedData = new Buffer(3 * HUGE); - var gunzippedOffset = 0; - gunzip.on('data', function (data) { - data.copy(gunzippedData, gunzippedOffset); - gunzippedOffset += data.length; - }); - gunzip.on('end', function() { - var gunzippedStr = gunzippedData.toString('utf8', 0, gunzippedOffset); - var originalStr = originalBuffer.toString('utf8', 0, 3 * HUGE); - - assert.equal(gunzippedStr, originalStr); - }); - - gunzip.write(gzipBuffer.slice(0, gzipOffset), 'binary', function() { - gunzip.end(); - }); - }); - }); -});