aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/sun/awt/image/IntegerComponentRaster.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/classes/sun/awt/image/IntegerComponentRaster.java')
-rw-r--r--src/share/classes/sun/awt/image/IntegerComponentRaster.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/share/classes/sun/awt/image/IntegerComponentRaster.java b/src/share/classes/sun/awt/image/IntegerComponentRaster.java
index f36b1087f..b3456e00a 100644
--- a/src/share/classes/sun/awt/image/IntegerComponentRaster.java
+++ b/src/share/classes/sun/awt/image/IntegerComponentRaster.java
@@ -654,15 +654,31 @@ public class IntegerComponentRaster extends SunWritableRaster {
") must be >= 0");
}
+ 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 ||