diff options
Diffstat (limited to 'ext/node/polyfills/_zlib.mjs')
-rw-r--r-- | ext/node/polyfills/_zlib.mjs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/ext/node/polyfills/_zlib.mjs b/ext/node/polyfills/_zlib.mjs index a66ab6d04..15a0a51e3 100644 --- a/ext/node/polyfills/_zlib.mjs +++ b/ext/node/polyfills/_zlib.mjs @@ -155,10 +155,27 @@ export const inflateRawSync = function (buffer, opts) { return zlibBufferSync(new InflateRaw(opts), buffer); }; +function sanitizeInput(input) { + if (typeof input === "string") input = Buffer.from(input); + + if ( + !Buffer.isBuffer(input) && + (input.buffer && !input.buffer.constructor === ArrayBuffer) + ) throw new TypeError("Not a string, buffer or dataview"); + + if (input.buffer) { + input = new Uint8Array(input.buffer, input.byteOffset, input.byteLength); + } + + return input; +} + function zlibBuffer(engine, buffer, callback) { var buffers = []; var nread = 0; + buffer = sanitizeInput(buffer); + engine.on("error", onError); engine.on("end", onEnd); @@ -197,9 +214,7 @@ function zlibBuffer(engine, buffer, callback) { } function zlibBufferSync(engine, buffer) { - if (typeof buffer === "string") buffer = Buffer.from(buffer); - - if (!Buffer.isBuffer(buffer)) throw new TypeError("Not a string or buffer"); + buffer = sanitizeInput(buffer); var flushFlag = engine._finishFlushFlag; |