| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 'use strict';var assert = require('assert').ok;var zlib = require('zlib');var util = require('util');var kMaxLength = require('buffer').kMaxLength;function Inflate(opts) {  if (!(this instanceof Inflate)) {    return new Inflate(opts);  }  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {    opts.chunkSize = zlib.Z_MIN_CHUNK;  }  zlib.Inflate.call(this, opts);  // Node 8 --> 9 compatibility check  this._offset = this._offset === undefined ? this._outOffset : this._offset;  this._buffer = this._buffer || this._outBuffer;  if (opts && opts.maxLength != null) {    this._maxLength = opts.maxLength;  }}function createInflate(opts) {  return new Inflate(opts);}function _close(engine, callback) {  if (callback) {    process.nextTick(callback);  }  // Caller may invoke .close after a zlib error (which will null _handle).  if (!engine._handle) {    return;  }  engine._handle.close();  engine._handle = null;}Inflate.prototype._processChunk = function(chunk, flushFlag, asyncCb) {  if (typeof asyncCb === 'function') {    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);  }  var self = this;  var availInBefore = chunk && chunk.length;  var availOutBefore = this._chunkSize - this._offset;  var leftToInflate = this._maxLength;  var inOff = 0;  var buffers = [];  var nread = 0;  var error;  this.on('error', function(err) {    error = err;  });  function handleChunk(availInAfter, availOutAfter) {    if (self._hadError) {      return;    }    var have = availOutBefore - availOutAfter;    assert(have >= 0, 'have should not go down');    if (have > 0) {      var out = self._buffer.slice(self._offset, self._offset + have);      self._offset += have;      if (out.length > leftToInflate) {        out = out.slice(0, leftToInflate);      }      buffers.push(out);      nread += out.length;      leftToInflate -= out.length;      if (leftToInflate === 0) {        return false;      }    }    if (availOutAfter === 0 || self._offset >= self._chunkSize) {      availOutBefore = self._chunkSize;      self._offset = 0;      self._buffer = Buffer.allocUnsafe(self._chunkSize);    }    if (availOutAfter === 0) {      inOff += (availInBefore - availInAfter);      availInBefore = availInAfter;      return true;    }    return false;  }  assert(this._handle, 'zlib binding closed');  do {    var res = this._handle.writeSync(flushFlag,      chunk, // in      inOff, // in_off      availInBefore, // in_len      this._buffer, // out      this._offset, //out_off      availOutBefore); // out_len    // Node 8 --> 9 compatibility check    res = res || this._writeState;  } while (!this._hadError && handleChunk(res[0], res[1]));  if (this._hadError) {    throw error;  }  if (nread >= kMaxLength) {    _close(this);    throw new RangeError('Cannot create final Buffer. It would be larger than 0x' + kMaxLength.toString(16) + ' bytes');  }  var buf = Buffer.concat(buffers, nread);  _close(this);  return buf;};util.inherits(Inflate, zlib.Inflate);function zlibBufferSync(engine, buffer) {  if (typeof buffer === 'string') {    buffer = Buffer.from(buffer);  }  if (!(buffer instanceof Buffer)) {    throw new TypeError('Not a string or buffer');  }  var flushFlag = engine._finishFlushFlag;  if (flushFlag == null) {    flushFlag = zlib.Z_FINISH;  }  return engine._processChunk(buffer, flushFlag);}function inflateSync(buffer, opts) {  return zlibBufferSync(new Inflate(opts), buffer);}module.exports = exports = inflateSync;exports.Inflate = Inflate;exports.createInflate = createInflate;exports.inflateSync = inflateSync;
 |