Package

Source Code of EdgeNoOpCrash

/*
* @test    @(#)EdgeNoOpCrash.java  1.1 08/10/02
* @bug     6726779
* @summary Test verifies that ConvolveOp with the EDGE_NO_OP edge condition
*          does not cause JVM crash if size of source raster elements is
*          greather than size of the destination raster element.
*
* @run     main EdgeNoOpCrash
*/
import java.awt.Point;
import java.awt.image.ConvolveOp;
import java.awt.image.DataBuffer;
import java.awt.image.ImagingOpException;
import java.awt.image.Kernel;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.util.Arrays;

public class EdgeNoOpCrash {
    private static final int w = 3000;
    private static final int h = 200;
   
    public static void main(String[] args) {
        crashTest();
    }
   
    private static void crashTest() {
        Raster src = createSrcRaster();
        WritableRaster dst = createDstRaster();
        ConvolveOp op = createConvolveOp(ConvolveOp.EDGE_NO_OP);
        try {
            op.filter(src, dst);
        } catch (ImagingOpException e) {
            /*
             * The test pair of source and destination rasters
             * may cause failure of the medialib convolution routine,
             * so this exception is expected.
             *
             * The JVM crash is the only manifestation of this
             * test failure.
             */
        }
        System.out.println("Test PASSED.");
    }
   
    private static Raster createSrcRaster() {
        WritableRaster r = Raster.createInterleavedRaster(DataBuffer.TYPE_USHORT,
                w, h, 4, new Point(0, 0));
       
        return r;
    }
   
    private static WritableRaster createDstRaster() {
        WritableRaster r = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE,
                w, h, 4, new Point(0, 0));

        return r;
    }
   
    private static ConvolveOp createConvolveOp(int edgeHint) {
        final int kw = 3;
        final int kh = 3;
        float[] kdata = new float[kw * kh];
        float v = 1f / kdata.length;
        Arrays.fill(kdata, v);
       
        Kernel k = new Kernel(kw, kh, kdata);
        ConvolveOp op = new ConvolveOp(k, edgeHint, null);
       
        return op;
    }
}
TOP

Related Classes of EdgeNoOpCrash

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.