diff options
Diffstat (limited to 'src/share/classes/sun/awt/image/BytePackedRaster.java')
-rw-r--r-- | src/share/classes/sun/awt/image/BytePackedRaster.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/share/classes/sun/awt/image/BytePackedRaster.java b/src/share/classes/sun/awt/image/BytePackedRaster.java index 68e72116f..3e60f193a 100644 --- a/src/share/classes/sun/awt/image/BytePackedRaster.java +++ b/src/share/classes/sun/awt/image/BytePackedRaster.java @@ -1386,13 +1386,28 @@ public class BytePackedRaster extends SunWritableRaster { throw new RasterFormatException("Invalid raster dimension"); } + if ((long)minX - sampleModelTranslateX < 0 || + (long)minY - sampleModelTranslateY < 0) { + + throw new RasterFormatException("Incorrect origin/translate: (" + + minX + ", " + minY + ") / (" + + sampleModelTranslateX + ", " + sampleModelTranslateY + ")"); + } + if (scanlineStride < 0 || - scanlineStride > (Integer.MAX_VALUE / height) || - scanlineStride > data.length) + scanlineStride > (Integer.MAX_VALUE / height)) { throw new RasterFormatException("Invalid scanline stride"); } + if (height > 1 || minY - sampleModelTranslateY > 0) { + // buffer should contain at least one scanline + if (scanlineStride > data.length) { + throw new RasterFormatException("Incorrect scanline stride: " + + scanlineStride); + } + } + long lastbit = (long) dataBitOffset + (long) (height - 1) * (long) scanlineStride * 8 + (long) (width - 1) * (long) pixelBitStride |