From 007c52a3f2efb4f52c55c0415aa48fbfd51b3bfd Mon Sep 17 00:00:00 2001 From: Dmitry Pentin Date: Sat, 19 Jun 2021 05:02:06 +0300 Subject: [PATCH] Fixed possible out of range exception, added docs --- .../Jpeg/Components/Encoder/HuffmanScanEncoder.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs index 8457ddbf3..43d7b07b9 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/HuffmanScanEncoder.cs @@ -458,13 +458,17 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder #endif } + /// + /// Returns index of the last non-zero element in given mcu block, returns -1 if all elements are zero + /// + /// Input mcu. + /// Index of the last non-zero element. [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static int GetLastNonZeroElement(ref Block8x8F block) + internal static int GetLastNonZeroElement(ref Block8x8F block) { int index = 63; - ref float elemRef = ref Unsafe.As(ref block); - while ((int)Unsafe.Add(ref elemRef, index) == 0) + while (index > -1 && (int)Unsafe.Add(ref elemRef, index) == 0) { index--; }