From 670a468d8924c38e1a7ec59c2882dded572a09f5 Mon Sep 17 00:00:00 2001 From: Matt Godbolt Date: Mon, 2 Jan 2023 16:55:17 -0600 Subject: [PATCH] Handle zero-sized files (#4530) * Handle zero-sized files It appears that having a zero-sized file won't call our `next()` handler which means we wedge forever and eventually time out. This is a workaround. Upstream issue filed as https://github.com/mafintosh/tar-stream/issues/145 --- lib/buildenvsetup/ceconan.ts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/buildenvsetup/ceconan.ts b/lib/buildenvsetup/ceconan.ts index 2f9fbdfcd5b..c8e74a4d385 100644 --- a/lib/buildenvsetup/ceconan.ts +++ b/lib/buildenvsetup/ceconan.ts @@ -128,6 +128,7 @@ export class BuildEnvSetupCeConanDirect extends BuildEnvSetupBase { const resolved = path.resolve(path.dirname(filepath)); if (!resolved.startsWith(downloadPath)) { logger.error(`Library ${libId}/${version} is using a zip-slip, skipping file`); + stream.resume(); next(); return; } @@ -136,13 +137,20 @@ export class BuildEnvSetupCeConanDirect extends BuildEnvSetupBase { } const filestream = fs.createWriteStream(filepath); - stream.pipe(filestream); - stream.on('error', error => { - logger.error(`Error in stream handling: ${error}`); - reject(error); - }); - stream.on('end', next); - stream.resume(); + if (header.size === 0) { + // See https://github.com/mafintosh/tar-stream/issues/145 + stream.resume(); + next(); + } else { + stream + .on('error', error => { + logger.error(`Error in stream handling: ${error}`); + reject(error); + }) + .on('end', next) + .pipe(filestream); + stream.resume(); + } } catch (error) { logger.error(`Error in entry handling: ${error}`); reject(error); @@ -254,10 +262,10 @@ export class BuildEnvSetupCeConanDirect extends BuildEnvSetupBase { }), ); } else { - logger.info(`No build found for ${libVer} matching ${JSON.stringify(buildProperties)}`); + logger.warn(`No build found for ${libVer} matching ${JSON.stringify(buildProperties)}`); } } else { - logger.info(`Library ${libVer} not available`); + logger.warn(`Library ${libVer} not available`); } }