Add check for generated bitmap size

master
Nathan Crawford 2016-04-07 14:36:19 -04:00
rodzic 9c44d3ecf6
commit 2d59addb2d
1 zmienionych plików z 10 dodań i 0 usunięć

Wyświetl plik

@ -596,7 +596,17 @@ namespace PesFile
int imageWidth = (int)((GetWidth() + (threadThickness * 2)) * scale);
int imageHeight = (int)((GetHeight() + (threadThickness * 2)) * scale);
float tempThreadThickness = threadThickness * scale;
// This assumes the image format will use 4 bytes per pixel
UInt64 imageRequiredRam = (UInt64)(imageHeight * imageWidth * 4);
// Check for a bitmap that might be too large.
// Apparently, there is a 2GB (minus a little overhead) limit for objects on the GC heap in
// .Net, even when using a 64 bit framework. More detail at:
// https://blogs.msdn.microsoft.com/joshwil/2005/08/10/bigarrayt-getting-around-the-2gb-array-size-limit/
if(imageRequiredRam > (Int32.MaxValue - 1024))
{
throw new ArgumentOutOfRangeException("Generated image would be too large (" + imageWidth + "x" + imageHeight + ", " + imageRequiredRam + " bytes)");
}
Bitmap DrawArea = new Bitmap(imageWidth, imageHeight);
// Return now if for any reason there aren't any blocks
if(blocks.Count == 0)