diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-03-12 17:23:31 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-12 17:23:31 +0530 |
commit | 4a88695563ced73e18a97be06f9f0864be683eff (patch) | |
tree | 65837c501c755cf9f5339ce9d9e437a5a0d01724 /ext/node | |
parent | ad6b00a2bf061a90c72737d0ecc4a58bb0a89550 (diff) |
fix(ext/node): flush brotli decompression stream (#22856)
Fixes https://github.com/denoland/deno/issues/22259
The decompressed input size was not restored because of improper
flushing of the CBrotliDecompressStream state.
Diffstat (limited to 'ext/node')
-rw-r--r-- | ext/node/ops/zlib/brotli.rs | 6 | ||||
-rw-r--r-- | ext/node/polyfills/_brotli.js | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/ext/node/ops/zlib/brotli.rs b/ext/node/ops/zlib/brotli.rs index f906e8827..dc3a40441 100644 --- a/ext/node/ops/zlib/brotli.rs +++ b/ext/node/ops/zlib/brotli.rs @@ -314,13 +314,15 @@ pub fn op_brotli_decompress_stream_end( unsafe { let mut available_out = output.len(); let mut next_out = output.as_mut_ptr(); + let mut available_in = 0; + let mut next_in = []; let mut total_out = 0; if matches!( CBrotliDecoderDecompressStream( ctx.inst, - &mut 0, - std::ptr::null_mut(), + &mut available_in, + next_in.as_mut_ptr(), &mut available_out, &mut next_out, &mut total_out, diff --git a/ext/node/polyfills/_brotli.js b/ext/node/polyfills/_brotli.js index b019836cf..8b1f53012 100644 --- a/ext/node/polyfills/_brotli.js +++ b/ext/node/polyfills/_brotli.js @@ -12,6 +12,7 @@ import { op_brotli_decompress, op_brotli_decompress_async, op_brotli_decompress_stream, + op_brotli_decompress_stream_end, op_create_brotli_compress, op_create_brotli_decompress, } from "ext:core/ops"; @@ -57,6 +58,11 @@ export class BrotliDecompress extends Transform { callback(); }, flush(callback) { + const output = new Uint8Array(1024); + let avail; + while ((avail = op_brotli_decompress_stream_end(context, output)) > 0) { + this.push(output.slice(0, avail)); + } core.close(context); callback(); }, |