JDK-4429950 : spec: ImageTypeSpecifier - unspecified exceptions in factory methods
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.imageio
  • Affected Version: 1.4.0
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2001-03-26
  • Updated: 2001-05-22
  • Resolved: 2001-05-22
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
1.4.0 beta2Fixed
Related Reports
Relates :  
Description

Name: bkR10012			Date: 03/26/2001



  The factory methods of the class javax.imageio.ImageTypeSpecifier
return a specifier that will use some ColorModel and some SampleModel.
These methods try to create corresponding ColorModel and SampleModel.
In some cases creation leads to throwing unspecified exceptions because
of improper parameters.

  From my point of view, all parameter restrictions should be specified,
and only IllegalArgumentException should be thrown when these 
restrictions are violated.

Here is the list of revealed unspecified exceptions.
------------------------------
createPacked(colorSpace, redMask, greenMask, blueMask, alphaMask, transferType, 
isAlphaPremultiplied)

- NullPointerException if colorSpace is null;
- IllegalArgumentException: ColorSpace must be TYPE_RGB.
if colorSpace = ColorSpace.getInstance(ColorSpace.CS_GRAY);
- IllegalArgumentException: There must be at least one component with > 0 pixel 
bits.
if redMask, greenMask, blueMask and alphaMask are zero;
- IllegalArgumentException: Unsupported dataType: -1
if transferType is -1;

------------------------------
createInterleaved(colorSpace, bandOffsets, dataType, hasAlpha, 
isAlphaPremultiplied)

- NullPointerException if colorSpace is null;
- NullPointerException if bandOffsets is null;
- IllegalArgumentException: Offsets between bands must be less than the scanline  
stride
if bandOffsets = {0,100,1000,99999};
- llegalArgumentException: Number of color/alpha components should be 4 but 
length of bits array is 0
if bandOffsets = {};

------------------------------
createBanded(colorSpace, bankIndices, bandOffsets, dataType, hasAlpha, 
isAlphaPremultiplied)

- NullPointerException if colorSpace is null;
- llegalArgumentException: Number of color/alpha components should be 4 but 
length of bits array is 0
if bandOffsets = {}; bankIndices = {};
- IllegalArgumentException: dataType = 9999
if  dataType is 99999; 

------------------------------
createGrayscale(bits, dataType, isSigned)
createGrayscale(bits, dataType, isSigned, isAlphaPremultiplied)

- IllegalArgumentException: Number of bits must be between 1 and 16. 
if bits = 100;
- java.awt.image.RasterFormatException: MultiPixelPackedSampleModel does not
allow pixels to span data element boundaries
if bits = 10; dataType = DataBuffer.TYPE_BYTE; 
- IllegalArgumentException: Unknown data type 100
if dataType = 100;

------------------------------
createIndexed(redLUT, greenLUT, blueLUT, alphaLUT, bits, dataType)

- IllegalArgumentException: Number of pixel bits must be > 0 
if bits = 0;
- IllegalArgumentException: Number of bits must be between 1 and 16.
if bits = 17;
- java.awt.image.RasterFormatException: MultiPixelPackedSampleModel does 
not allow pixels to span data element boundaries, if
    redLUT = {0}; 
    greenLUT = {0}; 
    blueLUT = {0}; 
    alphaLUT = {0}; 
    bits = 10;
    dataType = DataBuffer.TYPE_BYTE;
- ArrayIndexOutOfBoundsException if
    byte[] redLUT = {1};
    byte[] greenLUT = {};
    byte[] blueLUT = {1,2,3};
- IllegalArgumentException: Map size (0) must be >= 1, if
    byte[] redLUT = {};
    byte[] greenLUT = {1};
    byte[] blueLUT = {1,2,3};
- ArrayIndexOutOfBoundsException if
    byte[] redLUT = {1};
    byte[] greenLUT = {1};
    byte[] blueLUT = {1,2,3};
    byte[] alphaLUT = {};
- IllegalArgumentException: Unknown data type 100
if dataType = 100;
------------------------------
======================================================================

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: merlin-beta2 FIXED IN: merlin-beta2 INTEGRATED IN: merlin-beta2
14-06-2004

EVALUATION We'll try to catch as many problems as we can. A test program would be very helpful. Name: bkR10012 Date: 03/28/2001 Here is the test program. ---------------------------------------- test.java package test; import javax.imageio.ImageTypeSpecifier; import java.awt.color.ColorSpace; import java.awt.image.ColorModel; import java.awt.image.DataBuffer; public class test { public static void main(String argv[]) { test t = new test(); System.out.println("---------------------createPackedTest"); t.createPackedTest(); System.out.println("---------------------createInterleavedTest"); t.createInterleavedTest(); System.out.println("---------------------createBandedTest"); t.createBandedTest(); System.out.println("---------------------createIndexedTest"); t.createIndexedTest(); } public void createPackedTest() { ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); int rmask = 0x00ff0000; int gmask = 0x0000ff00; int bmask = 0x000000ff; int amask = 0xff000000; // testcase 1 try { ImageTypeSpecifier.createPacked(null, rmask, gmask, bmask, amask, 0, false); } catch (Throwable e) { System.out.println("testcase 1: " + e); } // testcase 2 ColorSpace cs1 = ColorSpace.getInstance(ColorSpace.CS_GRAY); try { ImageTypeSpecifier.createPacked (cs1, rmask, gmask, bmask, amask, 0, false); } catch (Throwable e) { System.out.println("testcase 2: " + e); } // testcase 3 try { ImageTypeSpecifier.createPacked(cs, 0, 0, 0, 0, 0, false); } catch (Throwable e) { System.out.println("testcase 3: " + e); } // testcase 4 try { ImageTypeSpecifier.createPacked(cs, rmask, gmask, bmask, amask, -1, false); } catch (Throwable e) { System.out.println("testcase 4: " + e); } } public void createInterleavedTest() { ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); int[] bandOffsets = {0,0,0,0}; int dataType = 0; boolean hasAlpha = true; boolean isAlphaPremultiplied = true; // testcase 1 try { ImageTypeSpecifier.createInterleaved (null, bandOffsets, dataType, hasAlpha, isAlphaPremultiplied); } catch (Throwable e) { System.out.println("testcase 1: " + e); } // testcase 2 try { ImageTypeSpecifier.createInterleaved (cs, null, dataType, hasAlpha, isAlphaPremultiplied); } catch (Throwable e) { System.out.println("testcase 2: " + e); } // testcase 3 int[] bad_bandOffsets = {0,100,1000,99999}; try { ImageTypeSpecifier.createInterleaved (cs, bad_bandOffsets, dataType, hasAlpha, isAlphaPremultiplied); } catch (Throwable e) { System.out.println("testcase 3: " + e); } // testcase 4 int[] bad_bandOffsets_1 = {}; try { ImageTypeSpecifier.createInterleaved (cs, bad_bandOffsets_1, dataType, hasAlpha, isAlphaPremultiplied); } catch (Throwable e) { System.out.println("testcase 4: " + e); } } public void createBandedTest() { ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); int[] bankIndices = {0, 100, 1000, 10000}; int[] bandOffsets = {0, 100, 1000, 10000}; int dataType = 0; boolean hasAlpha = true; boolean isAlphaPremultiplied = true; // testcase 1 try { ImageTypeSpecifier.createBanded(null, bankIndices, bandOffsets, dataType, hasAlpha, isAlphaPremultiplied); } catch (Throwable e) { System.out.println("testcase 1: " + e); } // testcase 2 int[] bad_bankIndices = {}; int[] bad_bandOffsets = {}; try { ImageTypeSpecifier.createBanded(cs, bad_bankIndices, bad_bandOffsets, dataType, hasAlpha, isAlphaPremultiplied); } catch (Throwable e) { System.out.println("testcase 2: " + e); } // testcase 3 try { ImageTypeSpecifier.createBanded(cs, bankIndices, bandOffsets, 99999, hasAlpha, isAlphaPremultiplied); } catch (Throwable e) { System.out.println("testcase 3: " + e); } } public void createGrayscaleTest() { int bits = 8; int dataType = DataBuffer.TYPE_BYTE; boolean isSigned = true; // testcase 1 try { ImageTypeSpecifier.createGrayscale(100, dataType, isSigned); } catch (Throwable e) { System.out.println("testcase 1: " + e); } // testcase 2 try { ImageTypeSpecifier.createGrayscale(10, dataType, isSigned); } catch (Throwable e) { System.out.println("testcase 2: " + e); } // testcase 3 try { ImageTypeSpecifier.createGrayscale(bits, 100, isSigned); } catch (Throwable e) { System.out.println("testcase 3: " + e); } } public void createIndexedTest() { byte[] redLUT = {0}; byte[] greenLUT = {0}; byte[] blueLUT = {0}; byte[] alphaLUT = {0}; int bits = 8; int dataType = DataBuffer.TYPE_BYTE; // testcase 1 try { ImageTypeSpecifier.createIndexed(redLUT, greenLUT, blueLUT, alphaLUT, 0, dataType); } catch (Throwable e) { System.out.println("testcase 1: " + e); } // testcase 2 try { ImageTypeSpecifier.createIndexed(redLUT, greenLUT, blueLUT, alphaLUT, 17, dataType); } catch (Throwable e) { System.out.println("testcase 2: " + e); } // testcase 3 try { ImageTypeSpecifier.createIndexed(redLUT, greenLUT, blueLUT, alphaLUT, 10, dataType); } catch (Throwable e) { System.out.println("testcase 3: " + e); } // testcase 4 byte[] greenLUT_4 = {}; try { ImageTypeSpecifier.createIndexed(redLUT, greenLUT_4, blueLUT, alphaLUT, bits, dataType); } catch (Throwable e) { System.out.println("testcase 4: " + e); } // testcase 5 byte[] redLUT_5 = {}; try { ImageTypeSpecifier.createIndexed(redLUT_5, greenLUT, blueLUT, alphaLUT, bits, dataType); } catch (Throwable e) { System.out.println("testcase 5: " + e); } // testcase 6 byte[] alphaLUT_6 = {}; try { ImageTypeSpecifier.createIndexed(redLUT, greenLUT, blueLUT, alphaLUT_6 , bits, dataType); } catch (Throwable e) { System.out.println("testcase 6: " + e); } // testcase 7 try { ImageTypeSpecifier.createIndexed(redLUT, greenLUT, blueLUT, alphaLUT , bits, 100); } catch (Throwable e) { System.out.println("testcase 7: " + e); } } } ---------------------------------------- ======================================================================
11-06-2004

PUBLIC COMMENTS spec: ImageTypeSpecifier - unspecified exceptions in factory methods
10-06-2004