From 6aec085942a9f60bca584238c972786fb3a4fafd Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 23 Sep 2023 18:08:36 -0400 Subject: [PATCH] fix: Error handling on streams missing error handler on read streams. Related https://github.com/outline/outline/discussions/5855 --- server/storage/files/LocalStorage.ts | 17 ++++++++++------- server/utils/ZipHelper.ts | 17 ++++++++++++----- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/server/storage/files/LocalStorage.ts b/server/storage/files/LocalStorage.ts index e0297ad6f..93a5e8ac9 100644 --- a/server/storage/files/LocalStorage.ts +++ b/server/storage/files/LocalStorage.ts @@ -70,15 +70,18 @@ export default class LocalStorage extends BaseStorage { const destPath = path.join(env.FILE_STORAGE_LOCAL_ROOT_DIR, key); closeSync(openSync(destPath, "w")); - const dest = createWriteStream(destPath); - src.pipe(dest); return new Promise((resolve, reject) => { - src.once("end", () => resolve(this.getUrlForKey(key))); - src.once("err", (err) => { - dest.end(); - reject(err); - }); + const dest = createWriteStream(destPath) + .on("error", reject) + .on("finish", () => resolve(this.getUrlForKey(key))); + + src + .on("error", (err) => { + dest.end(); + reject(err); + }) + .pipe(dest); }); }; diff --git a/server/utils/ZipHelper.ts b/server/utils/ZipHelper.ts index e6fa8944c..fbe5efe21 100644 --- a/server/utils/ZipHelper.ts +++ b/server/utils/ZipHelper.ts @@ -115,6 +115,14 @@ export default class ZipHelper { currentFile: null, }; + const dest = fs + .createWriteStream(path) + .on("finish", () => { + Logger.debug("utils", "Writing zip complete", { path }); + return resolve(path); + }) + .on("error", reject); + zip .generateNodeStream( { @@ -141,12 +149,11 @@ export default class ZipHelper { } } ) - .pipe(fs.createWriteStream(path)) - .on("finish", () => { - Logger.debug("utils", "Writing zip complete", { path }); - return resolve(path); + .on("error", (err) => { + dest.end(); + reject(err); }) - .on("error", reject); + .pipe(dest); } ); });