src: expose BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH

Signed-off-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: https://github.com/nodejs-private/node-private/pull/1002
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
CVE-ID: CVE-2026-111497
This commit is contained in:
Antoine du Hamel committed 2026-10-21 13:00:47 +02:00
1 parent 8c5debbea4
commit 7ba22c2812
2 files changed
+28

No files matched your search

+1
View File
@@ -2302,6 +2302,7 @@ void DefineZlibConstants(Local<Object> target) {
NODE_DEFINE_CONSTANT(target, BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
NODE_DEFINE_CONSTANT(target, BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
NODE_DEFINE_CONSTANT(target, BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
NODE_DEFINE_CONSTANT(target, BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH);
NODE_DEFINE_CONSTANT(target, BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
NODE_DEFINE_CONSTANT(target, BROTLI_DECODER_ERROR_INVALID_ARGUMENTS);
NODE_DEFINE_CONSTANT(target, BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
+27
View File
@@ -89,6 +89,33 @@ Object.defineProperty(spoofedLength, 'byteLength', { get: () => 5000 });
deflate.close();
}
{
// A block switch is invalid when the stream declares only one block type.
const invalidBlockSwitch = Buffer.from(
'200010414141fcffff07002228f00b60f7f41f000000',
'hex',
);
const expectedError = {
code: 'ERR__ERROR_FORMAT_BLOCK_SWITCH',
errno: zlib.constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH,
};
assert.strictEqual(expectedError.errno, -17);
assert.throws(
() => zlib.brotliDecompressSync(invalidBlockSwitch),
expectedError,
);
const brotli = zlib.createBrotliDecompress();
brotli.resume();
brotli.on('error', common.expectsError(expectedError));
brotli.on('end', common.mustNotCall());
for (let i = 0; i < invalidBlockSwitch.length; i++) {
brotli.write(invalidBlockSwitch.subarray(i, i + 1));
}
brotli.end();
}
unzips.forEach(common.mustCall((uz, i) => {
uz.on('error', common.mustCall());
uz.on('end', common.mustNotCall());