// Flags: --experimental-stream-iter 'use strict'; const common = require('../common'); const assert = require('assert'); const { from, pull, bytes, } = require('stream/iter'); const { decompressGzip, decompressDeflate, decompressBrotli, decompressZstd, } = require('zlib/iter'); // ============================================================================= // Decompression of corrupt data // ============================================================================= async function testCorruptGzipData() { const corrupt = new Uint8Array([0x1F, 0x8B, 0xFF, 0xFF, 0xFF]); await assert.rejects( async () => await bytes(pull(from(corrupt), decompressGzip())), { name: 'Error', code: 'Z_DATA_ERROR', }); } async function testCorruptDeflateData() { const corrupt = new Uint8Array([0x78, 0xFF, 0xFF, 0xFF]); await assert.rejects( async () => await bytes(pull(from(corrupt), decompressDeflate())), { name: 'Error', code: 'Z_DATA_ERROR', }); } async function testCorruptBrotliData() { const corrupt = new Uint8Array([0xFF, 0xFF, 0xFF, 0xFF]); await assert.rejects( async () => await bytes(pull(from(corrupt), decompressBrotli())), { name: 'Error', code: 'ERR__ERROR_FORMAT_PADDING_2', }); } async function testCorruptZstdData() { // Completely invalid data (not even valid magic bytes) const corrupt = new Uint8Array([0xFF, 0xFF, 0xFF, 0xFF, 0xFF]); await assert.rejects( async () => await bytes(pull(from(corrupt), decompressZstd())), { name: 'Error', code: 'ZSTD_error_prefix_unknown', }); } // ============================================================================= // Run all tests // ============================================================================= (async () => { await testCorruptGzipData(); await testCorruptDeflateData(); await testCorruptBrotliData(); await testCorruptZstdData(); })().then(common.mustCall());