diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs
index b8a270b3f..bfa91416a 100644
--- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs
+++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs
@@ -142,8 +142,7 @@ namespace SixLabors.ImageSharp.Formats.Gif
this.ReadApplicationExtension();
break;
case GifConstants.PlainTextLabel:
- int plainLength = stream.ReadByte();
- this.Skip(plainLength); // Not supported by any known decoder.
+ this.SkipBlock(); // Not supported by any known decoder.
break;
}
}
@@ -190,9 +189,7 @@ namespace SixLabors.ImageSharp.Formats.Gif
switch (stream.ReadByte())
{
case GifConstants.GraphicControlLabel:
-
- // Skip graphic control extension block
- this.Skip(0);
+ this.SkipBlock(); // Skip graphic control extension block
break;
case GifConstants.CommentLabel:
this.ReadComments();
@@ -201,8 +198,7 @@ namespace SixLabors.ImageSharp.Formats.Gif
this.ReadApplicationExtension();
break;
case GifConstants.PlainTextLabel:
- int plainLength = stream.ReadByte();
- this.Skip(plainLength); // Not supported by any known decoder.
+ this.SkipBlock(); // Not supported by any known decoder.
break;
}
}
@@ -288,24 +284,27 @@ namespace SixLabors.ImageSharp.Formats.Gif
// Could be XMP or something else not supported yet.
// Back up and skip.
this.stream.Position -= appLength + 1;
- this.Skip(appLength);
+ this.SkipBlock(appLength);
return;
}
- this.Skip(appLength); // Not supported by any known decoder.
+ this.SkipBlock(appLength); // Not supported by any known decoder.
}
///
- /// Skips the designated number of bytes in the stream.
+ /// Skips over a block or reads its terminator.
+ /// The length of the block to skip.
///
- /// The number of bytes to skip.
- private void Skip(int length)
+ private void SkipBlock(int blockSize = 0)
{
- this.stream.Skip(length);
+ if (blockSize > 0)
+ {
+ this.stream.Skip(blockSize);
+ }
int flag;
- while ((flag = this.stream.ReadByte()) != 0)
+ while ((flag = this.stream.ReadByte()) > 0)
{
this.stream.Skip(flag);
}
@@ -370,7 +369,7 @@ namespace SixLabors.ImageSharp.Formats.Gif
this.ReadFrameColors(ref image, ref previousFrame, indices.GetSpan(), colorTable, this.imageDescriptor);
// Skip any remaining blocks
- this.Skip(0);
+ this.SkipBlock();
}
finally
{