From d64e99dc892d1563800847671c252979c848fe37 Mon Sep 17 00:00:00 2001 From: Ravi Arnan Date: Sat, 24 Oct 2026 15:19:55 +0800 Subject: [PATCH] test: fix zipinfo non-ascii check in test-zlib-zip-interop Keep UNICODE_SUPPORT guard so macOS skips checking non-ASCII names in zipinfo output, and accept '?' / U+FFFD placeholders on builds with UNICODE_SUPPORT that filter non-ASCII bytes in fnfilter() without wide-character printing support (such as NixOS or Gentoo). Fixes: https://github.com/nodejs/node/issues/66975 Signed-off-by: Ravi Arnan --- test/parallel/test-zlib-zip-interop.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-zlib-zip-interop.js b/test/parallel/test-zlib-zip-interop.js index 429f7b02973e..a1c54bed178a 100644 --- a/test/parallel/test-zlib-zip-interop.js +++ b/test/parallel/test-zlib-zip-interop.js @@ -81,9 +81,19 @@ test('an archive written by createZipArchive is readable by unzip, zipinfo, and const zipinfo = spawnSync('zipinfo', [archivePath], { env }); assert.strictEqual(zipinfo.status, 0); + const zipinfoOut = zipinfo.stdout.toString(); for (const name of Object.keys(files)) { - if (!zipinfoUnicode && /[^\x20-\x7e]/.test(name)) continue; - assert.ok(zipinfo.stdout.toString().includes(name), `zipinfo missing ${name}`); + if (zipinfoOut.includes(name)) continue; + // Info-ZIP's zipinfo replaces non-ASCII bytes with '?' unless built with + // wide-character support (e.g. natspec or alt-iconv-utf8-print); stock + // builds replace non-ASCII bytes with '?' regardless of UNICODE_SUPPORT, + // which can leave replacement characters (U+FFFD) once decoded. + if (/[^\x20-\x7e]/.test(name)) { + if (!zipinfoUnicode) continue; + const placeholder = name.replace(/[^\x20-\x7e]+/g, '?'); + if (zipinfoOut.replace(/[?\uFFFD]+/g, '?').includes(placeholder)) continue; + } + assert.fail(`zipinfo missing ${name}`); } const extractDir = path.join(dir, 'out');