From 9ed3b4f11e967a86e5b7582b7be95391fe07da08 Mon Sep 17 00:00:00 2001 From: Joachim Viide Date: Tue, 12 Feb 2019 00:12:04 +0200 Subject: [PATCH] Fix buffer size/offset calculations in rotate/processor.ts --- src/codecs/rotate/processor.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/codecs/rotate/processor.ts b/src/codecs/rotate/processor.ts index 0f795e51..30bac75c 100644 --- a/src/codecs/rotate/processor.ts +++ b/src/codecs/rotate/processor.ts @@ -11,7 +11,7 @@ export async function rotate( // Number of wasm memory pages (รก 64KiB) needed to store the image twice. const bytesPerImage = data.width * data.height * 4; - const numPagesNeeded = Math.ceil(bytesPerImage * 2 / (64 * 1024) + 4); + const numPagesNeeded = Math.ceil((bytesPerImage * 2 + 4) / (64 * 1024)); // Only count full pages, just to be safe. const numPagesAvailable = Math.floor(instance.exports.memory.buffer.byteLength / (64 * 1024)); const additionalPagesToAllocate = numPagesNeeded - numPagesAvailable; @@ -20,13 +20,13 @@ export async function rotate( instance.exports.memory.grow(additionalPagesToAllocate); } const view = new Uint8ClampedArray(instance.exports.memory.buffer); - view.set(data.data); + view.set(data.data, 4); instance.exports.rotate(data.width, data.height, opts.rotate); const flipDimensions = opts.rotate % 180 !== 0; return new ImageData( - view.slice(bytesPerImage, bytesPerImage * 2), + view.slice(bytesPerImage + 4, bytesPerImage * 2 + 4), flipDimensions ? data.height : data.width, flipDimensions ? data.width : data.height, );