--- a/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java Tue Apr 23 11:13:38 2013 +0100
+++ b/jdk/src/share/classes/sun/awt/image/ByteBandedRaster.java Wed Apr 24 21:15:54 2013 +0400
@@ -755,6 +755,13 @@
+ scanlineStride);
}
+ for (int i = 0; i < data.length; i++) {
+ if (scanlineStride > data[i].length) {
+ throw new RasterFormatException("Incorrect scanline stride: "
+ + scanlineStride);
+ }
+ }
+
// Make sure data for Raster is in a legal range
for (int i=0; i < dataOffsets.length; i++) {
if (dataOffsets[i] < 0) {
@@ -765,19 +772,20 @@
}
int lastScanOffset = (height - 1) * scanlineStride;
- int lastPixelOffset = lastScanOffset + (width-1);
- if (lastPixelOffset < lastScanOffset) {
+
+ if ((width - 1) > (Integer.MAX_VALUE - lastScanOffset)) {
throw new RasterFormatException("Invalid raster dimension");
}
+ int lastPixelOffset = lastScanOffset + (width-1);
int maxIndex = 0;
int index;
for (int i=0; i < numDataElements; i++) {
- index = lastPixelOffset + dataOffsets[i];
- if (index < lastPixelOffset) {
+ if (dataOffsets[i] > (Integer.MAX_VALUE - lastPixelOffset)) {
throw new RasterFormatException("Invalid raster dimension");
}
+ index = lastPixelOffset + dataOffsets[i];
if (index > maxIndex) {
maxIndex = index;
}