From 78507bcf69acf6663a087e1efe8de8f3d65a9a90 Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 8 May 2024 13:36:11 -0400 Subject: [PATCH] fix!: add sharp timeout of 10 seconds (#65517) This PR [configures sharp](https://sharp.pixelplumbing.com/api-output#timeout) with a timeout of 10 seconds when optimizing an image. Anything longer will throw an error which we will catch and [fallback to serving the unoptimized source image](https://github.com/vercel/next.js/blob/c942006d83d504822ff2f6822fa2608e8e773324/packages/next/src/server/image-optimizer.ts#L637). Closes NEXT-3359 --- packages/next/src/server/image-optimizer.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/next/src/server/image-optimizer.ts b/packages/next/src/server/image-optimizer.ts index 7a12c06273..1a97536b9a 100644 --- a/packages/next/src/server/image-optimizer.ts +++ b/packages/next/src/server/image-optimizer.ts @@ -437,14 +437,10 @@ export async function optimizeImage({ height?: number nextConfigOutput?: 'standalone' | 'export' }): Promise { - let optimizedBuffer = buffer - const sharp = getSharp() - const transformer = sharp(buffer, { - sequentialRead: true, - }) - - transformer.rotate() + const transformer = sharp(buffer, { sequentialRead: true }) + .timeout({ seconds: 10 }) + .rotate() if (height) { transformer.resize(width, height) @@ -468,7 +464,7 @@ export async function optimizeImage({ transformer.jpeg({ quality, progressive: true }) } - optimizedBuffer = await transformer.toBuffer() + const optimizedBuffer = await transformer.toBuffer() return optimizedBuffer }