aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/sun/awt/image/BytePackedRaster.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/classes/sun/awt/image/BytePackedRaster.java')
-rw-r--r--src/share/classes/sun/awt/image/BytePackedRaster.java19
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