diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs
index 20c5d4a9b7..c06f3f2a04 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanScanDecoder.cs
@@ -728,10 +728,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
/// Code lengths.
/// Code values.
[MethodImpl(InliningOptions.ShortMethod)]
- public void BuildHuffmanTable(int type, int index, ReadOnlySpan codeLengths, ReadOnlySpan values)
+ public void BuildHuffmanTable(int type, int index, ReadOnlySpan codeLengths, ReadOnlySpan values, Span workspace)
{
HuffmanTable[] tables = type == 0 ? this.dcHuffmanTables : this.acHuffmanTables;
- tables[index] = new HuffmanTable(codeLengths, values);
+ tables[index] = new HuffmanTable(codeLengths, values, workspace);
}
}
}
diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs
index c69949de48..7e69c4d94f 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/HuffmanTable.cs
@@ -51,13 +51,14 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
///
/// Initializes a new instance of the struct.
///
- /// The code lengths
- /// The huffman values
- public HuffmanTable(ReadOnlySpan codeLengths, ReadOnlySpan values)
+ /// The code lengths.
+ /// The huffman values.
+ /// The spare workspace memory, must be provided by the caller.
+ public HuffmanTable(ReadOnlySpan codeLengths, ReadOnlySpan values, Span workspace)
{
Unsafe.CopyBlockUnaligned(ref this.Values[0], ref MemoryMarshal.GetReference(values), (uint)values.Length);
- Span huffCode = stackalloc uint[257];
+ Span huffCode = workspace;
// Generate codes
uint code = 0;
diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
index 08d1aa1468..adb0ad4b08 100644
--- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
+++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
@@ -1150,7 +1150,8 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
tableType,
tableIndex,
codeLengthsSpan,
- huffmanValuesSpan);
+ huffmanValuesSpan,
+ stackalloc uint[257]);
}
}
}