|
|
|
@ -375,11 +375,18 @@ namespace ImageSharp.Formats |
|
|
|
// read header size
|
|
|
|
this.currentStream.Read(data, 0, BmpInfoHeader.HeaderSizeSize); |
|
|
|
int headerSize = BitConverter.ToInt32(data, 0); |
|
|
|
if (headerSize < BmpInfoHeader.HeaderSizeSize || headerSize > BmpInfoHeader.MaxHeaderSize) |
|
|
|
if (headerSize < BmpInfoHeader.BitmapCoreHeaderSize) |
|
|
|
{ |
|
|
|
throw new NotSupportedException($"This kind of bitmap files (header size $headerSize) is not supported."); |
|
|
|
} |
|
|
|
|
|
|
|
int skipAmmount = 0; |
|
|
|
if (headerSize > BmpInfoHeader.MaxHeaderSize) |
|
|
|
{ |
|
|
|
skipAmmount = headerSize - BmpInfoHeader.MaxHeaderSize; |
|
|
|
headerSize = BmpInfoHeader.MaxHeaderSize; |
|
|
|
} |
|
|
|
|
|
|
|
// read the rest of the header
|
|
|
|
this.currentStream.Read(data, BmpInfoHeader.HeaderSizeSize, headerSize - BmpInfoHeader.HeaderSizeSize); |
|
|
|
|
|
|
|
@ -388,14 +395,23 @@ namespace ImageSharp.Formats |
|
|
|
case BmpInfoHeader.BitmapCoreHeaderSize: |
|
|
|
this.infoHeader = this.ParseBitmapCoreHeader(data); |
|
|
|
break; |
|
|
|
|
|
|
|
case BmpInfoHeader.BitmapInfoHeaderSize: |
|
|
|
this.infoHeader = this.ParseBitmapInfoHeader(data); |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
throw new NotSupportedException($"This kind of bitmap files (header size $headerSize) is not supported."); |
|
|
|
if (headerSize > BmpInfoHeader.BitmapInfoHeaderSize) |
|
|
|
{ |
|
|
|
this.infoHeader = this.ParseBitmapInfoHeader(data); |
|
|
|
break; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
throw new NotSupportedException($"This kind of bitmap files (header size $headerSize) is not supported."); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// skip the remaining header because we can't read those parts
|
|
|
|
this.currentStream.Skip(skipAmmount); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|