changeset 4587:cfe9f71da9f4 icedtea-2.0.1

Merge
author andrew
date Tue, 14 Feb 2012 14:01:11 +0000
parents 43bf4d62a772 (diff) c705a1cdc132 (current diff)
children 891fb0050add
files
diffstat 15 files changed, 384 insertions(+), 181 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/com/sun/media/sound/DirectAudioDevice.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/com/sun/media/sound/DirectAudioDevice.java	Tue Feb 14 14:01:11 2012 +0000
@@ -736,7 +736,7 @@
             if (off < 0) {
                 throw new ArrayIndexOutOfBoundsException(off);
             }
-            if (off + len > b.length) {
+            if ((long)off + (long)len > (long)b.length) {
                 throw new ArrayIndexOutOfBoundsException(b.length);
             }
 
@@ -964,7 +964,7 @@
             if (off < 0) {
                 throw new ArrayIndexOutOfBoundsException(off);
             }
-            if (off + len > b.length) {
+            if ((long)off + (long)len > (long)b.length) {
                 throw new ArrayIndexOutOfBoundsException(b.length);
             }
             if (!isActive() && doIO) {
--- a/src/share/classes/com/sun/media/sound/SoftMixingSourceDataLine.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/com/sun/media/sound/SoftMixingSourceDataLine.java	Tue Feb 14 14:01:11 2012 +0000
@@ -130,6 +130,12 @@
         if (len % framesize != 0)
             throw new IllegalArgumentException(
                     "Number of bytes does not represent an integral number of sample frames.");
+        if (off < 0) {
+            throw new ArrayIndexOutOfBoundsException(off);
+        }
+        if ((long)off + (long)len > (long)b.length) {
+            throw new ArrayIndexOutOfBoundsException(b.length);
+        }
 
         byte[] buff = cycling_buffer;
         int buff_len = cycling_buffer.length;
--- a/src/share/classes/java/awt/KeyboardFocusManager.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/java/awt/KeyboardFocusManager.java	Tue Feb 14 14:01:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -503,14 +503,8 @@
      */
     protected Component getGlobalFocusOwner() throws SecurityException {
         synchronized (KeyboardFocusManager.class) {
-            if (this == getCurrentKeyboardFocusManager()) {
-                return focusOwner;
-            } else {
-                if (focusLog.isLoggable(PlatformLogger.FINER)) {
-                    focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager());
-                }
-                throw new SecurityException(notPrivileged);
-            }
+            checkCurrentKFMSecurity();
+            return focusOwner;
         }
     }
 
@@ -544,6 +538,8 @@
 
         if (focusOwner == null || focusOwner.isFocusable()) {
             synchronized (KeyboardFocusManager.class) {
+                checkCurrentKFMSecurity();
+
                 oldFocusOwner = getFocusOwner();
 
                 try {
@@ -593,6 +589,9 @@
      * @see java.awt.event.FocusEvent#FOCUS_LOST
      */
     public void clearGlobalFocusOwner() {
+        synchronized (KeyboardFocusManager.class) {
+            checkCurrentKFMSecurity();
+        }
         if (!GraphicsEnvironment.isHeadless()) {
             // Toolkit must be fully initialized, otherwise
             // _clearGlobalFocusOwner will crash or throw an exception
@@ -672,14 +671,8 @@
         throws SecurityException
     {
         synchronized (KeyboardFocusManager.class) {
-            if (this == getCurrentKeyboardFocusManager()) {
-                return permanentFocusOwner;
-            } else {
-                if (focusLog.isLoggable(PlatformLogger.FINER)) {
-                    focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager());
-                }
-                throw new SecurityException(notPrivileged);
-            }
+            checkCurrentKFMSecurity();
+            return permanentFocusOwner;
         }
     }
 
@@ -708,13 +701,14 @@
      * @beaninfo
      *       bound: true
      */
-    protected void setGlobalPermanentFocusOwner(Component permanentFocusOwner)
-    {
+    protected void setGlobalPermanentFocusOwner(Component permanentFocusOwner) {
         Component oldPermanentFocusOwner = null;
         boolean shouldFire = false;
 
         if (permanentFocusOwner == null || permanentFocusOwner.isFocusable()) {
             synchronized (KeyboardFocusManager.class) {
+                checkCurrentKFMSecurity();
+
                 oldPermanentFocusOwner = getPermanentFocusOwner();
 
                 try {
@@ -780,14 +774,8 @@
      */
     protected Window getGlobalFocusedWindow() throws SecurityException {
         synchronized (KeyboardFocusManager.class) {
-            if (this == getCurrentKeyboardFocusManager()) {
-               return focusedWindow;
-            } else {
-                if (focusLog.isLoggable(PlatformLogger.FINER)) {
-                    focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager());
-                }
-                throw new SecurityException(notPrivileged);
-            }
+            checkCurrentKFMSecurity();
+            return focusedWindow;
         }
     }
 
@@ -818,6 +806,8 @@
 
         if (focusedWindow == null || focusedWindow.isFocusableWindow()) {
             synchronized (KeyboardFocusManager.class) {
+                checkCurrentKFMSecurity();
+
                 oldFocusedWindow = getFocusedWindow();
 
                 try {
@@ -884,14 +874,8 @@
      */
     protected Window getGlobalActiveWindow() throws SecurityException {
         synchronized (KeyboardFocusManager.class) {
-            if (this == getCurrentKeyboardFocusManager()) {
-               return activeWindow;
-            } else {
-                if (focusLog.isLoggable(PlatformLogger.FINER)) {
-                    focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager());
-                }
-                throw new SecurityException(notPrivileged);
-            }
+            checkCurrentKFMSecurity();
+            return activeWindow;
         }
     }
 
@@ -920,6 +904,8 @@
     protected void setGlobalActiveWindow(Window activeWindow) {
         Window oldActiveWindow;
         synchronized (KeyboardFocusManager.class) {
+            checkCurrentKFMSecurity();
+
             oldActiveWindow = getActiveWindow();
             if (focusLog.isLoggable(PlatformLogger.FINER)) {
                 focusLog.finer("Setting global active window to " + activeWindow + ", old active " + oldActiveWindow);
@@ -1214,14 +1200,8 @@
         throws SecurityException
     {
         synchronized (KeyboardFocusManager.class) {
-            if (this == getCurrentKeyboardFocusManager()) {
-                return currentFocusCycleRoot;
-            } else {
-                if (focusLog.isLoggable(PlatformLogger.FINER)) {
-                    focusLog.finer("This manager is " + this + ", current is " + getCurrentKeyboardFocusManager());
-                }
-                throw new SecurityException(notPrivileged);
-            }
+            checkCurrentKFMSecurity();
+            return currentFocusCycleRoot;
         }
     }
 
@@ -1245,6 +1225,8 @@
         Container oldFocusCycleRoot;
 
         synchronized (KeyboardFocusManager.class) {
+            checkCurrentKFMSecurity();
+
             oldFocusCycleRoot  = getCurrentFocusCycleRoot();
             currentFocusCycleRoot = newFocusCycleRoot;
         }
@@ -3062,4 +3044,14 @@
                 : null;
         }
     }
+
+    private void checkCurrentKFMSecurity() {
+        if (this != getCurrentKeyboardFocusManager()) {
+            if (focusLog.isLoggable(PlatformLogger.FINER)) {
+                focusLog.finer("This manager is " + this +
+                               ", current is " + getCurrentKeyboardFocusManager());
+            }
+            throw new SecurityException(notPrivileged);
+        }
+    }
 }
--- a/src/share/classes/java/io/ObjectStreamClass.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/java/io/ObjectStreamClass.java	Tue Feb 14 14:01:11 2012 +0000
@@ -123,14 +123,39 @@
      */
     private boolean hasBlockExternalData = true;
 
+    /**
+     * Contains information about InvalidClassException instances to be thrown
+     * when attempting operations on an invalid class. Note that instances of
+     * this class are immutable and are potentially shared among
+     * ObjectStreamClass instances.
+     */
+    private static class ExceptionInfo {
+        private final String className;
+        private final String message;
+
+        ExceptionInfo(String cn, String msg) {
+            className = cn;
+            message = msg;
+        }
+
+        /**
+         * Returns (does not throw) an InvalidClassException instance created
+         * from the information in this object, suitable for being thrown by
+         * the caller.
+         */
+        InvalidClassException newInvalidClassException() {
+            return new InvalidClassException(className, message);
+        }
+    }
+
     /** exception (if any) thrown while attempting to resolve class */
     private ClassNotFoundException resolveEx;
     /** exception (if any) to throw if non-enum deserialization attempted */
-    private InvalidClassException deserializeEx;
+    private ExceptionInfo deserializeEx;
     /** exception (if any) to throw if non-enum serialization attempted */
-    private InvalidClassException serializeEx;
+    private ExceptionInfo serializeEx;
     /** exception (if any) to throw if default serialization attempted */
-    private InvalidClassException defaultSerializeEx;
+    private ExceptionInfo defaultSerializeEx;
 
     /** serializable fields */
     private ObjectStreamField[] fields;
@@ -444,7 +469,8 @@
                         fields = getSerialFields(cl);
                         computeFieldOffsets();
                     } catch (InvalidClassException e) {
-                        serializeEx = deserializeEx = e;
+                        serializeEx = deserializeEx =
+                            new ExceptionInfo(e.classname, e.getMessage());
                         fields = NO_FIELDS;
                     }
 
@@ -483,15 +509,14 @@
 
         if (deserializeEx == null) {
             if (isEnum) {
-                deserializeEx = new InvalidClassException(name, "enum type");
+                deserializeEx = new ExceptionInfo(name, "enum type");
             } else if (cons == null) {
-                deserializeEx = new InvalidClassException(
-                    name, "no valid constructor");
+                deserializeEx = new ExceptionInfo(name, "no valid constructor");
             }
         }
         for (int i = 0; i < fields.length; i++) {
             if (fields[i].getField() == null) {
-                defaultSerializeEx = new InvalidClassException(
+                defaultSerializeEx = new ExceptionInfo(
                     name, "unmatched serializable field(s) declared");
             }
         }
@@ -601,8 +626,8 @@
                     (externalizable != localDesc.externalizable) ||
                     !(serializable || externalizable))
                 {
-                    deserializeEx = new InvalidClassException(localDesc.name,
-                        "class invalid for deserialization");
+                    deserializeEx = new ExceptionInfo(
+                        localDesc.name, "class invalid for deserialization");
                 }
             }
 
@@ -727,11 +752,7 @@
      */
     void checkDeserialize() throws InvalidClassException {
         if (deserializeEx != null) {
-            InvalidClassException ice =
-                new InvalidClassException(deserializeEx.classname,
-                                          deserializeEx.getMessage());
-            ice.initCause(deserializeEx);
-            throw ice;
+            throw deserializeEx.newInvalidClassException();
         }
     }
 
@@ -742,11 +763,7 @@
      */
     void checkSerialize() throws InvalidClassException {
         if (serializeEx != null) {
-            InvalidClassException ice =
-                new InvalidClassException(serializeEx.classname,
-                                          serializeEx.getMessage());
-            ice.initCause(serializeEx);
-            throw ice;
+            throw serializeEx.newInvalidClassException();
         }
     }
 
@@ -759,11 +776,7 @@
      */
     void checkDefaultSerialize() throws InvalidClassException {
         if (defaultSerializeEx != null) {
-            InvalidClassException ice =
-                new InvalidClassException(defaultSerializeEx.classname,
-                                          defaultSerializeEx.getMessage());
-            ice.initCause(defaultSerializeEx);
-            throw ice;
+            throw defaultSerializeEx.newInvalidClassException();
         }
     }
 
--- a/src/share/classes/java/util/TimeZone.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/java/util/TimeZone.java	Tue Feb 14 14:01:11 2012 +0000
@@ -43,6 +43,7 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.concurrent.ConcurrentHashMap;
+import sun.awt.AppContext;
 import sun.security.action.GetPropertyAction;
 import sun.util.TimeZoneNameUtility;
 import sun.util.calendar.ZoneInfo;
@@ -615,7 +616,7 @@
      * method doesn't create a clone.
      */
     static TimeZone getDefaultRef() {
-        TimeZone defaultZone = defaultZoneTL.get();
+        TimeZone defaultZone = getDefaultInAppContext();
         if (defaultZone == null) {
             defaultZone = defaultTimeZone;
             if (defaultZone == null) {
@@ -706,10 +707,49 @@
         if (hasPermission()) {
             synchronized (TimeZone.class) {
                 defaultTimeZone = zone;
-                defaultZoneTL.set(null);
+                setDefaultInAppContext(null);
             }
         } else {
-            defaultZoneTL.set(zone);
+            setDefaultInAppContext(zone);
+        }
+    }
+
+    /**
+     * Returns the default TimeZone in an AppContext if any AppContext
+     * has ever used. null is returned if any AppContext hasn't been
+     * used or if the AppContext doesn't have the default TimeZone.
+     */
+    private synchronized static TimeZone getDefaultInAppContext() {
+        if (!hasSetInAppContext) {
+            return null;
+        }
+
+        AppContext ac = AppContext.getAppContext();
+        if (ac != null && !ac.isDisposed()) {
+            return (TimeZone) ac.get(TimeZone.class);
+        }
+        return null;
+    }
+
+    /**
+     * Sets the default TimeZone in the AppContext to the given
+     * tz. null is handled special: do nothing if any AppContext
+     * hasn't been used, remove the default TimeZone in the
+     * AppContext otherwise.
+     */
+    private synchronized static void setDefaultInAppContext(TimeZone tz) {
+        if (!hasSetInAppContext && tz == null) {
+            return;
+        }
+
+        AppContext ac = AppContext.getAppContext();
+        if (ac != null && !ac.isDisposed()) {
+            if (tz != null) {
+                ac.put(TimeZone.class, tz);
+                hasSetInAppContext = true;
+            } else {
+                ac.remove(TimeZone.class);
+            }
         }
     }
 
@@ -760,12 +800,13 @@
      */
     private String           ID;
     private static volatile TimeZone defaultTimeZone;
-    private static final InheritableThreadLocal<TimeZone> defaultZoneTL
-                                        = new InheritableThreadLocal<TimeZone>();
 
     static final String         GMT_ID        = "GMT";
     private static final int    GMT_ID_LENGTH = 3;
 
+    // true if the default TimeZone has been set in any AppContext
+    private static boolean hasSetInAppContext;
+
     /**
      * Parses a custom time zone identifier and returns a corresponding zone.
      * This method doesn't support the RFC 822 time zone format. (e.g., +hhmm)
--- a/src/share/classes/java/util/concurrent/atomic/AtomicReferenceArray.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/java/util/concurrent/atomic/AtomicReferenceArray.java	Tue Feb 14 14:01:11 2012 +0000
@@ -34,8 +34,10 @@
  */
 
 package java.util.concurrent.atomic;
+
+import java.lang.reflect.Array;
+import java.util.Arrays;
 import sun.misc.Unsafe;
-import java.util.*;
 
 /**
  * An array of object references in which elements may be updated
@@ -49,13 +51,23 @@
 public class AtomicReferenceArray<E> implements java.io.Serializable {
     private static final long serialVersionUID = -6209656149925076980L;
 
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final int base = unsafe.arrayBaseOffset(Object[].class);
+    private static final Unsafe unsafe;
+    private static final int base;
     private static final int shift;
-    private final Object[] array;
+    private static final long arrayFieldOffset;
+    private final Object[] array; // must have exact type Object[]
 
     static {
-        int scale = unsafe.arrayIndexScale(Object[].class);
+        int scale;
+        try {
+            unsafe = Unsafe.getUnsafe();
+            arrayFieldOffset = unsafe.objectFieldOffset
+                (AtomicReferenceArray.class.getDeclaredField("array"));
+            base = unsafe.arrayBaseOffset(Object[].class);
+            scale = unsafe.arrayIndexScale(Object[].class);
+        } catch (Exception e) {
+            throw new Error(e);
+        }
         if ((scale & (scale - 1)) != 0)
             throw new Error("data type scale not a power of two");
         shift = 31 - Integer.numberOfLeadingZeros(scale);
@@ -91,7 +103,7 @@
      */
     public AtomicReferenceArray(E[] array) {
         // Visibility guaranteed by final field guarantees
-        this.array = array.clone();
+        this.array = Arrays.copyOf(array, array.length, Object[].class);
     }
 
     /**
@@ -150,7 +162,7 @@
     public final E getAndSet(int i, E newValue) {
         long offset = checkedByteOffset(i);
         while (true) {
-            E current = (E) getRaw(offset);
+            E current = getRaw(offset);
             if (compareAndSetRaw(offset, current, newValue))
                 return current;
         }
@@ -196,7 +208,7 @@
      * @return the String representation of the current values of array
      */
     public String toString() {
-           int iMax = array.length - 1;
+        int iMax = array.length - 1;
         if (iMax == -1)
             return "[]";
 
@@ -210,4 +222,19 @@
         }
     }
 
+    /**
+     * Reconstitutes the instance from a stream (that is, deserializes it).
+     * @param s the stream
+     */
+    private void readObject(java.io.ObjectInputStream s)
+        throws java.io.IOException, ClassNotFoundException {
+        // Note: This must be changed if any additional fields are defined
+        Object a = s.readFields().get("array", null);
+        if (a == null || !a.getClass().isArray())
+            throw new java.io.InvalidObjectException("Not array type");
+        if (a.getClass() != Object[].class)
+            a = Arrays.copyOf((Object[])a, Array.getLength(a), Object[].class);
+        unsafe.putObjectVolatile(this, arrayFieldOffset, a);
+    }
+
 }
--- a/src/share/classes/sun/java2d/SunGraphics2D.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/sun/java2d/SunGraphics2D.java	Tue Feb 14 14:01:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -370,6 +370,17 @@
     }
 
     public void validatePipe() {
+        /* This workaround is for the situation when we update the Pipelines
+         * for invalid SurfaceData and run further code when the current
+         * pipeline doesn't support the type of new SurfaceData created during
+         * the current pipeline's work (in place of the invalid SurfaceData).
+         * Usually SurfaceData and Pipelines are repaired (through revalidateAll)
+         * and called again in the exception handlers */
+
+        if (!surfaceData.isValid()) {
+            throw new InvalidPipeException("attempt to validate Pipe with invalid SurfaceData");
+        }
+
         surfaceData.validatePipe(this);
     }
 
--- a/src/share/classes/sun/java2d/opengl/OGLRenderer.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/sun/java2d/opengl/OGLRenderer.java	Tue Feb 14 14:01:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
 
 import java.awt.Transparency;
 import java.awt.geom.Path2D;
+import sun.java2d.InvalidPipeException;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.pipe.BufferedRenderPipe;
@@ -46,7 +47,12 @@
         int ctxflags =
             sg2d.paint.getTransparency() == Transparency.OPAQUE ?
                 OGLContext.SRC_IS_OPAQUE : OGLContext.NO_CONTEXT_FLAGS;
-        OGLSurfaceData dstData = (OGLSurfaceData)sg2d.surfaceData;
+        OGLSurfaceData dstData;
+        try {
+            dstData = (OGLSurfaceData)sg2d.surfaceData;
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
         OGLContext.validateContext(dstData, dstData,
                                    sg2d.getCompClip(), sg2d.composite,
                                    null, sg2d.paint, sg2d, ctxflags);
@@ -55,7 +61,12 @@
     @Override
     protected void validateContextAA(SunGraphics2D sg2d) {
         int ctxflags = OGLContext.NO_CONTEXT_FLAGS;
-        OGLSurfaceData dstData = (OGLSurfaceData)sg2d.surfaceData;
+        OGLSurfaceData dstData;
+        try {
+            dstData = (OGLSurfaceData)sg2d.surfaceData;
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
         OGLContext.validateContext(dstData, dstData,
                                    sg2d.getCompClip(), sg2d.composite,
                                    null, sg2d.paint, sg2d, ctxflags);
@@ -69,7 +80,12 @@
             int ctxflags =
                 sg2d.surfaceData.getTransparency() == Transparency.OPAQUE ?
                     OGLContext.SRC_IS_OPAQUE : OGLContext.NO_CONTEXT_FLAGS;
-            OGLSurfaceData dstData = (OGLSurfaceData)sg2d.surfaceData;
+            OGLSurfaceData dstData;
+            try {
+                dstData = (OGLSurfaceData)sg2d.surfaceData;
+            } catch (ClassCastException e) {
+                throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+            }
             OGLContext.validateContext(dstData, dstData,
                                        sg2d.getCompClip(), sg2d.composite,
                                        null, null, null, ctxflags);
--- a/src/share/classes/sun/java2d/pipe/BufferedContext.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/sun/java2d/pipe/BufferedContext.java	Tue Feb 14 14:01:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -111,6 +111,8 @@
      *
      * Note: must be called while the RenderQueue lock is held.
      *
+     * It's assumed that the type of surfaces has been checked by the Renderer
+     *
      * @throws InvalidPipeException if either src or dest surface is not valid
      * or lost
      * @see RenderQueue#lock
@@ -135,6 +137,8 @@
      *
      * Note: must be called while the RenderQueue lock is held.
      *
+     * It's assumed that the type of surfaces has been checked by the Renderer
+     *
      * @throws InvalidPipeException if the surface is not valid
      * or lost
      * @see RenderQueue#lock
@@ -160,6 +164,8 @@
      *
      * Note: must be called while the RenderQueue lock is held.
      *
+     * It's assumed that the type of surfaces has been checked by the Renderer
+     *
      * @throws InvalidPipeException if either src or dest surface is not valid
      * or lost
      */
--- a/src/share/classes/sun/net/httpserver/Request.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/sun/net/httpserver/Request.java	Tue Feb 14 14:01:11 2012 +0000
@@ -203,6 +203,13 @@
                 v = new String();
             else
                 v = String.copyValueOf(s, keyend, len - keyend);
+
+            if (hdrs.size() >= ServerConfig.getMaxReqHeaders()) {
+                throw new IOException("Maximum number of request headers (" +
+                        "sun.net.httpserver.maxReqHeaders) exceeded, " +
+                        ServerConfig.getMaxReqHeaders() + ".");
+            }
+
             hdrs.add (k,v);
             len = 0;
         }
--- a/src/share/classes/sun/net/httpserver/ServerConfig.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/classes/sun/net/httpserver/ServerConfig.java	Tue Feb 14 14:01:11 2012 +0000
@@ -48,13 +48,14 @@
     static final long DEFAULT_MAX_REQ_TIME = -1; // default: forever
     static final long DEFAULT_MAX_RSP_TIME = -1; // default: forever
     static final long DEFAULT_TIMER_MILLIS = 1000;
-
+    static final int  DEFAULT_MAX_REQ_HEADERS = 200;
     static final long DEFAULT_DRAIN_AMOUNT = 64 * 1024;
 
     static long idleInterval;
     static long drainAmount;    // max # of bytes to drain from an inputstream
     static int maxIdleConnections;
-
+    // The maximum number of request headers allowable
+    private static int maxReqHeaders;
     // max time a request or response is allowed to take
     static long maxReqTime;
     static long maxRspTime;
@@ -83,6 +84,11 @@
                 "sun.net.httpserver.drainAmount",
                 DEFAULT_DRAIN_AMOUNT))).longValue();
 
+        maxReqHeaders = ((Integer)java.security.AccessController.doPrivileged(
+                            new sun.security.action.GetIntegerAction(
+                            "sun.net.httpserver.maxReqHeaders",
+                            DEFAULT_MAX_REQ_HEADERS))).intValue();
+
         maxReqTime = ((Long)java.security.AccessController.doPrivileged(
                 new sun.security.action.GetLongAction(
                 "sun.net.httpserver.maxReqTime",
@@ -161,6 +167,10 @@
         return drainAmount;
     }
 
+    static int getMaxReqHeaders() {
+        return maxReqHeaders;
+    }
+
     static long getMaxReqTime () {
         return maxReqTime;
     }
--- a/src/share/native/java/util/zip/zip_util.c	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/share/native/java/util/zip/zip_util.c	Tue Feb 14 14:01:11 2012 +0000
@@ -521,7 +521,7 @@
 {
     jint count = 0;
     ptrdiff_t i;
-    for (i = 0; i + CENHDR < end - beg; i += CENSIZE(beg + i))
+    for (i = 0; i + CENHDR <= end - beg; i += CENSIZE(beg + i))
         count++;
     return count;
 }
--- a/src/windows/classes/sun/java2d/d3d/D3DRenderer.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/windows/classes/sun/java2d/d3d/D3DRenderer.java	Tue Feb 14 14:01:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
 
 import java.awt.Transparency;
 import java.awt.geom.Path2D;
+import sun.java2d.InvalidPipeException;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.loops.GraphicsPrimitive;
 import sun.java2d.pipe.BufferedPaints;
@@ -47,7 +48,12 @@
         int ctxflags =
             sg2d.paint.getTransparency() == Transparency.OPAQUE ?
                 D3DContext.SRC_IS_OPAQUE : D3DContext.NO_CONTEXT_FLAGS;
-        D3DSurfaceData dstData = (D3DSurfaceData)sg2d.surfaceData;
+        D3DSurfaceData dstData;
+        try {
+            dstData = (D3DSurfaceData)sg2d.surfaceData;
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
         D3DContext.validateContext(dstData, dstData,
                                    sg2d.getCompClip(), sg2d.composite,
                                    null, sg2d.paint, sg2d, ctxflags);
@@ -56,7 +62,12 @@
     @Override
     protected void validateContextAA(SunGraphics2D sg2d) {
         int ctxflags = D3DContext.NO_CONTEXT_FLAGS;
-        D3DSurfaceData dstData = (D3DSurfaceData)sg2d.surfaceData;
+        D3DSurfaceData dstData;
+        try {
+            dstData = (D3DSurfaceData)sg2d.surfaceData;
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
         D3DContext.validateContext(dstData, dstData,
                                    sg2d.getCompClip(), sg2d.composite,
                                    null, sg2d.paint, sg2d, ctxflags);
@@ -70,7 +81,12 @@
             int ctxflags =
                 sg2d.surfaceData.getTransparency() == Transparency.OPAQUE ?
                     D3DContext.SRC_IS_OPAQUE : D3DContext.NO_CONTEXT_FLAGS;
-            D3DSurfaceData dstData = (D3DSurfaceData)sg2d.surfaceData;
+            D3DSurfaceData dstData;
+            try {
+                dstData = (D3DSurfaceData)sg2d.surfaceData;
+            } catch (ClassCastException e) {
+                throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+            }
             D3DContext.validateContext(dstData, dstData,
                                        sg2d.getCompClip(), sg2d.composite,
                                        null, null, null, ctxflags);
--- a/src/windows/classes/sun/java2d/windows/GDIRenderer.java	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/windows/classes/sun/java2d/windows/GDIRenderer.java	Tue Feb 14 14:01:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import java.awt.Shape;
 import java.awt.geom.Path2D;
 import java.awt.geom.PathIterator;
+import sun.java2d.InvalidPipeException;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
 import sun.java2d.pipe.Region;
@@ -45,7 +46,7 @@
     PixelFillPipe,
     ShapeDrawPipe
 {
-    native void doDrawLine(SurfaceData sData,
+    native void doDrawLine(GDIWindowSurfaceData sData,
                            Region clip, Composite comp, int color,
                            int x1, int y1, int x2, int y2);
 
@@ -54,24 +55,32 @@
     {
         int transx = sg2d.transX;
         int transy = sg2d.transY;
-        doDrawLine(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   x1+transx, y1+transy, x2+transx, y2+transy);
+        try {
+            doDrawLine((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       x1+transx, y1+transy, x2+transx, y2+transy);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doDrawRect(SurfaceData sData,
+    native void doDrawRect(GDIWindowSurfaceData sData,
                            Region clip, Composite comp, int color,
                            int x, int y, int w, int h);
 
     public void drawRect(SunGraphics2D sg2d,
                          int x, int y, int width, int height)
     {
-        doDrawRect(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   x+sg2d.transX, y+sg2d.transY, width, height);
+        try {
+            doDrawRect((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       x+sg2d.transX, y+sg2d.transY, width, height);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doDrawRoundRect(SurfaceData sData,
+    native void doDrawRoundRect(GDIWindowSurfaceData sData,
                                 Region clip, Composite comp, int color,
                                 int x, int y, int w, int h,
                                 int arcW, int arcH);
@@ -80,25 +89,33 @@
                               int x, int y, int width, int height,
                               int arcWidth, int arcHeight)
     {
-        doDrawRoundRect(sg2d.surfaceData,
-                        sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                        x+sg2d.transX, y+sg2d.transY, width, height,
-                        arcWidth, arcHeight);
+        try {
+            doDrawRoundRect((GDIWindowSurfaceData)sg2d.surfaceData,
+                            sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                            x+sg2d.transX, y+sg2d.transY, width, height,
+                            arcWidth, arcHeight);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doDrawOval(SurfaceData sData,
+    native void doDrawOval(GDIWindowSurfaceData sData,
                            Region clip, Composite comp, int color,
                            int x, int y, int w, int h);
 
     public void drawOval(SunGraphics2D sg2d,
                          int x, int y, int width, int height)
     {
-        doDrawOval(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   x+sg2d.transX, y+sg2d.transY, width, height);
+        try {
+            doDrawOval((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       x+sg2d.transX, y+sg2d.transY, width, height);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doDrawArc(SurfaceData sData,
+    native void doDrawArc(GDIWindowSurfaceData sData,
                           Region clip, Composite comp, int color,
                           int x, int y, int w, int h,
                           int angleStart, int angleExtent);
@@ -107,13 +124,17 @@
                         int x, int y, int width, int height,
                         int startAngle, int arcAngle)
     {
-        doDrawArc(sg2d.surfaceData,
-                  sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                  x+sg2d.transX, y+sg2d.transY, width, height,
-                  startAngle, arcAngle);
+        try {
+            doDrawArc((GDIWindowSurfaceData)sg2d.surfaceData,
+                      sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                      x+sg2d.transX, y+sg2d.transY, width, height,
+                      startAngle, arcAngle);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doDrawPoly(SurfaceData sData,
+    native void doDrawPoly(GDIWindowSurfaceData sData,
                            Region clip, Composite comp, int color,
                            int transx, int transy,
                            int[] xpoints, int[] ypoints,
@@ -123,33 +144,45 @@
                              int xpoints[], int ypoints[],
                              int npoints)
     {
-        doDrawPoly(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   sg2d.transX, sg2d.transY, xpoints, ypoints, npoints, false);
+        try {
+            doDrawPoly((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       sg2d.transX, sg2d.transY, xpoints, ypoints, npoints, false);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
     public void drawPolygon(SunGraphics2D sg2d,
                             int xpoints[], int ypoints[],
                             int npoints)
     {
-        doDrawPoly(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   sg2d.transX, sg2d.transY, xpoints, ypoints, npoints, true);
+        try {
+            doDrawPoly((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       sg2d.transX, sg2d.transY, xpoints, ypoints, npoints, true);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doFillRect(SurfaceData sData,
+    native void doFillRect(GDIWindowSurfaceData sData,
                            Region clip, Composite comp, int color,
                            int x, int y, int w, int h);
 
     public void fillRect(SunGraphics2D sg2d,
                          int x, int y, int width, int height)
     {
-        doFillRect(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   x+sg2d.transX, y+sg2d.transY, width, height);
+        try {
+            doFillRect((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       x+sg2d.transX, y+sg2d.transY, width, height);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doFillRoundRect(SurfaceData sData,
+    native void doFillRoundRect(GDIWindowSurfaceData sData,
                                 Region clip, Composite comp, int color,
                                 int x, int y, int w, int h,
                                 int arcW, int arcH);
@@ -158,25 +191,33 @@
                               int x, int y, int width, int height,
                               int arcWidth, int arcHeight)
     {
-        doFillRoundRect(sg2d.surfaceData,
-                        sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                        x+sg2d.transX, y+sg2d.transY, width, height,
-                        arcWidth, arcHeight);
+        try {
+            doFillRoundRect((GDIWindowSurfaceData)sg2d.surfaceData,
+                            sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                            x+sg2d.transX, y+sg2d.transY, width, height,
+                            arcWidth, arcHeight);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doFillOval(SurfaceData sData,
+    native void doFillOval(GDIWindowSurfaceData sData,
                            Region clip, Composite comp, int color,
                            int x, int y, int w, int h);
 
     public void fillOval(SunGraphics2D sg2d,
                          int x, int y, int width, int height)
     {
-        doFillOval(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   x+sg2d.transX, y+sg2d.transY, width, height);
+        try {
+            doFillOval((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       x+sg2d.transX, y+sg2d.transY, width, height);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doFillArc(SurfaceData sData,
+    native void doFillArc(GDIWindowSurfaceData sData,
                           Region clip, Composite comp, int color,
                           int x, int y, int w, int h,
                           int angleStart, int angleExtent);
@@ -185,13 +226,17 @@
                         int x, int y, int width, int height,
                         int startAngle, int arcAngle)
     {
-        doFillArc(sg2d.surfaceData,
-                  sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                  x+sg2d.transX, y+sg2d.transY, width, height,
-                  startAngle, arcAngle);
+        try {
+            doFillArc((GDIWindowSurfaceData)sg2d.surfaceData,
+                      sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                      x+sg2d.transX, y+sg2d.transY, width, height,
+                      startAngle, arcAngle);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doFillPoly(SurfaceData sData,
+    native void doFillPoly(GDIWindowSurfaceData sData,
                            Region clip, Composite comp, int color,
                            int transx, int transy,
                            int[] xpoints, int[] ypoints,
@@ -201,12 +246,16 @@
                             int xpoints[], int ypoints[],
                             int npoints)
     {
-        doFillPoly(sg2d.surfaceData,
-                   sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                   sg2d.transX, sg2d.transY, xpoints, ypoints, npoints);
+        try {
+            doFillPoly((GDIWindowSurfaceData)sg2d.surfaceData,
+                       sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                       sg2d.transX, sg2d.transY, xpoints, ypoints, npoints);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
-    native void doShape(SurfaceData sData,
+    native void doShape(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int transX, int transY,
                         Path2D.Float p2df, boolean isfill);
@@ -228,9 +277,13 @@
             transX = 0;
             transY = 0;
         }
-        doShape(sg2d.surfaceData,
-                sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
-                transX, transY, p2df, isfill);
+        try {
+            doShape((GDIWindowSurfaceData)sg2d.surfaceData,
+                    sg2d.getCompClip(), sg2d.composite, sg2d.eargb,
+                    transX, transY, p2df, isfill);
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
     }
 
     // REMIND: This is just a hack to get WIDE lines to honor the
@@ -239,7 +292,12 @@
     // method that could be filled by the doShape method more quickly.
     public void doFillSpans(SunGraphics2D sg2d, SpanIterator si) {
         int box[] = new int[4];
-        SurfaceData sd = sg2d.surfaceData;
+        GDIWindowSurfaceData sd;
+        try {
+            sd = (GDIWindowSurfaceData)sg2d.surfaceData;
+        } catch (ClassCastException e) {
+            throw new InvalidPipeException("wrong surface data type: " + sg2d.surfaceData);
+        }
         Region clip = sg2d.getCompClip();
         Composite comp = sg2d.composite;
         int eargb = sg2d.eargb;
@@ -268,7 +326,7 @@
         doShape(sg2d, s, true);
     }
 
-    public native void devCopyArea(SurfaceData sData,
+    public native void devCopyArea(GDIWindowSurfaceData sData,
                                    int srcx, int srcy,
                                    int dx, int dy,
                                    int w, int h);
@@ -278,21 +336,21 @@
     }
 
     public static class Tracer extends GDIRenderer {
-        void doDrawLine(SurfaceData sData,
+        void doDrawLine(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int x1, int y1, int x2, int y2)
         {
             GraphicsPrimitive.tracePrimitive("GDIDrawLine");
             super.doDrawLine(sData, clip, comp, color, x1, y1, x2, y2);
         }
-        void doDrawRect(SurfaceData sData,
+        void doDrawRect(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int x, int y, int w, int h)
         {
             GraphicsPrimitive.tracePrimitive("GDIDrawRect");
             super.doDrawRect(sData, clip, comp, color, x, y, w, h);
         }
-        void doDrawRoundRect(SurfaceData sData,
+        void doDrawRoundRect(GDIWindowSurfaceData sData,
                              Region clip, Composite comp, int color,
                              int x, int y, int w, int h,
                              int arcW, int arcH)
@@ -301,14 +359,14 @@
             super.doDrawRoundRect(sData, clip, comp, color,
                                   x, y, w, h, arcW, arcH);
         }
-        void doDrawOval(SurfaceData sData,
+        void doDrawOval(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int x, int y, int w, int h)
         {
             GraphicsPrimitive.tracePrimitive("GDIDrawOval");
             super.doDrawOval(sData, clip, comp, color, x, y, w, h);
         }
-        void doDrawArc(SurfaceData sData,
+        void doDrawArc(GDIWindowSurfaceData sData,
                        Region clip, Composite comp, int color,
                        int x, int y, int w, int h,
                        int angleStart, int angleExtent)
@@ -317,7 +375,7 @@
             super.doDrawArc(sData, clip, comp, color, x, y, w, h,
                             angleStart, angleExtent);
         }
-        void doDrawPoly(SurfaceData sData,
+        void doDrawPoly(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int transx, int transy,
                         int[] xpoints, int[] ypoints,
@@ -327,14 +385,14 @@
             super.doDrawPoly(sData, clip, comp, color, transx, transy,
                              xpoints, ypoints, npoints, isclosed);
         }
-        void doFillRect(SurfaceData sData,
+        void doFillRect(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int x, int y, int w, int h)
         {
             GraphicsPrimitive.tracePrimitive("GDIFillRect");
             super.doFillRect(sData, clip, comp, color, x, y, w, h);
         }
-        void doFillRoundRect(SurfaceData sData,
+        void doFillRoundRect(GDIWindowSurfaceData sData,
                              Region clip, Composite comp, int color,
                              int x, int y, int w, int h,
                              int arcW, int arcH)
@@ -343,14 +401,14 @@
             super.doFillRoundRect(sData, clip, comp, color,
                                   x, y, w, h, arcW, arcH);
         }
-        void doFillOval(SurfaceData sData,
+        void doFillOval(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int x, int y, int w, int h)
         {
             GraphicsPrimitive.tracePrimitive("GDIFillOval");
             super.doFillOval(sData, clip, comp, color, x, y, w, h);
         }
-        void doFillArc(SurfaceData sData,
+        void doFillArc(GDIWindowSurfaceData sData,
                        Region clip, Composite comp, int color,
                        int x, int y, int w, int h,
                        int angleStart, int angleExtent)
@@ -359,7 +417,7 @@
             super.doFillArc(sData, clip, comp, color, x, y, w, h,
                             angleStart, angleExtent);
         }
-        void doFillPoly(SurfaceData sData,
+        void doFillPoly(GDIWindowSurfaceData sData,
                         Region clip, Composite comp, int color,
                         int transx, int transy,
                         int[] xpoints, int[] ypoints,
@@ -369,7 +427,7 @@
             super.doFillPoly(sData, clip, comp, color, transx, transy,
                              xpoints, ypoints, npoints);
         }
-        void doShape(SurfaceData sData,
+        void doShape(GDIWindowSurfaceData sData,
                      Region clip, Composite comp, int color,
                      int transX, int transY,
                      Path2D.Float p2df, boolean isfill)
@@ -380,7 +438,7 @@
             super.doShape(sData, clip, comp, color,
                           transX, transY, p2df, isfill);
         }
-        public void devCopyArea(SurfaceData sData,
+        public void devCopyArea(GDIWindowSurfaceData sData,
                                 int srcx, int srcy,
                                 int dx, int dy,
                                 int w, int h)
--- a/src/windows/native/sun/java2d/windows/GDIRenderer.cpp	Fri Nov 11 15:17:51 2011 +0300
+++ b/src/windows/native/sun/java2d/windows/GDIRenderer.cpp	Tue Feb 14 14:01:11 2012 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -117,7 +117,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doDrawLine
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doDrawLine
@@ -164,7 +164,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doDrawRect
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doDrawRect
@@ -209,7 +209,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doDrawRoundRect
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doDrawRoundRect
@@ -253,7 +253,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doDrawOval
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doDrawOval
@@ -291,7 +291,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doDrawArc
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doDrawArc
@@ -347,7 +347,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doDrawPoly
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;III[I[IIZ)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;III[I[IIZ)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doDrawPoly
@@ -412,7 +412,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doFillRect
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doFillRect
@@ -445,7 +445,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doFillRoundRect
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doFillRoundRect
@@ -488,7 +488,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doFillOval
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doFillOval
@@ -555,7 +555,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doFillArc
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;IIIIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doFillArc
@@ -615,7 +615,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doFillPoly
- * Signature: (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;III[I[II)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;Ljava/awt/Composite;III[I[II)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_doFillPoly
@@ -680,7 +680,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    doShape
- * Signature:  (Lsun/java2d/SurfaceData;Lsun/java2d/pipe/Region;
+ * Signature:  (Lsun/java2d/windows/GDIWindowSurfaceData;Lsun/java2d/pipe/Region;
  *              Ljava/awt/Composite;IIILjava/awt/geom/Path2D.Float;Z)V
  */
 JNIEXPORT void JNICALL
@@ -863,7 +863,7 @@
 /*
  * Class:     sun_java2d_windows_GDIRenderer
  * Method:    devCopyArea
- * Signature: (Lsun/awt/windows/SurfaceData;IIIIII)V
+ * Signature: (Lsun/java2d/windows/GDIWindowSurfaceData;IIIIII)V
  */
 JNIEXPORT void JNICALL
 Java_sun_java2d_windows_GDIRenderer_devCopyArea