current commit
260801.6 · zlib: add ZipEntry, ZipFile, and ZipBuffer
'use strict';

// The module-global default ceiling on in-memory member decompression, and
// its public getter/setter. Kept in its own module so every read path sees
// the one mutable value.

const { validateInteger } = require('internal/validators');

// A default ceiling on the uncompressed size that the buffering read paths
// (`ZipEntry.prototype.content()`, and therefore `ZipBuffer`/`ZipFile`
// `get()`) will materialize in memory when the caller does not pass an
// explicit `maxSize`. An archive whose central directory declares a member
// larger than this is rejected before any large allocation happens. Callers
// that need larger members can either pass a per-call `maxSize` or raise the
// module default with `setMaxZipContentSize()`. The streaming read paths
// (`contentIterator()`, `ZipFile.prototype.stream()`) are bounded-memory by
// design and are not subject to this default.
const DEFAULT_MAX_ZIP_CONTENT_SIZE = 256 * 1024 * 1024; // 256 MiB
let maxZipContentSize = DEFAULT_MAX_ZIP_CONTENT_SIZE;

/**
 * @returns {number}
 */
function getMaxZipContentSize() {
  return maxZipContentSize;
}

/**
 * @param {number} size
 * @returns {void}
 */
function setMaxZipContentSize(size) {
  validateInteger(size, 'size', 0);
  maxZipContentSize = size;
}

module.exports = {
  DEFAULT_MAX_ZIP_CONTENT_SIZE,
  getMaxZipContentSize,
  setMaxZipContentSize,
};