Browse Source

Refactored componentIndex validation

pull/1702/head
Dmitry Pentin 5 years ago
parent
commit
5596ce1830
  1. 16
      src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs

16
src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs

@ -984,28 +984,32 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
// Validate: 0 < count <= totalComponents // Validate: 0 < count <= totalComponents
if (selectorsCount == 0 || selectorsCount > this.Frame.ComponentCount) if (selectorsCount == 0 || selectorsCount > this.Frame.ComponentCount)
{ {
JpegThrowHelper.ThrowInvalidImageContentException($"Invalid number of components in scan: {selectorsCount}. Must be [1 <= count <= {this.Frame.ComponentCount}]"); // TODO: extract as separate method?
JpegThrowHelper.ThrowInvalidImageContentException($"Invalid number of components in scan: {selectorsCount}. Must be [1 <= count <= {this.Frame.ComponentCount}].");
} }
this.Frame.MultiScan = this.Frame.ComponentCount != selectorsCount; this.Frame.MultiScan = this.Frame.ComponentCount != selectorsCount;
for (int i = 0; i < selectorsCount; i++) for (int i = 0; i < selectorsCount; i++)
{ {
int componentIndex = -1; // 1 byte: Component id
int selector = stream.ReadByte(); int componentSelectorId = stream.ReadByte();
int componentIndex = -1;
for (int j = 0; j < this.Frame.ComponentIds.Length; j++) for (int j = 0; j < this.Frame.ComponentIds.Length; j++)
{ {
byte id = this.Frame.ComponentIds[j]; byte id = this.Frame.ComponentIds[j];
if (selector == id) if (componentSelectorId == id)
{ {
componentIndex = j; componentIndex = j;
break; break;
} }
} }
if (componentIndex < 0) // Validate: must be found among registered components
if (componentIndex == -1)
{ {
JpegThrowHelper.ThrowInvalidImageContentException($"Unknown component selector {componentIndex}."); // TODO: extract as separate method?
JpegThrowHelper.ThrowInvalidImageContentException($"Invalid component id in scan: {componentSelectorId}. Must be [0 <= id <= {this.Frame.ComponentCount - 1}]");
} }
this.Frame.ComponentOrder[i] = (byte)componentIndex; this.Frame.ComponentOrder[i] = (byte)componentIndex;

Loading…
Cancel
Save