Browse Source

Remove a few more bounds checks.

pull/1054/head
James Jackson-South 6 years ago
parent
commit
89cc2e9fcd
  1. 14
      src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs

14
src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs

@ -4,17 +4,13 @@
using System; using System;
using System.Buffers; using System.Buffers;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using SixLabors.Memory; using SixLabors.Memory;
namespace SixLabors.ImageSharp.Formats.Png.Zlib namespace SixLabors.ImageSharp.Formats.Png.Zlib
{ {
/// <summary> /// <summary>
/// This is the DeflaterHuffman class. /// Performs Deflate Huffman encoding.
///
/// This class is <i>not</i> thread safe. This is inherent in the API, due
/// to the split of Deflate and SetInput.
///
/// author of the original java version : Jochen Hoenicke
/// </summary> /// </summary>
public sealed unsafe class DeflaterHuffman : IDisposable public sealed unsafe class DeflaterHuffman : IDisposable
{ {
@ -264,14 +260,16 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib
+ this.extraBits; + this.extraBits;
int static_len = this.extraBits; int static_len = this.extraBits;
ref byte staticLLengthRef = ref MemoryMarshal.GetReference<byte>(StaticLLength);
for (int i = 0; i < LiteralNumber; i++) for (int i = 0; i < LiteralNumber; i++)
{ {
static_len += this.literalTree.Freqs[i] * StaticLLength[i]; static_len += this.literalTree.Freqs[i] * Unsafe.Add(ref staticLLengthRef, i);
} }
ref byte staticDLengthRef = ref MemoryMarshal.GetReference<byte>(StaticDLength);
for (int i = 0; i < DistanceNumber; i++) for (int i = 0; i < DistanceNumber; i++)
{ {
static_len += this.distTree.Freqs[i] * StaticDLength[i]; static_len += this.distTree.Freqs[i] * Unsafe.Add(ref staticDLengthRef, i);
} }
if (opt_len >= static_len) if (opt_len >= static_len)

Loading…
Cancel
Save