You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/03/13 17:50:00 UTC

svn commit: r517767 - in /harmony/enhanced/classlib/trunk/modules/awt/src: main/java/common/java/awt/image/Raster.java main/java/common/org/apache/harmony/awt/internal/nls/messages.properties test/api/java/common/java/awt/image/RasterTest.java

Author: apetrenko
Date: Tue Mar 13 09:49:59 2007
New Revision: 517767

URL: http://svn.apache.org/viewvc?view=rev&rev=517767
Log:
Patch for HARMONY-2884 "[classlib][awt] Compatibility: java.awt.image.Raster.createPackedRaster() throws RasterFormatException on RI while it doesn't on Harmony"

Modified:
    harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/java/awt/image/Raster.java
    harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/internal/nls/messages.properties
    harmony/enhanced/classlib/trunk/modules/awt/src/test/api/java/common/java/awt/image/RasterTest.java

Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/java/awt/image/Raster.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/java/awt/image/Raster.java?view=diff&rev=517767&r1=517766&r2=517767
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/java/awt/image/Raster.java (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/java/awt/image/Raster.java Tue Mar 13 09:49:59 2007
@@ -601,6 +601,19 @@
             // awt.284=Overflow Y coordinate of Raster
             throw new RasterFormatException(Messages.getString("awt.284")); //$NON-NLS-1$
         }
+        
+        if (sampleModel instanceof ComponentSampleModel) {
+            validateDataBuffer(dataBuffer, aRegion.width, aRegion.height,
+                    ((ComponentSampleModel) sampleModel).getScanlineStride());
+        } else if (sampleModel instanceof MultiPixelPackedSampleModel) {
+            validateDataBuffer(dataBuffer, aRegion.width, aRegion.height,
+                    ((MultiPixelPackedSampleModel) sampleModel)
+                            .getScanlineStride());
+        } else if (sampleModel instanceof SinglePixelPackedSampleModel) {
+            validateDataBuffer(dataBuffer, aRegion.width, aRegion.height,
+                    ((SinglePixelPackedSampleModel) sampleModel)
+                            .getScanlineStride());
+        }
 
         this.sampleModel = sampleModel;
         this.dataBuffer = dataBuffer;
@@ -839,6 +852,13 @@
         return width;
     }
 
+    private static void validateDataBuffer(final DataBuffer dataBuffer, final int w,
+            final int h, final int scanlineStride) {
+        if (dataBuffer.getSize() < (scanlineStride * (h - 1) + w - 1)) {
+            // awt.298=dataBuffer is too small
+            throw new RasterFormatException(Messages.getString("awt.298")); //$NON-NLS-1$
+        }
+    }
 }
 
 

Modified: harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/internal/nls/messages.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/internal/nls/messages.properties?view=diff&rev=517767&r1=517766&r2=517767
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/internal/nls/messages.properties (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/main/java/common/org/apache/harmony/awt/internal/nls/messages.properties Tue Mar 13 09:49:59 2007
@@ -486,6 +486,7 @@
 awt.295=data is null
 awt.296=can't allocate memory on video card to create new display list
 awt.297=Invalid keyLocation
+awt.298=dataBuffer is too small
 
 awt.err.00=file dialog {0} error!
 awt.err.01=error: {0}

Modified: harmony/enhanced/classlib/trunk/modules/awt/src/test/api/java/common/java/awt/image/RasterTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/awt/src/test/api/java/common/java/awt/image/RasterTest.java?view=diff&rev=517767&r1=517766&r2=517767
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/awt/src/test/api/java/common/java/awt/image/RasterTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/awt/src/test/api/java/common/java/awt/image/RasterTest.java Tue Mar 13 09:49:59 2007
@@ -45,14 +45,32 @@
         }
     }
     
-    // Regression test for harmony-2717
-    public void test_createPackedRaster() throws RasterFormatException {
+    public void testCreatePackedRaster() throws RasterFormatException {
+        // Regression test for harmony-2717
         try {
             Raster.createPackedRaster(null, -32, Integer.MAX_VALUE, 35, new int[] {}, null);
-            fail("Exception expected");
+            fail("Exception expected"); //$NON-NLS-1$
         } catch (NullPointerException expectedException) {
             // Expected
         }
+        
+        // Regression for HARMONY-2884
+        try {
+            Raster.createPackedRaster(new DataBufferInt(1), 7, 9, 214,
+                    new int[] { 0, 0, 0 }, new Point(10292, 0));
+            fail("RasterFormatException expected!"); //$NON-NLS-1$
+        } catch (RasterFormatException e) {
+            // expected
+        }
+        
+        try {
+            Raster.createRaster(new SinglePixelPackedSampleModel(1, 10, 12, 0,
+                    new int[431]), new DataBufferUShort(new short[5], 3),
+                    new Point());
+            fail("RasterFormatException expected!"); //$NON-NLS-1$
+        } catch (RasterFormatException e) {
+            // expected
+        }
     }
     
     // Regression test for harmony-2885
@@ -90,7 +108,7 @@
         // Regression test for HARMONY-2875
         try {
             Raster.createRaster(new BandedSampleModel(1, 2, 3, 4),
-                    new DataBufferByte(new byte[191], 0),
+                    new DataBufferByte(new byte[191], 5),
                     new Point(new Point(28, 43))).getPixels(6,
                     Integer.MAX_VALUE, 1, 0, new int[] {});
             fail("ArrayIndexOutOfBoundsException should be thrown"); //$NON-NLS-1$