diff options
Diffstat (limited to 'src/share/classes/sun/awt/image/ShortComponentRaster.java')
-rw-r--r-- | src/share/classes/sun/awt/image/ShortComponentRaster.java | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/share/classes/sun/awt/image/ShortComponentRaster.java b/src/share/classes/sun/awt/image/ShortComponentRaster.java index e6a5bc014..cdbc93c7e 100644 --- a/src/share/classes/sun/awt/image/ShortComponentRaster.java +++ b/src/share/classes/sun/awt/image/ShortComponentRaster.java @@ -819,15 +819,31 @@ public class ShortComponentRaster extends SunWritableRaster { } } + if ((long)minX - sampleModelTranslateX < 0 || + (long)minY - sampleModelTranslateY < 0) { + + throw new RasterFormatException("Incorrect origin/translate: (" + + minX + ", " + minY + ") / (" + + sampleModelTranslateX + ", " + sampleModelTranslateY + ")"); + } + // we can be sure that width and height are greater than 0 if (scanlineStride < 0 || - scanlineStride > (Integer.MAX_VALUE / height) || - scanlineStride > data.length) + scanlineStride > (Integer.MAX_VALUE / height)) { // integer overflow throw new RasterFormatException("Incorrect scanline stride: " + scanlineStride); } + + if (height > 1 || minY - sampleModelTranslateY > 0) { + // buffer should contain at least one scanline + if (scanlineStride > data.length) { + throw new RasterFormatException("Incorrect scanline stride: " + + scanlineStride); + } + } + int lastScanOffset = (height - 1) * scanlineStride; if (pixelStride < 0 || |