From a54fe9f77c0e632163c89729d17239df1f3c3883 Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Fri, 21 Dec 2018 19:54:33 +0000 Subject: [PATCH] Prevent mutatation of jpeg options #1516 --- docs/changelog.md | 5 +++++ lib/output.js | 30 +++++++++++++++--------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 275cb8dd..a1491ebd 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,11 @@ Requires libvips v8.7.0. +#### v0.21.2 - TBD + +* Prevent mutatation of options passed to `jpeg`. + [#1516](https://github.com/lovell/sharp/issues/1516) + #### v0.21.1 - 7th December 2018 * Install: support `sharp_dist_base_url` npm config, like existing `SHARP_DIST_BASE_URL`. diff --git a/lib/output.js b/lib/output.js index 58849854..a3aad553 100644 --- a/lib/output.js +++ b/lib/output.js @@ -175,30 +175,30 @@ function jpeg (options) { throw new Error('Invalid chromaSubsampling (4:2:0, 4:4:4) ' + options.chromaSubsampling); } } - options.trellisQuantisation = is.bool(options.trellisQuantization) ? options.trellisQuantization : options.trellisQuantisation; - if (is.defined(options.trellisQuantisation)) { - this._setBooleanOption('jpegTrellisQuantisation', options.trellisQuantisation); + const trellisQuantisation = is.bool(options.trellisQuantization) ? options.trellisQuantization : options.trellisQuantisation; + if (is.defined(trellisQuantisation)) { + this._setBooleanOption('jpegTrellisQuantisation', trellisQuantisation); } if (is.defined(options.overshootDeringing)) { this._setBooleanOption('jpegOvershootDeringing', options.overshootDeringing); } - options.optimiseScans = is.bool(options.optimizeScans) ? options.optimizeScans : options.optimiseScans; - if (is.defined(options.optimiseScans)) { - this._setBooleanOption('jpegOptimiseScans', options.optimiseScans); - if (options.optimiseScans) { + const optimiseScans = is.bool(options.optimizeScans) ? options.optimizeScans : options.optimiseScans; + if (is.defined(optimiseScans)) { + this._setBooleanOption('jpegOptimiseScans', optimiseScans); + if (optimiseScans) { this.options.jpegProgressive = true; } } - options.optimiseCoding = is.bool(options.optimizeCoding) ? options.optimizeCoding : options.optimiseCoding; - if (is.defined(options.optimiseCoding)) { - this._setBooleanOption('jpegOptimiseCoding', options.optimiseCoding); + const optimiseCoding = is.bool(options.optimizeCoding) ? options.optimizeCoding : options.optimiseCoding; + if (is.defined(optimiseCoding)) { + this._setBooleanOption('jpegOptimiseCoding', optimiseCoding); } - options.quantisationTable = is.number(options.quantizationTable) ? options.quantizationTable : options.quantisationTable; - if (is.defined(options.quantisationTable)) { - if (is.integer(options.quantisationTable) && is.inRange(options.quantisationTable, 0, 8)) { - this.options.jpegQuantisationTable = options.quantisationTable; + const quantisationTable = is.number(options.quantizationTable) ? options.quantizationTable : options.quantisationTable; + if (is.defined(quantisationTable)) { + if (is.integer(quantisationTable) && is.inRange(quantisationTable, 0, 8)) { + this.options.jpegQuantisationTable = quantisationTable; } else { - throw new Error('Invalid quantisation table (integer, 0-8) ' + options.quantisationTable); + throw new Error('Invalid quantisation table (integer, 0-8) ' + quantisationTable); } } }