jdk/src/share/classes/sun/awt/image/ShortComponentRaster.java

Print this page
rev 5697 : 8001972: Improve image processing
Reviewed-by: prr, ahgross

*** 196,206 **** throw new RasterFormatException("ShortComponentRasters must have"+ "ComponentSampleModel or SinglePixelPackedSampleModel"); } this.bandOffset = this.dataOffsets[0]; ! verify(false); } /** * Returns a copy of the data offsets array. For each band the data offset * is the index into the band's data array, of the first sample of the --- 196,206 ---- throw new RasterFormatException("ShortComponentRasters must have"+ "ComponentSampleModel or SinglePixelPackedSampleModel"); } this.bandOffset = this.dataOffsets[0]; ! verify(); } /** * Returns a copy of the data offsets array. For each band the data offset * is the index into the band's data array, of the first sample of the
*** 789,830 **** public WritableRaster createCompatibleWritableRaster() { return createCompatibleWritableRaster(width,height); } /** ! * Verify that the layout parameters are consistent with ! * the data. If strictCheck ! * is false, this method will check for ArrayIndexOutOfBounds conditions. If ! * strictCheck is true, this method will check for additional error ! * conditions such as line wraparound (width of a line greater than ! * the scanline stride). ! * @return String Error string, if the layout is incompatible with ! * the data. Otherwise returns null. ! */ ! private void verify (boolean strictCheck) { ! // Make sure data for Raster is in a legal range ! for (int i=0; i < dataOffsets.length; i++) { if (dataOffsets[i] < 0) { ! throw new RasterFormatException("Data offsets for band "+i+ ! "("+dataOffsets[i]+ ! ") must be >= 0"); } } int maxSize = 0; int size; ! for (int i=0; i < numDataElements; i++) { ! size = (height-1)*scanlineStride + (width-1)*pixelStride + ! dataOffsets[i]; if (size > maxSize) { maxSize = size; } } if (data.length < maxSize) { ! throw new RasterFormatException("Data array too small (should be "+ ! maxSize+" )"); } } public String toString() { return new String ("ShortComponentRaster: width = "+width --- 789,859 ---- public WritableRaster createCompatibleWritableRaster() { return createCompatibleWritableRaster(width,height); } /** ! * Verify that the layout parameters are consistent with the data. ! * ! * The method verifies whether scanline stride and pixel stride do not ! * cause an integer overflow during calculation of a position of the pixel ! * in data buffer. It also verifies whether the data buffer has enough data ! * to correspond the raster layout attributes. ! * ! * @throws RasterFormatException if an integer overflow is detected, ! * or if data buffer has not enough capacity. ! */ ! protected final void verify() { ! for (int i = 0; i < dataOffsets.length; i++) { if (dataOffsets[i] < 0) { ! throw new RasterFormatException("Data offsets for band " + i ! + "(" + dataOffsets[i] ! + ") must be >= 0"); } } int maxSize = 0; int size; ! // we can be sure that width and height are greater than 0 ! if (scanlineStride < 0 || ! scanlineStride > (Integer.MAX_VALUE / height)) ! { ! // integer overflow ! throw new RasterFormatException("Incorrect scanline stride: " ! + scanlineStride); ! } ! int lastScanOffset = (height - 1) * scanlineStride; ! ! if (pixelStride < 0 || ! pixelStride > (Integer.MAX_VALUE / width)) ! { ! // integer overflow ! throw new RasterFormatException("Incorrect pixel stride: " ! + pixelStride); ! } ! int lastPixelOffset = (width - 1) * pixelStride; ! ! if (lastPixelOffset > (Integer.MAX_VALUE - lastScanOffset)) { ! // integer overflow ! throw new RasterFormatException("Incorrect raster attributes"); ! } ! lastPixelOffset += lastScanOffset; ! ! for (int i = 0; i < numDataElements; i++) { ! size = lastPixelOffset + dataOffsets[i]; ! if (dataOffsets[i] > (Integer.MAX_VALUE - lastPixelOffset)) { ! throw new RasterFormatException("Incorrect band offset: " ! + dataOffsets[i]); ! } ! if (size > maxSize) { maxSize = size; } } if (data.length < maxSize) { ! throw new RasterFormatException("Data array too small (should be " ! + maxSize + " )"); } } public String toString() { return new String ("ShortComponentRaster: width = "+width