提交 33062477 编写于 作者: J jrose

Merge

...@@ -119,3 +119,6 @@ d80954a89b49fda47c0c5cace65a17f5a758b8bd jdk7-b139 ...@@ -119,3 +119,6 @@ d80954a89b49fda47c0c5cace65a17f5a758b8bd jdk7-b139
312612e89ece62633f4809706dec00bcd5fe7c2d jdk7-b142 312612e89ece62633f4809706dec00bcd5fe7c2d jdk7-b142
efbf75c24b0f31847c9c403f6dc07dc80551908d jdk7-b143 efbf75c24b0f31847c9c403f6dc07dc80551908d jdk7-b143
23bdcede4e3945894574892e80b848bd9f15b5f3 jdk7-b144 23bdcede4e3945894574892e80b848bd9f15b5f3 jdk7-b144
1e04b38b3824a4a1d197ef681a302e6813e53f8b jdk7-b145
539e576793a8e64aaf160e0d6ab0b9723cd0bef0 jdk7-b146
f097ca2434b1412b12ab4a5c2397ce271bf681e7 jdk7-b147
project=jdk7 project=jdk8
因为 它太大了无法显示 source diff 。你可以改为 查看blob
...@@ -48,6 +48,9 @@ include Exportedfiles.gmk ...@@ -48,6 +48,9 @@ include Exportedfiles.gmk
ifeq ($(PLATFORM), solaris) ifeq ($(PLATFORM), solaris)
OTHER_LDLIBS += -ldoor OTHER_LDLIBS += -ldoor
endif endif
ifeq ($(PLATFORM), windows)
EXTRA_LIBS += psapi.lib
endif
vpath %.c $(PLATFORM_SRC)/native/sun/tools/attach vpath %.c $(PLATFORM_SRC)/native/sun/tools/attach
......
...@@ -49,5 +49,21 @@ RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) ...@@ -49,5 +49,21 @@ RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX)
JRE_REDUCED_HEADLESS_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-headless-image JRE_REDUCED_HEADLESS_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-headless-image
JRE_REDUCED_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-image JRE_REDUCED_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-image
# Override on linux to further reduce binary/lib sizes in product build
ifeq ($(PLATFORM), linux)
ifeq ($(VARIANT), OPT)
ifneq ($(NO_STRIP), true)
ifneq ($(DEBUG_BINARIES), true)
POST_STRIP_PROCESS = $(STRIP) --strip-unneeded
endif
endif
endif
endif
# NIO Platform specific source file location
ifdef CROSS_COMPILE_ARCH
NIO_PLATFORM_CLASSES_ROOT_DIR = $(CLOSED_PLATFORM_SRC)/classes/
endif
endif # JAVASE_EMBEDDED endif # JAVASE_EMBEDDED
...@@ -53,25 +53,30 @@ $(NOT_HEADLESS_RT_JAR_LIST): $(NOT_RT_JAR_LIST) ...@@ -53,25 +53,30 @@ $(NOT_HEADLESS_RT_JAR_LIST): $(NOT_RT_JAR_LIST)
$(RM) $(HEADLESS_CLASSLIST) $(RM) $(HEADLESS_CLASSLIST)
$(RM) $(NOT_HEADLESS_RT_JAR_LIST) $(RM) $(NOT_HEADLESS_RT_JAR_LIST)
$(CP) $(NOT_RT_JAR_LIST) $(NOT_HEADLESS_RT_JAR_LIST) $(CP) $(NOT_RT_JAR_LIST) $(NOT_HEADLESS_RT_JAR_LIST)
# List all the packages to be excluded
$(ECHO) "sun/awt/motif/" >> $@ $(ECHO) "sun/awt/motif/" >> $@
$(ECHO) "sun/awt/X11/" >> $@ $(ECHO) "sun/awt/X11/" >> $@
$(ECHO) "sun/applet/" >> $@ $(ECHO) "sun/applet/" >> $@
$(ECHO) "sun/java2d/opengl/" >> $@ $(ECHO) "sun/java2d/opengl/" >> $@
$(ECHO) "com/sun/java/swing/plaf/" >> $@ $(ECHO) "com/sun/java/swing/plaf/" >> $@
$(ECHO) "sun/awt/motif/MFontConfiguration" >$(HEADLESS_CLASSLIST) # List all the individual classes to be included
$(ECHO) "sun/applet/AppContextCreator" >>$(HEADLESS_CLASSLIST) $(ECHO) "sun/awt/motif/MFontConfiguration.class" >$(HEADLESS_CLASSLIST)
$(ECHO) "sun/applet/AppletAudioClip" >>$(HEADLESS_CLASSLIST) $(ECHO) "sun/applet/AppContextCreator.class" >>$(HEADLESS_CLASSLIST)
$(ECHO) "sun/java2d/opengl/GLXSurfaceData" >>$(HEADLESS_CLASSLIST) $(ECHO) "sun/applet/AppletAudioClip.class" >>$(HEADLESS_CLASSLIST)
$(ECHO) "sun/java2d/opengl/GLXSurfaceData"\$$"GLXOffScreenSurfaceData" >>$(HEADLESS_CLASSLIST) $(ECHO) "sun/java2d/opengl/GLXSurfaceData.class" >>$(HEADLESS_CLASSLIST)
$(ECHO) "sun/java2d/opengl/GLXVolatileSurfaceManager" >>$(HEADLESS_CLASSLIST) $(ECHO) "sun/java2d/opengl/GLXSurfaceData"\$$"GLXOffScreenSurfaceData.class" >>$(HEADLESS_CLASSLIST)
$(ECHO) "sun/java2d/opengl/OGLSurfaceData" >>$(HEADLESS_CLASSLIST) $(ECHO) "sun/java2d/opengl/GLXVolatileSurfaceManager.class" >>$(HEADLESS_CLASSLIST)
$(ECHO) "sun/java2d/opengl/OGLSurfaceData.class" >>$(HEADLESS_CLASSLIST)
$(TOTAL_HEADLESS_JAR_FILELIST): $(JARREORDER_JARFILE) $(NOT_HEADLESS_RT_JAR_LIST) $(TOTAL_HEADLESS_JAR_FILELIST): $(JARREORDER_JARFILE) $(NOT_HEADLESS_RT_JAR_LIST)
$(prep-target) $(prep-target)
$(RM) $@.temp $(RM) $@.temp
$(CD) $(CLASSBINDIR) ; \ $(CD) $(CLASSBINDIR) ; \
$(BOOT_JAVA_CMD) -jar $(JARREORDER_JARFILE) \ $(BOOT_JAVA_CMD) -jar $(JARREORDER_JARFILE) \
-o $@.temp $(HEADLESS_CLASSLIST) $(NOT_HEADLESS_RT_JAR_LIST) . -o $@.temp - $(NOT_HEADLESS_RT_JAR_LIST) .
# Add on the explicitly included class files from the otherwise excluded packages
$(CAT) $(HEADLESS_CLASSLIST) >> $@.temp
$(MV) $@.temp $@ $(MV) $@.temp $@
@$(CD) $(CLASSBINDIR); $(java-vm-cleanup) @$(CD) $(CLASSBINDIR); $(java-vm-cleanup)
...@@ -124,13 +129,9 @@ NOT_REDUCEDJRE_LIB = \ ...@@ -124,13 +129,9 @@ NOT_REDUCEDJRE_LIB = \
$(LIBARCH)/libjavaplugin_nscp.so \ $(LIBARCH)/libjavaplugin_nscp.so \
$(LIBARCH)/libjavaplugin_oji.so $(LIBARCH)/libjavaplugin_oji.so
# JRE docs that don't get included in reduced jre image top directory
ifeq ($(PLATFORM), linux) NOT_REDUCEDJRE_DOC = \
STRIP_OPTS = --strip-unneeded Welcome.html
else
STRIP_OPTS = -x
endif
reduced-image-jre:: reduced-image-jre::
@$(ECHO) Starting to Produce Reduced JRE @$(ECHO) Starting to Produce Reduced JRE
...@@ -142,12 +143,6 @@ reduced-image-jre:: ...@@ -142,12 +143,6 @@ reduced-image-jre::
$(CD) $(JRE_IMAGE_DIR); \ $(CD) $(JRE_IMAGE_DIR); \
$(TAR) cf - . | ($(CD) $(JRE_REDUCED_IMAGE_DIR); $(TAR) xf - ); $(TAR) cf - . | ($(CD) $(JRE_REDUCED_IMAGE_DIR); $(TAR) xf - );
@# strip the main .so files
$(STRIP) $(STRIP_OPTS) $(JRE_REDUCED_IMAGE_DIR)/lib/$(LIBARCH)/client/libjvm.so
ifndef BUILD_CLIENT_ONLY
$(STRIP) $(STRIP_OPTS) $(JRE_REDUCED_IMAGE_DIR)/lib/$(LIBARCH)/server/libjvm.so
endif
@# @#
@# Remove all of the files that are not needed for the @# Remove all of the files that are not needed for the
@# reduced JRE @# reduced JRE
...@@ -158,6 +153,9 @@ endif ...@@ -158,6 +153,9 @@ endif
for l in $(NOT_REDUCEDJRE_LIB) ; do \ for l in $(NOT_REDUCEDJRE_LIB) ; do \
$(RM) $(JRE_REDUCED_IMAGE_DIR)/lib/$$l ; \ $(RM) $(JRE_REDUCED_IMAGE_DIR)/lib/$$l ; \
done done
for l in $(NOT_REDUCEDJRE_DOC) ; do \
$(RM) $(JRE_REDUCED_IMAGE_DIR)/$$l ; \
done
@# Remove misc. other files @# Remove misc. other files
$(RM) -r $(JRE_REDUCED_IMAGE_DIR)/man $(RM) -r $(JRE_REDUCED_IMAGE_DIR)/man
......
...@@ -900,8 +900,10 @@ initial-image-jdk-db: $(DB_ZIP_LIST) ...@@ -900,8 +900,10 @@ initial-image-jdk-db: $(DB_ZIP_LIST)
for d in $(DB_ZIP_LIST); do \ for d in $(DB_ZIP_LIST); do \
($(CD) $(JDK_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ ($(CD) $(JDK_IMAGE_DIR)/db && $(UNZIP) -o $$d); \
done done
$(CP) $(ABS_DB_PATH)/README-JDK.html $(JDK_IMAGE_DIR)/db
$(RM) -rf $(DEMODIR)/db $(RM) -rf $(DEMODIR)/db
$(MV) $(JDK_IMAGE_DIR)/db/demo $(DEMODIR)/db $(MV) $(JDK_IMAGE_DIR)/db/demo $(DEMODIR)/db
$(CP) $(ABS_DB_PATH)/README-JDK-DEMOS.html $(DEMODIR)/db/
$(RM) $(JDK_IMAGE_DIR)/db/index.html $(JDK_IMAGE_DIR)/db/register.html $(RM) $(JDK_IMAGE_DIR)/db/index.html $(JDK_IMAGE_DIR)/db/register.html
endif endif
......
...@@ -195,8 +195,8 @@ ifndef JDK_MAJOR_VERSION ...@@ -195,8 +195,8 @@ ifndef JDK_MAJOR_VERSION
endif endif
ifndef JDK_MINOR_VERSION ifndef JDK_MINOR_VERSION
JDK_MINOR_VERSION = 7 JDK_MINOR_VERSION = 8
PREVIOUS_MINOR_VERSION = 6 PREVIOUS_MINOR_VERSION = 7
endif endif
ifndef JDK_MICRO_VERSION ifndef JDK_MICRO_VERSION
......
...@@ -223,6 +223,9 @@ endif ...@@ -223,6 +223,9 @@ endif
ifeq ($(JDK_MINOR_VERSION),6) ifeq ($(JDK_MINOR_VERSION),6)
JDK_IS_FCS = true JDK_IS_FCS = true
endif endif
ifeq ($(JDK_MINOR_VERSION),7)
JDK_IS_FCS = true
endif
ifeq ($(JDK_IS_FCS),false) ifeq ($(JDK_IS_FCS),false)
ifneq ($(MILESTONE), fcs) ifneq ($(MILESTONE), fcs)
DRAFT_HEADER = <br><strong>DRAFT&nbsp;$(MILESTONE)-$(BUILD_NUMBER)</strong> DRAFT_HEADER = <br><strong>DRAFT&nbsp;$(MILESTONE)-$(BUILD_NUMBER)</strong>
......
...@@ -820,14 +820,19 @@ $(TEMPDIR)/$(GENSOR_SRC) : $(GENSOR_SRC) ...@@ -820,14 +820,19 @@ $(TEMPDIR)/$(GENSOR_SRC) : $(GENSOR_SRC)
$(GENSOR_EXE) : $(TEMPDIR)/$(GENSOR_SRC) $(GENSOR_EXE) : $(TEMPDIR)/$(GENSOR_SRC)
$(prep-target) $(prep-target)
($(CD) $(TEMPDIR); $(HOST_CC) $(CPPFLAGS) $(LDDFLAGS) \ ($(CD) $(TEMPDIR); $(CC) $(CPPFLAGS) $(LDDFLAGS) \
-o genSocketOptionRegistry$(EXE_SUFFIX) $(GENSOR_SRC)) -o genSocketOptionRegistry$(EXE_SUFFIX) $(GENSOR_SRC))
ifdef NIO_PLATFORM_CLASSES_ROOT_DIR
$(SCH_GEN)/SocketOptionRegistry.java: $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/ch/SocketOptionRegistry-$(PLATFORM)-$(ARCH).java
$(prep-target)
$(CP) $< $@
else
$(SCH_GEN)/SocketOptionRegistry.java: $(GENSOR_EXE) $(SCH_GEN)/SocketOptionRegistry.java: $(GENSOR_EXE)
$(prep-target) $(prep-target)
NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@ NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@
$(GENSOR_EXE) >> $@ $(GENSOR_EXE) >> $@
endif
# #
# Generated sun.nio.cs SingleByte classes # Generated sun.nio.cs SingleByte classes
# #
...@@ -851,12 +856,18 @@ GENUC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENUC_SRC) | \ ...@@ -851,12 +856,18 @@ GENUC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENUC_SRC) | \
$(GENUC_EXE) : $(GENUC_SRC) $(GENUC_EXE) : $(GENUC_SRC)
$(prep-target) $(prep-target)
$(HOST_CC) $(CPPFLAGS) -o $@ $(GENUC_SRC) $(CC) $(CPPFLAGS) -o $@ $(GENUC_SRC)
ifdef NIO_PLATFORM_CLASSES_ROOT_DIR
$(SFS_GEN)/UnixConstants.java: $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/fs/UnixConstants-$(PLATFORM)-$(ARCH).java
$(prep-target)
$(CP) $< $@
else
$(SFS_GEN)/UnixConstants.java: $(GENUC_EXE) $(SFS_GEN)/UnixConstants.java: $(GENUC_EXE)
$(prep-target) $(prep-target)
NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(GENUC_COPYRIGHT_YEARS)" > $@ NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(GENUC_COPYRIGHT_YEARS)" > $@
$(GENUC_EXE) >> $@ $(GENUC_EXE) >> $@
endif
GENSC_SRC = $(PLATFORM_SRC)/native/sun/nio/fs/genSolarisConstants.c GENSC_SRC = $(PLATFORM_SRC)/native/sun/nio/fs/genSolarisConstants.c
...@@ -867,11 +878,17 @@ GENSC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSC_SRC) | \ ...@@ -867,11 +878,17 @@ GENSC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSC_SRC) | \
$(GENSC_EXE) : $(GENSC_SRC) $(GENSC_EXE) : $(GENSC_SRC)
$(prep-target) $(prep-target)
$(HOST_CC) $(CPPFLAGS) -o $@ $(GENSC_SRC) $(CC) $(CPPFLAGS) -o $@ $(GENSC_SRC)
ifdef NIO_PLATFORM_CLASSES_ROOT_DIR
$(SFS_GEN)/SolarisConstants.java: $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/fs/SolarisConstants-$(PLATFORM)-$(ARCH).java
$(prep-target)
$(CP) $< $@
else
$(SFS_GEN)/SolarisConstants.java: $(GENSC_EXE) $(SFS_GEN)/SolarisConstants.java: $(GENSC_EXE)
$(prep-target) $(prep-target)
NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(GENSC_COPYRIGHT_YEARS)" > $@ NAWK="$(NAWK)" SH="$(SH)" $(SH) -e addNotices.sh "$(GENSC_COPYRIGHT_YEARS)" > $@
$(GENSC_EXE) >> $@ $(GENSC_EXE) >> $@
endif
.PHONY: sources .PHONY: sources
...@@ -370,8 +370,7 @@ $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ ...@@ -370,8 +370,7 @@ $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \
CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto
release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \ release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/README.txt
$(CLOSED_DIR)/doc/README.txt
$(RM) -r \ $(RM) -r \
$(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \ $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \
$(JCE_BUILD_DIR)/release/jce.jar \ $(JCE_BUILD_DIR)/release/jce.jar \
...@@ -387,7 +386,6 @@ release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \ ...@@ -387,7 +386,6 @@ release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \
$(CP) \ $(CP) \
$(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \
$(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \
$(CLOSED_DIR)/doc/COPYRIGHT.html \
$(CLOSED_DIR)/doc/README.txt \ $(CLOSED_DIR)/doc/README.txt \
$(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy
cd $(JCE_BUILD_DIR)/release ; \ cd $(JCE_BUILD_DIR)/release ; \
......
...@@ -147,7 +147,7 @@ OTHER_INCLUDES += \ ...@@ -147,7 +147,7 @@ OTHER_INCLUDES += \
# Rules # Rules
# #
CLASSDESTDIR = $(TEMPDIR)/classes CLASSDESTDIR = $(TEMPDIR)/classes
JAVAHFLAGS += -classpath $(CLASSDESTDIR) JAVAHFLAGS += -Xbootclasspath/p:$(CLASSDESTDIR)
include $(BUILDDIR)/common/Mapfile-vers.gmk include $(BUILDDIR)/common/Mapfile-vers.gmk
......
...@@ -174,8 +174,11 @@ class GTKFileChooserUI extends SynthFileChooserUI { ...@@ -174,8 +174,11 @@ class GTKFileChooserUI extends SynthFileChooserUI {
// construct the resulting string // construct the resulting string
for (int i=0; i<len; i++) { for (int i=0; i<len; i++) {
if (i > 0) {
buf.append(" ");
}
if (len > 1) { if (len > 1) {
buf.append(" \""); buf.append("\"");
} }
buf.append(result.get(i)); buf.append(result.get(i));
if (len > 1) { if (len > 1) {
......
...@@ -56,9 +56,9 @@ FileChooser.deleteFileButtonMnemonic=76 ...@@ -56,9 +56,9 @@ FileChooser.deleteFileButtonMnemonic=76
FileChooser.renameFileButtonText=Rename File FileChooser.renameFileButtonText=Rename File
FileChooser.renameFileButtonMnemonic=82 FileChooser.renameFileButtonMnemonic=82
FileChooser.cancelButtonText=Cancel FileChooser.cancelButtonText=Cancel
#FileChooser.cancelButtonMnemonic=67 FileChooser.cancelButtonMnemonic=67
FileChooser.saveButtonText=OK FileChooser.saveButtonText=OK
#FileChooser.saveButtonMnemonic=79 FileChooser.saveButtonMnemonic=79
FileChooser.openButtonText=OK FileChooser.openButtonText=OK
FileChooser.openButtonMnemonic=79 FileChooser.openButtonMnemonic=79
FileChooser.saveDialogTitleText=Save FileChooser.saveDialogTitleText=Save
...@@ -79,5 +79,5 @@ FileChooser.renameFileDialogText=Rename file "{0}" to ...@@ -79,5 +79,5 @@ FileChooser.renameFileDialogText=Rename file "{0}" to
FileChooser.renameFileErrorTitle=Error FileChooser.renameFileErrorTitle=Error
FileChooser.renameFileErrorText=Error renaming file "{0}" to "{1}" FileChooser.renameFileErrorText=Error renaming file "{0}" to "{1}"
#OptionPane.okButtonMnemonic=79 OptionPane.okButtonMnemonic=79
#OptionPane.cancelButtonMnemonic=67 OptionPane.cancelButtonMnemonic=67
...@@ -1857,7 +1857,7 @@ public abstract class Toolkit { ...@@ -1857,7 +1857,7 @@ public abstract class Toolkit {
/** /**
* Adds the specified property change listener for the named desktop * Adds the specified property change listener for the named desktop
* property. When a {@link PropertyChangeListenerProxy} object is added, * property. When a {@link java.beans.PropertyChangeListenerProxy} object is added,
* its property name is ignored, and the wrapped listener is added. * its property name is ignored, and the wrapped listener is added.
* If {@code name} is {@code null} or {@code pcl} is {@code null}, * If {@code name} is {@code null} or {@code pcl} is {@code null},
* no exception is thrown and no action is performed. * no exception is thrown and no action is performed.
...@@ -1874,7 +1874,7 @@ public abstract class Toolkit { ...@@ -1874,7 +1874,7 @@ public abstract class Toolkit {
/** /**
* Removes the specified property change listener for the named * Removes the specified property change listener for the named
* desktop property. When a {@link PropertyChangeListenerProxy} object * desktop property. When a {@link java.beans.PropertyChangeListenerProxy} object
* is removed, its property name is ignored, and * is removed, its property name is ignored, and
* the wrapped listener is removed. * the wrapped listener is removed.
* If {@code name} is {@code null} or {@code pcl} is {@code null}, * If {@code name} is {@code null} or {@code pcl} is {@code null},
...@@ -1893,11 +1893,11 @@ public abstract class Toolkit { ...@@ -1893,11 +1893,11 @@ public abstract class Toolkit {
/** /**
* Returns an array of all the property change listeners * Returns an array of all the property change listeners
* registered on this toolkit. The returned array * registered on this toolkit. The returned array
* contains {@code PropertyChangeListenerProxy} objects * contains {@link java.beans.PropertyChangeListenerProxy} objects
* that associate listeners with the names of desktop properties. * that associate listeners with the names of desktop properties.
* *
* @return all of this toolkit's {@ code PropertyChangeListener} * @return all of this toolkit's {@link PropertyChangeListener}
* objects wrapped in {@code PropertyChangeListenerProxy} objects * objects wrapped in {@code java.beans.PropertyChangeListenerProxy} objects
* or an empty array if no listeners are added * or an empty array if no listeners are added
* *
* @see PropertyChangeSupport#getPropertyChangeListeners() * @see PropertyChangeSupport#getPropertyChangeListeners()
......
...@@ -1382,13 +1382,19 @@ public class ICC_Profile implements Serializable { ...@@ -1382,13 +1382,19 @@ public class ICC_Profile implements Serializable {
/** /**
* Sets a particular tagged data element in the profile from * Sets a particular tagged data element in the profile from
* a byte array. This method is useful * a byte array. The array should contain data in a format, corresponded
* for advanced applets or applications which need to access * to the {@code tagSignature} as defined in the ICC specification, section 10.
* profile data directly. * This method is useful for advanced applets or applications which need to
* access profile data directly.
* *
* @param tagSignature The ICC tag signature for the data element * @param tagSignature The ICC tag signature for the data element
* you want to set. * you want to set.
* @param tagData the data to set for the specified tag signature * @param tagData the data to set for the specified tag signature
* @throws IllegalArgumentException if {@code tagSignature} is not a signature
* as defined in the ICC specification.
* @throws IllegalArgumentException if a content of the {@code tagData}
* array can not be interpreted as valid tag data, corresponding
* to the {@code tagSignature}.
* @see #getData * @see #getData
*/ */
public void setData(int tagSignature, byte[] tagData) { public void setData(int tagSignature, byte[] tagData) {
......
/* /*
* Copyright (c) 1996, 2009, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -324,40 +324,45 @@ public final class Byte extends Number implements Comparable<Byte> { ...@@ -324,40 +324,45 @@ public final class Byte extends Number implements Comparable<Byte> {
} }
/** /**
* Returns the value of this {@code Byte} as a * Returns the value of this {@code Byte} as a {@code short} after
* {@code short}. * a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public short shortValue() { public short shortValue() {
return (short)value; return (short)value;
} }
/** /**
* Returns the value of this {@code Byte} as an * Returns the value of this {@code Byte} as an {@code int} after
* {@code int}. * a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public int intValue() { public int intValue() {
return (int)value; return (int)value;
} }
/** /**
* Returns the value of this {@code Byte} as a * Returns the value of this {@code Byte} as a {@code long} after
* {@code long}. * a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public long longValue() { public long longValue() {
return (long)value; return (long)value;
} }
/** /**
* Returns the value of this {@code Byte} as a * Returns the value of this {@code Byte} as a {@code float} after
* {@code float}. * a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public float floatValue() { public float floatValue() {
return (float)value; return (float)value;
} }
/** /**
* Returns the value of this {@code Byte} as a * Returns the value of this {@code Byte} as a {@code double}
* {@code double}. * after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public double doubleValue() { public double doubleValue() {
return (double)value; return (double)value;
......
/* /*
* Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -634,11 +634,12 @@ public final class Double extends Number implements Comparable<Double> { ...@@ -634,11 +634,12 @@ public final class Double extends Number implements Comparable<Double> {
} }
/** /**
* Returns the value of this {@code Double} as a {@code byte} (by * Returns the value of this {@code Double} as a {@code byte}
* casting to a {@code byte}). * after a narrowing primitive conversion.
* *
* @return the {@code double} value represented by this object * @return the {@code double} value represented by this object
* converted to type {@code byte} * converted to type {@code byte}
* @jls 5.1.3 Narrowing Primitive Conversions
* @since JDK1.1 * @since JDK1.1
*/ */
public byte byteValue() { public byte byteValue() {
...@@ -646,11 +647,12 @@ public final class Double extends Number implements Comparable<Double> { ...@@ -646,11 +647,12 @@ public final class Double extends Number implements Comparable<Double> {
} }
/** /**
* Returns the value of this {@code Double} as a * Returns the value of this {@code Double} as a {@code short}
* {@code short} (by casting to a {@code short}). * after a narrowing primitive conversion.
* *
* @return the {@code double} value represented by this object * @return the {@code double} value represented by this object
* converted to type {@code short} * converted to type {@code short}
* @jls 5.1.3 Narrowing Primitive Conversions
* @since JDK1.1 * @since JDK1.1
*/ */
public short shortValue() { public short shortValue() {
...@@ -658,8 +660,9 @@ public final class Double extends Number implements Comparable<Double> { ...@@ -658,8 +660,9 @@ public final class Double extends Number implements Comparable<Double> {
} }
/** /**
* Returns the value of this {@code Double} as an * Returns the value of this {@code Double} as an {@code int}
* {@code int} (by casting to type {@code int}). * after a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
* *
* @return the {@code double} value represented by this object * @return the {@code double} value represented by this object
* converted to type {@code int} * converted to type {@code int}
...@@ -669,22 +672,24 @@ public final class Double extends Number implements Comparable<Double> { ...@@ -669,22 +672,24 @@ public final class Double extends Number implements Comparable<Double> {
} }
/** /**
* Returns the value of this {@code Double} as a * Returns the value of this {@code Double} as a {@code long}
* {@code long} (by casting to type {@code long}). * after a narrowing primitive conversion.
* *
* @return the {@code double} value represented by this object * @return the {@code double} value represented by this object
* converted to type {@code long} * converted to type {@code long}
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public long longValue() { public long longValue() {
return (long)value; return (long)value;
} }
/** /**
* Returns the {@code float} value of this * Returns the value of this {@code Double} as a {@code float}
* {@code Double} object. * after a narrowing primitive conversion.
* *
* @return the {@code double} value represented by this object * @return the {@code double} value represented by this object
* converted to type {@code float} * converted to type {@code float}
* @jls 5.1.3 Narrowing Primitive Conversions
* @since JDK1.0 * @since JDK1.0
*/ */
public float floatValue() { public float floatValue() {
...@@ -692,8 +697,7 @@ public final class Double extends Number implements Comparable<Double> { ...@@ -692,8 +697,7 @@ public final class Double extends Number implements Comparable<Double> {
} }
/** /**
* Returns the {@code double} value of this * Returns the {@code double} value of this {@code Double} object.
* {@code Double} object.
* *
* @return the {@code double} value represented by this object * @return the {@code double} value represented by this object
*/ */
......
/* /*
* Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -556,22 +556,24 @@ public final class Float extends Number implements Comparable<Float> { ...@@ -556,22 +556,24 @@ public final class Float extends Number implements Comparable<Float> {
} }
/** /**
* Returns the value of this {@code Float} as a {@code byte} (by * Returns the value of this {@code Float} as a {@code byte} after
* casting to a {@code byte}). * a narrowing primitive conversion.
* *
* @return the {@code float} value represented by this object * @return the {@code float} value represented by this object
* converted to type {@code byte} * converted to type {@code byte}
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public byte byteValue() { public byte byteValue() {
return (byte)value; return (byte)value;
} }
/** /**
* Returns the value of this {@code Float} as a {@code short} (by * Returns the value of this {@code Float} as a {@code short}
* casting to a {@code short}). * after a narrowing primitive conversion.
* *
* @return the {@code float} value represented by this object * @return the {@code float} value represented by this object
* converted to type {@code short} * converted to type {@code short}
* @jls 5.1.3 Narrowing Primitive Conversions
* @since JDK1.1 * @since JDK1.1
*/ */
public short shortValue() { public short shortValue() {
...@@ -579,22 +581,24 @@ public final class Float extends Number implements Comparable<Float> { ...@@ -579,22 +581,24 @@ public final class Float extends Number implements Comparable<Float> {
} }
/** /**
* Returns the value of this {@code Float} as an {@code int} (by * Returns the value of this {@code Float} as an {@code int} after
* casting to type {@code int}). * a narrowing primitive conversion.
* *
* @return the {@code float} value represented by this object * @return the {@code float} value represented by this object
* converted to type {@code int} * converted to type {@code int}
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public int intValue() { public int intValue() {
return (int)value; return (int)value;
} }
/** /**
* Returns value of this {@code Float} as a {@code long} (by * Returns value of this {@code Float} as a {@code long} after a
* casting to type {@code long}). * narrowing primitive conversion.
* *
* @return the {@code float} value represented by this object * @return the {@code float} value represented by this object
* converted to type {@code long} * converted to type {@code long}
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public long longValue() { public long longValue() {
return (long)value; return (long)value;
...@@ -610,11 +614,12 @@ public final class Float extends Number implements Comparable<Float> { ...@@ -610,11 +614,12 @@ public final class Float extends Number implements Comparable<Float> {
} }
/** /**
* Returns the {@code double} value of this {@code Float} object. * Returns the value of this {@code Float} as a {@code double}
* after a widening primitive conversion.
* *
* @return the {@code float} value represented by this * @return the {@code float} value represented by this
* object is converted to type {@code double} and the * object converted to type {@code double}
* result of the conversion is returned. * @jls 5.1.2 Widening Primitive Conversions
*/ */
public double doubleValue() { public double doubleValue() {
return (double)value; return (double)value;
......
/* /*
* Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -678,16 +678,18 @@ public final class Integer extends Number implements Comparable<Integer> { ...@@ -678,16 +678,18 @@ public final class Integer extends Number implements Comparable<Integer> {
} }
/** /**
* Returns the value of this {@code Integer} as a * Returns the value of this {@code Integer} as a {@code byte}
* {@code byte}. * after a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public byte byteValue() { public byte byteValue() {
return (byte)value; return (byte)value;
} }
/** /**
* Returns the value of this {@code Integer} as a * Returns the value of this {@code Integer} as a {@code short}
* {@code short}. * after a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public short shortValue() { public short shortValue() {
return (short)value; return (short)value;
...@@ -702,24 +704,27 @@ public final class Integer extends Number implements Comparable<Integer> { ...@@ -702,24 +704,27 @@ public final class Integer extends Number implements Comparable<Integer> {
} }
/** /**
* Returns the value of this {@code Integer} as a * Returns the value of this {@code Integer} as a {@code long}
* {@code long}. * after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public long longValue() { public long longValue() {
return (long)value; return (long)value;
} }
/** /**
* Returns the value of this {@code Integer} as a * Returns the value of this {@code Integer} as a {@code float}
* {@code float}. * after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public float floatValue() { public float floatValue() {
return (float)value; return (float)value;
} }
/** /**
* Returns the value of this {@code Integer} as a * Returns the value of this {@code Integer} as a {@code double}
* {@code double}. * after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public double doubleValue() { public double doubleValue() {
return (double)value; return (double)value;
......
/* /*
* Copyright (c) 1994, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -703,24 +703,27 @@ public final class Long extends Number implements Comparable<Long> { ...@@ -703,24 +703,27 @@ public final class Long extends Number implements Comparable<Long> {
} }
/** /**
* Returns the value of this {@code Long} as a * Returns the value of this {@code Long} as a {@code byte} after
* {@code byte}. * a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public byte byteValue() { public byte byteValue() {
return (byte)value; return (byte)value;
} }
/** /**
* Returns the value of this {@code Long} as a * Returns the value of this {@code Long} as a {@code short} after
* {@code short}. * a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public short shortValue() { public short shortValue() {
return (short)value; return (short)value;
} }
/** /**
* Returns the value of this {@code Long} as an * Returns the value of this {@code Long} as an {@code int} after
* {@code int}. * a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public int intValue() { public int intValue() {
return (int)value; return (int)value;
...@@ -735,16 +738,18 @@ public final class Long extends Number implements Comparable<Long> { ...@@ -735,16 +738,18 @@ public final class Long extends Number implements Comparable<Long> {
} }
/** /**
* Returns the value of this {@code Long} as a * Returns the value of this {@code Long} as a {@code float} after
* {@code float}. * a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public float floatValue() { public float floatValue() {
return (float)value; return (float)value;
} }
/** /**
* Returns the value of this {@code Long} as a * Returns the value of this {@code Long} as a {@code double}
* {@code double}. * after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public double doubleValue() { public double doubleValue() {
return (double)value; return (double)value;
......
/* /*
* Copyright (c) 1994, 2001, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,69 +26,78 @@ ...@@ -26,69 +26,78 @@
package java.lang; package java.lang;
/** /**
* The abstract class <code>Number</code> is the superclass of classes * The abstract class {@code Number} is the superclass of platform
* <code>BigDecimal</code>, <code>BigInteger</code>, * classes representing numeric values that are convertible to the
* <code>Byte</code>, <code>Double</code>, <code>Float</code>, * primitive types {@code byte}, {@code double}, {@code float}, {@code
* <code>Integer</code>, <code>Long</code>, and <code>Short</code>. * int}, {@code long}, and {@code short}.
* <p> *
* Subclasses of <code>Number</code> must provide methods to convert * The specific semantics of the conversion from the numeric value of
* the represented numeric value to <code>byte</code>, <code>double</code>, * a particular {@code Number} implementation to a given primitive
* <code>float</code>, <code>int</code>, <code>long</code>, and * type is defined by the {@code Number} implementation in question.
* <code>short</code>. *
* For platform classes, the conversion is often analogous to a
* narrowing primitive conversion or a widening primitive conversion
* as defining in <cite>The Java&trade; Language Specification</cite>
* for converting between primitive types. Therefore, conversions may
* lose information about the overall magnitude of a numeric value, may
* lose precision, and may even return a result of a different sign
* than the input.
*
* See the documentation of a given {@code Number} implementation for
* conversion details.
* *
* @author Lee Boynton * @author Lee Boynton
* @author Arthur van Hoff * @author Arthur van Hoff
* @see java.lang.Byte * @jls 5.1.2 Widening Primitive Conversions
* @see java.lang.Double * @jls 5.1.3 Narrowing Primitive Conversions
* @see java.lang.Float
* @see java.lang.Integer
* @see java.lang.Long
* @see java.lang.Short
* @since JDK1.0 * @since JDK1.0
*/ */
public abstract class Number implements java.io.Serializable { public abstract class Number implements java.io.Serializable {
/** /**
* Returns the value of the specified number as an <code>int</code>. * Returns the value of the specified number as an {@code int},
* This may involve rounding or truncation. * which may involve rounding or truncation.
* *
* @return the numeric value represented by this object after conversion * @return the numeric value represented by this object after conversion
* to type <code>int</code>. * to type {@code int}.
*/ */
public abstract int intValue(); public abstract int intValue();
/** /**
* Returns the value of the specified number as a <code>long</code>. * Returns the value of the specified number as a {@code long},
* This may involve rounding or truncation. * which may involve rounding or truncation.
* *
* @return the numeric value represented by this object after conversion * @return the numeric value represented by this object after conversion
* to type <code>long</code>. * to type {@code long}.
*/ */
public abstract long longValue(); public abstract long longValue();
/** /**
* Returns the value of the specified number as a <code>float</code>. * Returns the value of the specified number as a {@code float},
* This may involve rounding. * which may involve rounding.
* *
* @return the numeric value represented by this object after conversion * @return the numeric value represented by this object after conversion
* to type <code>float</code>. * to type {@code float}.
*/ */
public abstract float floatValue(); public abstract float floatValue();
/** /**
* Returns the value of the specified number as a <code>double</code>. * Returns the value of the specified number as a {@code double},
* This may involve rounding. * which may involve rounding.
* *
* @return the numeric value represented by this object after conversion * @return the numeric value represented by this object after conversion
* to type <code>double</code>. * to type {@code double}.
*/ */
public abstract double doubleValue(); public abstract double doubleValue();
/** /**
* Returns the value of the specified number as a <code>byte</code>. * Returns the value of the specified number as a {@code byte},
* This may involve rounding or truncation. * which may involve rounding or truncation.
*
* <p>This implementation returns the result of {@link #intValue} cast
* to a {@code byte}.
* *
* @return the numeric value represented by this object after conversion * @return the numeric value represented by this object after conversion
* to type <code>byte</code>. * to type {@code byte}.
* @since JDK1.1 * @since JDK1.1
*/ */
public byte byteValue() { public byte byteValue() {
...@@ -96,11 +105,14 @@ public abstract class Number implements java.io.Serializable { ...@@ -96,11 +105,14 @@ public abstract class Number implements java.io.Serializable {
} }
/** /**
* Returns the value of the specified number as a <code>short</code>. * Returns the value of the specified number as a {@code short},
* This may involve rounding or truncation. * which may involve rounding or truncation.
*
* <p>This implementation returns the result of {@link #intValue} cast
* to a {@code short}.
* *
* @return the numeric value represented by this object after conversion * @return the numeric value represented by this object after conversion
* to type <code>short</code>. * to type {@code short}.
* @since JDK1.1 * @since JDK1.1
*/ */
public short shortValue() { public short shortValue() {
......
/* /*
* Copyright (c) 1996, 2009, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -321,8 +321,9 @@ public final class Short extends Number implements Comparable<Short> { ...@@ -321,8 +321,9 @@ public final class Short extends Number implements Comparable<Short> {
} }
/** /**
* Returns the value of this {@code Short} as a * Returns the value of this {@code Short} as a {@code byte} after
* {@code byte}. * a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
*/ */
public byte byteValue() { public byte byteValue() {
return (byte)value; return (byte)value;
...@@ -337,32 +338,36 @@ public final class Short extends Number implements Comparable<Short> { ...@@ -337,32 +338,36 @@ public final class Short extends Number implements Comparable<Short> {
} }
/** /**
* Returns the value of this {@code Short} as an * Returns the value of this {@code Short} as an {@code int} after
* {@code int}. * a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public int intValue() { public int intValue() {
return (int)value; return (int)value;
} }
/** /**
* Returns the value of this {@code Short} as a * Returns the value of this {@code Short} as a {@code long} after
* {@code long}. * a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public long longValue() { public long longValue() {
return (long)value; return (long)value;
} }
/** /**
* Returns the value of this {@code Short} as a * Returns the value of this {@code Short} as a {@code float}
* {@code float}. * after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public float floatValue() { public float floatValue() {
return (float)value; return (float)value;
} }
/** /**
* Returns the value of this {@code Short} as a * Returns the value of this {@code Short} as a {@code double}
* {@code double}. * after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/ */
public double doubleValue() { public double doubleValue() {
return (double)value; return (double)value;
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -41,21 +41,23 @@ package java.lang.annotation; ...@@ -41,21 +41,23 @@ package java.lang.annotation;
public class IncompleteAnnotationException extends RuntimeException { public class IncompleteAnnotationException extends RuntimeException {
private static final long serialVersionUID = 8445097402741811912L; private static final long serialVersionUID = 8445097402741811912L;
private Class annotationType; private Class<? extends Annotation> annotationType;
private String elementName; private String elementName;
/** /**
* Constructs an IncompleteAnnotationException to indicate that * Constructs an IncompleteAnnotationException to indicate that
* the named element was missing from the specified annotation type. * the named element was missing from the specified annotation type.
* *
* @param annotationType the Class object for the annotation type * @param annotationType the Class object for the annotation type
* @param elementName the name of the missing element * @param elementName the name of the missing element
* @throws NullPointerException if either parameter is {@code null}
*/ */
public IncompleteAnnotationException( public IncompleteAnnotationException(
Class<? extends Annotation> annotationType, Class<? extends Annotation> annotationType,
String elementName) { String elementName) {
super(annotationType.getName() + " missing element " + elementName); super(annotationType.getName().toString() +
" missing element " +
elementName.toString());
this.annotationType = annotationType; this.annotationType = annotationType;
this.elementName = elementName; this.elementName = elementName;
......
...@@ -405,13 +405,13 @@ class AdapterMethodHandle extends BoundMethodHandle { ...@@ -405,13 +405,13 @@ class AdapterMethodHandle extends BoundMethodHandle {
insertStackMove(stackMove) insertStackMove(stackMove)
); );
} }
private static long makeSwapConv(int convOp, int srcArg, byte type, int destSlot) { private static long makeSwapConv(int convOp, int srcArg, byte srcType, int destSlot, byte destType) {
// more complex argument motion, requiring two slots to specify // more complex argument motion, requiring two slots to specify
assert(convOp == OP_SWAP_ARGS || convOp == OP_ROT_ARGS); assert(convOp == OP_SWAP_ARGS || convOp == OP_ROT_ARGS);
return ((long) srcArg << 32 | return ((long) srcArg << 32 |
(long) convOp << CONV_OP_SHIFT | (long) convOp << CONV_OP_SHIFT |
(int) type << CONV_SRC_TYPE_SHIFT | (int) srcType << CONV_SRC_TYPE_SHIFT |
(int) type << CONV_DEST_TYPE_SHIFT | (int) destType << CONV_DEST_TYPE_SHIFT |
(int) destSlot << CONV_VMINFO_SHIFT (int) destSlot << CONV_VMINFO_SHIFT
); );
} }
...@@ -943,24 +943,27 @@ class AdapterMethodHandle extends BoundMethodHandle { ...@@ -943,24 +943,27 @@ class AdapterMethodHandle extends BoundMethodHandle {
if (type2size(newType.parameterType(swapArg1)) != if (type2size(newType.parameterType(swapArg1)) !=
type2size(newType.parameterType(swapArg2))) { type2size(newType.parameterType(swapArg2))) {
// turn a swap into a pair of rotates: // turn a swap into a pair of rotates:
// [x a b c y] => [a b c y x] => [y a b c x] // [x a b c y] rot2(-1,argc=5) => [a b c y x] rot1(+1,argc=4) => target[y a b c x]
int argc = swapArg2 - swapArg1 + 1; int argc = swapArg2 - swapArg1 + 1;
final int ROT = 1; final int ROT = 1;
ArrayList<Class<?>> rot1Params = new ArrayList<Class<?>>(target.type().parameterList()); ArrayList<Class<?>> rot1Params = new ArrayList<Class<?>>(target.type().parameterList());
Collections.rotate(rot1Params.subList(swapArg1, swapArg1 + argc), -ROT); Collections.rotate(rot1Params.subList(swapArg1, swapArg1 + argc), -ROT);
MethodType rot1Type = MethodType.methodType(target.type().returnType(), rot1Params); MethodType rot1Type = MethodType.methodType(target.type().returnType(), rot1Params);
MethodHandle rot1 = makeRotateArguments(rot1Type, target, swapArg1, argc, +ROT); MethodHandle rot1 = makeRotateArguments(rot1Type, target, swapArg1, argc, +ROT);
assert(rot1 != null);
if (argc == 2) return rot1; if (argc == 2) return rot1;
MethodHandle rot2 = makeRotateArguments(newType, rot1, swapArg1, argc-1, -ROT); MethodHandle rot2 = makeRotateArguments(newType, rot1, swapArg1, argc-1, -ROT);
assert(rot2 != null);
return rot2; return rot2;
} }
if (!canSwapArguments(newType, target.type(), swapArg1, swapArg2)) if (!canSwapArguments(newType, target.type(), swapArg1, swapArg2))
return null; return null;
Class<?> swapType = newType.parameterType(swapArg1); Class<?> type1 = newType.parameterType(swapArg1);
Class<?> type2 = newType.parameterType(swapArg2);
// in arglist: [0: ...keep1 | pos1: a1 | pos1+1: keep2... | pos2: a2 | pos2+1: keep3... ] // in arglist: [0: ...keep1 | pos1: a1 | pos1+1: keep2... | pos2: a2 | pos2+1: keep3... ]
// out arglist: [0: ...keep1 | pos1: a2 | pos1+1: keep2... | pos2: a1 | pos2+1: keep3... ] // out arglist: [0: ...keep1 | pos1: a2 | pos1+1: keep2... | pos2: a1 | pos2+1: keep3... ]
int swapSlot2 = newType.parameterSlotDepth(swapArg2 + 1); int swapSlot2 = newType.parameterSlotDepth(swapArg2 + 1);
long conv = makeSwapConv(OP_SWAP_ARGS, swapArg1, basicType(swapType), swapSlot2); long conv = makeSwapConv(OP_SWAP_ARGS, swapArg1, basicType(type1), swapSlot2, basicType(type2));
return new AdapterMethodHandle(target, newType, conv); return new AdapterMethodHandle(target, newType, conv);
} }
...@@ -1029,16 +1032,16 @@ class AdapterMethodHandle extends BoundMethodHandle { ...@@ -1029,16 +1032,16 @@ class AdapterMethodHandle extends BoundMethodHandle {
assert(MAX_ARG_ROTATION == 1); assert(MAX_ARG_ROTATION == 1);
int srcArg, dstArg; int srcArg, dstArg;
int dstSlot; int dstSlot;
byte basicType; int moveChunk;
if (chunk2Slots <= chunk1Slots) { if (rotateBy == 1) {
// Rotate right/down N (rotateBy = +N, N small, c2 small): // Rotate right/down N (rotateBy = +N, N small, c2 small):
// in arglist: [0: ...keep1 | arg1: c1... | limit-N: c2 | limit: keep2... ] // in arglist: [0: ...keep1 | arg1: c1... | limit-N: c2 | limit: keep2... ]
// out arglist: [0: ...keep1 | arg1: c2 | arg1+N: c1... | limit: keep2... ] // out arglist: [0: ...keep1 | arg1: c2 | arg1+N: c1... | limit: keep2... ]
srcArg = limit-1; srcArg = limit-1;
dstArg = firstArg; dstArg = firstArg;
dstSlot = depth0 - chunk2Slots; //dstSlot = depth0 - chunk2Slots; //chunk2Slots is not relevant
basicType = basicType(newType.parameterType(srcArg)); dstSlot = depth0 + MethodHandleNatives.OP_ROT_ARGS_DOWN_LIMIT_BIAS;
assert(chunk2Slots == type2size(basicType)); moveChunk = chunk2Slots;
} else { } else {
// Rotate left/up N (rotateBy = -N, N small, c1 small): // Rotate left/up N (rotateBy = -N, N small, c1 small):
// in arglist: [0: ...keep1 | arg1: c1 | arg1+N: c2... | limit: keep2... ] // in arglist: [0: ...keep1 | arg1: c1 | arg1+N: c2... | limit: keep2... ]
...@@ -1046,10 +1049,12 @@ class AdapterMethodHandle extends BoundMethodHandle { ...@@ -1046,10 +1049,12 @@ class AdapterMethodHandle extends BoundMethodHandle {
srcArg = firstArg; srcArg = firstArg;
dstArg = limit-1; dstArg = limit-1;
dstSlot = depth2; dstSlot = depth2;
basicType = basicType(newType.parameterType(srcArg)); moveChunk = chunk1Slots;
assert(chunk1Slots == type2size(basicType));
} }
long conv = makeSwapConv(OP_ROT_ARGS, srcArg, basicType, dstSlot); byte srcType = basicType(newType.parameterType(srcArg));
byte dstType = basicType(newType.parameterType(dstArg));
assert(moveChunk == type2size(srcType));
long conv = makeSwapConv(OP_ROT_ARGS, srcArg, srcType, dstSlot, dstType);
return new AdapterMethodHandle(target, newType, conv); return new AdapterMethodHandle(target, newType, conv);
} }
......
...@@ -788,6 +788,7 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; ...@@ -788,6 +788,7 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
.insertParameterTypes(keepPosArgs, arrayType); .insertParameterTypes(keepPosArgs, arrayType);
return spreadArguments(target, newType, keepPosArgs, arrayType, arrayLength); return spreadArguments(target, newType, keepPosArgs, arrayType, arrayLength);
} }
// called internally only
static MethodHandle spreadArgumentsFromPos(MethodHandle target, MethodType newType, int spreadArgPos) { static MethodHandle spreadArgumentsFromPos(MethodHandle target, MethodType newType, int spreadArgPos) {
int arrayLength = target.type().parameterCount() - spreadArgPos; int arrayLength = target.type().parameterCount() - spreadArgPos;
return spreadArguments(target, newType, spreadArgPos, Object[].class, arrayLength); return spreadArguments(target, newType, spreadArgPos, Object[].class, arrayLength);
...@@ -849,6 +850,12 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; ...@@ -849,6 +850,12 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
MethodType ttype = target.type(); MethodType ttype = target.type();
MethodType ftype = filter.type(); MethodType ftype = filter.type();
assert(ftype.parameterCount() == 1); assert(ftype.parameterCount() == 1);
MethodHandle result = null;
if (AdapterMethodHandle.canCollectArguments(ttype, ftype, pos, false)) {
result = AdapterMethodHandle.makeCollectArguments(target, filter, pos, false);
if (result != null) return result;
}
assert(MethodHandleNatives.workaroundWithoutRicochetFrames()); // this code is deprecated
MethodType rtype = ttype.changeParameterType(pos, ftype.parameterType(0)); MethodType rtype = ttype.changeParameterType(pos, ftype.parameterType(0));
MethodType gttype = ttype.generic(); MethodType gttype = ttype.generic();
if (ttype != gttype) { if (ttype != gttype) {
...@@ -860,19 +867,12 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; ...@@ -860,19 +867,12 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
filter = convertArguments(filter, gftype, ftype, 0); filter = convertArguments(filter, gftype, ftype, 0);
ftype = gftype; ftype = gftype;
} }
MethodHandle result = null;
if (AdapterMethodHandle.canCollectArguments(ttype, ftype, pos, false)) {
result = AdapterMethodHandle.makeCollectArguments(target, filter, pos, false);
}
if (result == null) {
assert(MethodHandleNatives.workaroundWithoutRicochetFrames()); // this code is deprecated
if (ftype == ttype) { if (ftype == ttype) {
// simple unary case // simple unary case
result = FilterOneArgument.make(filter, target); result = FilterOneArgument.make(filter, target);
} else { } else {
result = FilterGeneric.makeArgumentFilter(pos, filter, target); result = FilterGeneric.makeArgumentFilter(pos, filter, target);
} }
}
if (result.type() != rtype) if (result.type() != rtype)
result = result.asType(rtype); result = result.asType(rtype);
return result; return result;
...@@ -920,7 +920,7 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; ...@@ -920,7 +920,7 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
this.fallback = fallback; this.fallback = fallback;
} }
static boolean preferRicochetFrame(MethodType type) { static boolean preferRicochetFrame(MethodType type) {
return (type.parameterCount() >= INVOKES.length || type.hasPrimitives()); return true; // always use RF if available
} }
static MethodHandle make(MethodHandle test, MethodHandle target, MethodHandle fallback) { static MethodHandle make(MethodHandle test, MethodHandle target, MethodHandle fallback) {
MethodType type = target.type(); MethodType type = target.type();
...@@ -931,12 +931,13 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; ...@@ -931,12 +931,13 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
MethodHandle invoke = INVOKES[nargs]; MethodHandle invoke = INVOKES[nargs];
MethodType gtype = type.generic(); MethodType gtype = type.generic();
assert(invoke.type().dropParameterTypes(0,1) == gtype); assert(invoke.type().dropParameterTypes(0,1) == gtype);
MethodHandle gtest = convertArguments(test, gtype.changeReturnType(boolean.class), test.type(), 0); // Note: convertArguments(...2) avoids interface casts present in convertArguments(...0)
MethodHandle gtarget = convertArguments(target, gtype, type, 0); MethodHandle gtest = convertArguments(test, gtype.changeReturnType(boolean.class), test.type(), 2);
MethodHandle gfallback = convertArguments(fallback, gtype, type, 0); MethodHandle gtarget = convertArguments(target, gtype, type, 2);
MethodHandle gfallback = convertArguments(fallback, gtype, type, 2);
if (gtest == null || gtarget == null || gfallback == null) return null; if (gtest == null || gtarget == null || gfallback == null) return null;
MethodHandle gguard = new GuardWithTest(invoke, gtest, gtarget, gfallback); MethodHandle gguard = new GuardWithTest(invoke, gtest, gtarget, gfallback);
return convertArguments(gguard, type, gtype, 0); return convertArguments(gguard, type, gtype, 2);
} else { } else {
assert(MethodHandleNatives.workaroundWithoutRicochetFrames()); // this code is deprecated assert(MethodHandleNatives.workaroundWithoutRicochetFrames()); // this code is deprecated
MethodHandle invoke = VARARGS_INVOKE; MethodHandle invoke = VARARGS_INVOKE;
...@@ -1221,11 +1222,12 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; ...@@ -1221,11 +1222,12 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
if (nargs < GuardWithCatch.INVOKES.length) { if (nargs < GuardWithCatch.INVOKES.length) {
MethodType gtype = type.generic(); MethodType gtype = type.generic();
MethodType gcatchType = gtype.insertParameterTypes(0, Throwable.class); MethodType gcatchType = gtype.insertParameterTypes(0, Throwable.class);
MethodHandle gtarget = convertArguments(target, gtype, type, 0); // Note: convertArguments(...2) avoids interface casts present in convertArguments(...0)
MethodHandle gcatcher = convertArguments(catcher, gcatchType, ctype, 0); MethodHandle gtarget = convertArguments(target, gtype, type, 2);
MethodHandle gcatcher = convertArguments(catcher, gcatchType, ctype, 2);
MethodHandle gguard = new GuardWithCatch(gtarget, exType, gcatcher); MethodHandle gguard = new GuardWithCatch(gtarget, exType, gcatcher);
if (gtarget == null || gcatcher == null || gguard == null) return null; if (gtarget == null || gcatcher == null || gguard == null) return null;
return convertArguments(gguard, type, gtype, 0); return convertArguments(gguard, type, gtype, 2);
} else { } else {
MethodType gtype = MethodType.genericMethodType(0, true); MethodType gtype = MethodType.genericMethodType(0, true);
MethodType gcatchType = gtype.insertParameterTypes(0, Throwable.class); MethodType gcatchType = gtype.insertParameterTypes(0, Throwable.class);
......
...@@ -118,32 +118,20 @@ class MethodHandleNatives { ...@@ -118,32 +118,20 @@ class MethodHandleNatives {
/** Derived mode flag. Only false on some old JVM implementations. */ /** Derived mode flag. Only false on some old JVM implementations. */
static final boolean HAVE_RICOCHET_FRAMES; static final boolean HAVE_RICOCHET_FRAMES;
static final int OP_ROT_ARGS_DOWN_LIMIT_BIAS;
private static native void registerNatives(); private static native void registerNatives();
static { static {
int JVM_PUSH_LIMIT_;
int JVM_STACK_MOVE_UNIT_;
int CONV_OP_IMPLEMENTED_MASK_;
try {
registerNatives(); registerNatives();
JVM_PUSH_LIMIT_ = getConstant(Constants.GC_JVM_PUSH_LIMIT); int k;
JVM_STACK_MOVE_UNIT_ = getConstant(Constants.GC_JVM_STACK_MOVE_UNIT); JVM_PUSH_LIMIT = getConstant(Constants.GC_JVM_PUSH_LIMIT);
CONV_OP_IMPLEMENTED_MASK_ = getConstant(Constants.GC_CONV_OP_IMPLEMENTED_MASK); JVM_STACK_MOVE_UNIT = getConstant(Constants.GC_JVM_STACK_MOVE_UNIT);
//sun.reflect.Reflection.registerMethodsToFilter(MethodHandleImpl.class, "init"); k = getConstant(Constants.GC_CONV_OP_IMPLEMENTED_MASK);
} catch (UnsatisfiedLinkError ee) { CONV_OP_IMPLEMENTED_MASK = (k != 0) ? k : DEFAULT_CONV_OP_IMPLEMENTED_MASK;
// ignore; if we use init() methods later we'll see linkage errors k = getConstant(Constants.GC_OP_ROT_ARGS_DOWN_LIMIT_BIAS);
JVM_PUSH_LIMIT_ = 3; // arbitrary OP_ROT_ARGS_DOWN_LIMIT_BIAS = (k != 0) ? (byte)k : -1;
JVM_STACK_MOVE_UNIT_ = -1; // arbitrary
CONV_OP_IMPLEMENTED_MASK_ = 0;
JVM_PUSH_LIMIT = JVM_PUSH_LIMIT_;
JVM_STACK_MOVE_UNIT = JVM_STACK_MOVE_UNIT_;
throw ee; // just die; hopeless to try to run with an older JVM
}
JVM_PUSH_LIMIT = JVM_PUSH_LIMIT_;
JVM_STACK_MOVE_UNIT = JVM_STACK_MOVE_UNIT_;
if (CONV_OP_IMPLEMENTED_MASK_ == 0)
CONV_OP_IMPLEMENTED_MASK_ = DEFAULT_CONV_OP_IMPLEMENTED_MASK;
CONV_OP_IMPLEMENTED_MASK = CONV_OP_IMPLEMENTED_MASK_;
HAVE_RICOCHET_FRAMES = (CONV_OP_IMPLEMENTED_MASK & (1<<OP_COLLECT_ARGS)) != 0; HAVE_RICOCHET_FRAMES = (CONV_OP_IMPLEMENTED_MASK & (1<<OP_COLLECT_ARGS)) != 0;
//sun.reflect.Reflection.registerMethodsToFilter(MethodHandleImpl.class, "init");
} }
// All compile-time constants go here. // All compile-time constants go here.
...@@ -154,7 +142,8 @@ class MethodHandleNatives { ...@@ -154,7 +142,8 @@ class MethodHandleNatives {
static final int // for getConstant static final int // for getConstant
GC_JVM_PUSH_LIMIT = 0, GC_JVM_PUSH_LIMIT = 0,
GC_JVM_STACK_MOVE_UNIT = 1, GC_JVM_STACK_MOVE_UNIT = 1,
GC_CONV_OP_IMPLEMENTED_MASK = 2; GC_CONV_OP_IMPLEMENTED_MASK = 2,
GC_OP_ROT_ARGS_DOWN_LIMIT_BIAS = 3;
static final int static final int
ETF_HANDLE_OR_METHOD_NAME = 0, // all available data (immediate MH or method) ETF_HANDLE_OR_METHOD_NAME = 0, // all available data (immediate MH or method)
ETF_DIRECT_HANDLE = 1, // ultimate method handle (will be a DMH, may be self) ETF_DIRECT_HANDLE = 1, // ultimate method handle (will be a DMH, may be self)
......
...@@ -134,7 +134,7 @@ public class SwitchPoint { ...@@ -134,7 +134,7 @@ public class SwitchPoint {
* to return true for {@code hasBeenInvalidated}, * to return true for {@code hasBeenInvalidated},
* it will always do so in the future. * it will always do so in the future.
* On the other hand, a valid switch point visible to other threads may * On the other hand, a valid switch point visible to other threads may
* invalidated at any moment, due to a request by another thread. * be invalidated at any moment, due to a request by another thread.
* <p style="font-size:smaller;"> * <p style="font-size:smaller;">
* Since invalidation is a global and immediate operation, * Since invalidation is a global and immediate operation,
* the execution of this query, on a valid switchpoint, * the execution of this query, on a valid switchpoint,
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -35,4 +35,22 @@ package java.lang.reflect; ...@@ -35,4 +35,22 @@ package java.lang.reflect;
*/ */
public class GenericSignatureFormatError extends ClassFormatError { public class GenericSignatureFormatError extends ClassFormatError {
private static final long serialVersionUID = 6709919147137911034L; private static final long serialVersionUID = 6709919147137911034L;
/**
* Constructs a new {@code GenericSignatureFormatError}.
*
*/
public GenericSignatureFormatError() {
super();
}
/**
* Constructs a new {@code GenericSignatureFormatError} with the
* specified message.
*
* @param message the detail message, may be {@code null}
*/
public GenericSignatureFormatError(String message) {
super(message);
}
} }
...@@ -1013,6 +1013,12 @@ class InetAddress implements java.io.Serializable { ...@@ -1013,6 +1013,12 @@ class InetAddress implements java.io.Serializable {
return InetAddress.getAllByName(host)[0]; return InetAddress.getAllByName(host)[0];
} }
// called from deployment cache manager
private static InetAddress getByName(String host, InetAddress reqAddr)
throws UnknownHostException {
return InetAddress.getAllByName(host, reqAddr)[0];
}
/** /**
* Given the name of a host, returns an array of its IP addresses, * Given the name of a host, returns an array of its IP addresses,
* based on the configured name service on the system. * based on the configured name service on the system.
...@@ -1054,6 +1060,11 @@ class InetAddress implements java.io.Serializable { ...@@ -1054,6 +1060,11 @@ class InetAddress implements java.io.Serializable {
*/ */
public static InetAddress[] getAllByName(String host) public static InetAddress[] getAllByName(String host)
throws UnknownHostException { throws UnknownHostException {
return getAllByName(host, null);
}
private static InetAddress[] getAllByName(String host, InetAddress reqAddr)
throws UnknownHostException {
if (host == null || host.length() == 0) { if (host == null || host.length() == 0) {
InetAddress[] ret = new InetAddress[1]; InetAddress[] ret = new InetAddress[1];
...@@ -1113,7 +1124,7 @@ class InetAddress implements java.io.Serializable { ...@@ -1113,7 +1124,7 @@ class InetAddress implements java.io.Serializable {
// We were expecting an IPv6 Litteral, but got something else // We were expecting an IPv6 Litteral, but got something else
throw new UnknownHostException("["+host+"]"); throw new UnknownHostException("["+host+"]");
} }
return getAllByName0(host); return getAllByName0(host, reqAddr, true);
} }
/** /**
...@@ -1174,6 +1185,12 @@ class InetAddress implements java.io.Serializable { ...@@ -1174,6 +1185,12 @@ class InetAddress implements java.io.Serializable {
*/ */
static InetAddress[] getAllByName0 (String host, boolean check) static InetAddress[] getAllByName0 (String host, boolean check)
throws UnknownHostException { throws UnknownHostException {
return getAllByName0 (host, null, check);
}
private static InetAddress[] getAllByName0 (String host, InetAddress reqAddr, boolean check)
throws UnknownHostException {
/* If it gets here it is presumed to be a hostname */ /* If it gets here it is presumed to be a hostname */
/* Cache.get can return: null, unknownAddress, or InetAddress[] */ /* Cache.get can return: null, unknownAddress, or InetAddress[] */
...@@ -1191,7 +1208,7 @@ class InetAddress implements java.io.Serializable { ...@@ -1191,7 +1208,7 @@ class InetAddress implements java.io.Serializable {
/* If no entry in cache, then do the host lookup */ /* If no entry in cache, then do the host lookup */
if (addresses == null) { if (addresses == null) {
addresses = getAddressesFromNameService(host); addresses = getAddressesFromNameService(host, reqAddr);
} }
if (addresses == unknown_array) if (addresses == unknown_array)
...@@ -1200,7 +1217,7 @@ class InetAddress implements java.io.Serializable { ...@@ -1200,7 +1217,7 @@ class InetAddress implements java.io.Serializable {
return addresses.clone(); return addresses.clone();
} }
private static InetAddress[] getAddressesFromNameService(String host) private static InetAddress[] getAddressesFromNameService(String host, InetAddress reqAddr)
throws UnknownHostException throws UnknownHostException
{ {
InetAddress[] addresses = null; InetAddress[] addresses = null;
...@@ -1256,10 +1273,32 @@ class InetAddress implements java.io.Serializable { ...@@ -1256,10 +1273,32 @@ class InetAddress implements java.io.Serializable {
} }
} }
// Cache the addresses. // More to do?
if (reqAddr != null && addresses.length > 1 && !addresses[0].equals(reqAddr)) {
// Find it?
int i = 1;
for (; i < addresses.length; i++) {
if (addresses[i].equals(reqAddr)) {
break;
}
}
// Rotate
if (i < addresses.length) {
InetAddress tmp, tmp2 = reqAddr;
for (int j = 0; j < i; j++) {
tmp = addresses[j];
addresses[j] = tmp2;
tmp2 = tmp;
}
addresses[i] = tmp2;
}
}
// Cache the address.
cacheAddresses(host, addresses, success); cacheAddresses(host, addresses, success);
if (!success && ex != null) if (!success && ex != null)
throw ex; throw ex;
} finally { } finally {
// Delete host from the lookupTable and notify // Delete host from the lookupTable and notify
// all threads waiting on the lookupTable monitor. // all threads waiting on the lookupTable monitor.
...@@ -1393,7 +1432,7 @@ class InetAddress implements java.io.Serializable { ...@@ -1393,7 +1432,7 @@ class InetAddress implements java.io.Serializable {
InetAddress[] localAddrs; InetAddress[] localAddrs;
try { try {
localAddrs = localAddrs =
InetAddress.getAddressesFromNameService(local); InetAddress.getAddressesFromNameService(local, null);
} catch (UnknownHostException uhe) { } catch (UnknownHostException uhe) {
// Rethrow with a more informative error message. // Rethrow with a more informative error message.
UnknownHostException uhe2 = UnknownHostException uhe2 =
......
...@@ -547,13 +547,8 @@ public final class NetworkInterface { ...@@ -547,13 +547,8 @@ public final class NetworkInterface {
if (displayName != null) { if (displayName != null) {
result += " (" + displayName + ")"; result += " (" + displayName + ")";
} }
result += " index: "+index+" addresses:\n";
for (Enumeration e = getInetAddresses(); e.hasMoreElements(); ) {
InetAddress addr = (InetAddress)e.nextElement();
result += addr+";\n";
}
return result; return result;
} }
private static native void init();
private static native void init();
} }
...@@ -127,8 +127,9 @@ class Socket implements java.io.Closeable { ...@@ -127,8 +127,9 @@ class Socket implements java.io.Closeable {
} }
if (security != null) { if (security != null) {
if (epoint.isUnresolved()) if (epoint.isUnresolved())
security.checkConnect(epoint.getHostName(), epoint = new InetSocketAddress(epoint.getHostName(), epoint.getPort());
epoint.getPort()); if (epoint.isUnresolved())
security.checkConnect(epoint.getHostName(), epoint.getPort());
else else
security.checkConnect(epoint.getAddress().getHostAddress(), security.checkConnect(epoint.getAddress().getHostAddress(),
epoint.getPort()); epoint.getPort());
......
...@@ -40,7 +40,9 @@ import java.io.ObjectOutputStream; ...@@ -40,7 +40,9 @@ import java.io.ObjectOutputStream;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.IOException; import java.io.IOException;
import sun.net.util.IPAddressUtil; import sun.net.util.IPAddressUtil;
import sun.net.RegisteredDomain;
import sun.security.util.SecurityConstants; import sun.security.util.SecurityConstants;
import sun.security.util.Debug;
/** /**
...@@ -211,13 +213,32 @@ implements java.io.Serializable ...@@ -211,13 +213,32 @@ implements java.io.Serializable
// port range on host // port range on host
private transient int[] portrange; private transient int[] portrange;
// true if the trustProxy system property is set private transient boolean defaultDeny = false;
private static boolean trustProxy;
// true if this SocketPermission represents a hostname
// that failed our reverse mapping heuristic test
private transient boolean untrusted;
private transient boolean trusted;
// true if the sun.net.trustNameService system property is set
private static boolean trustNameService;
private static Debug debug = null;
private static boolean debugInit = false;
static { static {
Boolean tmp = java.security.AccessController.doPrivileged( Boolean tmp = java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction("trustProxy")); new sun.security.action.GetBooleanAction("sun.net.trustNameService"));
trustProxy = tmp.booleanValue(); trustNameService = tmp.booleanValue();
}
private static synchronized Debug getDebug()
{
if (!debugInit) {
debug = Debug.getInstance("access");
debugInit = true;
}
return debug;
} }
/** /**
...@@ -263,6 +284,10 @@ implements java.io.Serializable ...@@ -263,6 +284,10 @@ implements java.io.Serializable
init(getName(), mask); init(getName(), mask);
} }
private void setDeny() {
defaultDeny = true;
}
private static String getHost(String host) private static String getHost(String host)
{ {
if (host.equals("")) { if (host.equals("")) {
...@@ -560,6 +585,37 @@ implements java.io.Serializable ...@@ -560,6 +585,37 @@ implements java.io.Serializable
return mask; return mask;
} }
private boolean isUntrusted()
throws UnknownHostException
{
if (trusted) return false;
if (invalid || untrusted) return true;
try {
if (!trustNameService && (defaultDeny ||
sun.net.www.URLConnection.isProxiedHost(hostname))) {
if (this.cname == null) {
this.getCanonName();
}
if (!match(cname, hostname)) {
// Last chance
if (!authorized(hostname, addresses[0].getAddress())) {
untrusted = true;
Debug debug = getDebug();
if (debug != null && Debug.isOn("failure")) {
debug.println("socket access restriction: proxied host " + "(" + addresses[0] + ")" + " does not match " + cname + " from reverse lookup");
}
return true;
}
}
trusted = true;
}
} catch (UnknownHostException uhe) {
invalid = true;
throw uhe;
}
return false;
}
/** /**
* attempt to get the fully qualified domain name * attempt to get the fully qualified domain name
* *
...@@ -567,7 +623,7 @@ implements java.io.Serializable ...@@ -567,7 +623,7 @@ implements java.io.Serializable
void getCanonName() void getCanonName()
throws UnknownHostException throws UnknownHostException
{ {
if (cname != null || invalid) return; if (cname != null || invalid || untrusted) return;
// attempt to get the canonical name // attempt to get the canonical name
...@@ -593,6 +649,96 @@ implements java.io.Serializable ...@@ -593,6 +649,96 @@ implements java.io.Serializable
} }
} }
private transient String cdomain, hdomain;
private boolean match(String cname, String hname) {
String a = cname.toLowerCase();
String b = hname.toLowerCase();
if (a.startsWith(b) &&
((a.length() == b.length()) || (a.charAt(b.length()) == '.')))
return true;
if (cdomain == null) {
cdomain = RegisteredDomain.getRegisteredDomain(a);
}
if (hdomain == null) {
hdomain = RegisteredDomain.getRegisteredDomain(b);
}
return cdomain.length() != 0 && hdomain.length() != 0
&& cdomain.equals(hdomain);
}
private boolean authorized(String cname, byte[] addr) {
if (addr.length == 4)
return authorizedIPv4(cname, addr);
else if (addr.length == 16)
return authorizedIPv6(cname, addr);
else
return false;
}
private boolean authorizedIPv4(String cname, byte[] addr) {
String authHost = "";
InetAddress auth;
try {
authHost = "auth." +
(addr[3] & 0xff) + "." + (addr[2] & 0xff) + "." +
(addr[1] & 0xff) + "." + (addr[0] & 0xff) +
".in-addr.arpa";
// Following check seems unnecessary
// auth = InetAddress.getAllByName0(authHost, false)[0];
authHost = hostname + '.' + authHost;
auth = InetAddress.getAllByName0(authHost, false)[0];
if (auth.equals(InetAddress.getByAddress(addr))) {
return true;
}
Debug debug = getDebug();
if (debug != null && Debug.isOn("failure")) {
debug.println("socket access restriction: IP address of " + auth + " != " + InetAddress.getByAddress(addr));
}
} catch (UnknownHostException uhe) {
Debug debug = getDebug();
if (debug != null && Debug.isOn("failure")) {
debug.println("socket access restriction: forward lookup failed for " + authHost);
}
}
return false;
}
private boolean authorizedIPv6(String cname, byte[] addr) {
String authHost = "";
InetAddress auth;
try {
StringBuffer sb = new StringBuffer(39);
for (int i = 15; i >= 0; i--) {
sb.append(Integer.toHexString(((addr[i]) & 0x0f)));
sb.append('.');
sb.append(Integer.toHexString(((addr[i] >> 4) & 0x0f)));
sb.append('.');
}
authHost = "auth." + sb.toString() + "IP6.ARPA";
//auth = InetAddress.getAllByName0(authHost, false)[0];
authHost = hostname + '.' + authHost;
auth = InetAddress.getAllByName0(authHost, false)[0];
if (auth.equals(InetAddress.getByAddress(addr)))
return true;
Debug debug = getDebug();
if (debug != null && Debug.isOn("failure")) {
debug.println("socket access restriction: IP address of " + auth + " != " + InetAddress.getByAddress(addr));
}
} catch (UnknownHostException uhe) {
Debug debug = getDebug();
if (debug != null && Debug.isOn("failure")) {
debug.println("socket access restriction: forward lookup failed for " + authHost);
}
}
return false;
}
/** /**
* get IP addresses. Sets invalid to true if we can't get them. * get IP addresses. Sets invalid to true if we can't get them.
* *
...@@ -720,12 +866,7 @@ implements java.io.Serializable ...@@ -720,12 +866,7 @@ implements java.io.Serializable
// return if either one of these NetPerm objects are invalid... // return if either one of these NetPerm objects are invalid...
if (this.invalid || that.invalid) { if (this.invalid || that.invalid) {
return (trustProxy ? inProxyWeTrust(that) : false); return compareHostnames(that);
}
if (this.getName().equalsIgnoreCase(that.getName())) {
return true;
} }
try { try {
...@@ -778,6 +919,7 @@ implements java.io.Serializable ...@@ -778,6 +919,7 @@ implements java.io.Serializable
that.getIP(); that.getIP();
} }
if (!(that.init_with_ip && this.isUntrusted())) {
for (j = 0; j < this.addresses.length; j++) { for (j = 0; j < this.addresses.length; j++) {
for (i=0; i < that.addresses.length; i++) { for (i=0; i < that.addresses.length; i++) {
if (this.addresses[j].equals(that.addresses[i])) if (this.addresses[j].equals(that.addresses[i]))
...@@ -796,10 +938,10 @@ implements java.io.Serializable ...@@ -796,10 +938,10 @@ implements java.io.Serializable
} }
return (this.cname.equalsIgnoreCase(that.cname)); return (this.cname.equalsIgnoreCase(that.cname));
}
} catch (UnknownHostException uhe) { } catch (UnknownHostException uhe) {
if (trustProxy) return compareHostnames(that);
return inProxyWeTrust(that);
} }
// make sure the first thing that is done here is to return // make sure the first thing that is done here is to return
...@@ -808,9 +950,8 @@ implements java.io.Serializable ...@@ -808,9 +950,8 @@ implements java.io.Serializable
return false; return false;
} }
private boolean inProxyWeTrust(SocketPermission that) { private boolean compareHostnames(SocketPermission that) {
// if we trust the proxy, we see if the original names/IPs passed // we see if the original names/IPs passed in were equal.
// in were equal.
String thisHost = hostname; String thisHost = hostname;
String thatHost = that.hostname; String thatHost = that.hostname;
...@@ -819,8 +960,8 @@ implements java.io.Serializable ...@@ -819,8 +960,8 @@ implements java.io.Serializable
return false; return false;
else else
return thisHost.equalsIgnoreCase(thatHost); return thisHost.equalsIgnoreCase(thatHost);
} }
/** /**
* Checks two SocketPermission objects for equality. * Checks two SocketPermission objects for equality.
* <P> * <P>
......
...@@ -460,15 +460,13 @@ public interface Path ...@@ -460,15 +460,13 @@ public interface Path
/** /**
* Returns a URI to represent this path. * Returns a URI to represent this path.
* *
* <p> This method constructs a hierarchical {@link URI} that is absolute * <p> This method constructs an absolute {@link URI} with a {@link
* with a non-empty path component. Its {@link URI#getScheme() scheme} is * URI#getScheme() scheme} equal to the URI scheme that identifies the
* equal to the URI scheme that identifies the provider. The exact form of * provider. The exact form of the scheme specific part is highly provider
* the other URI components is highly provider dependent. In particular, it * dependent.
* is implementation dependent if its query, fragment, and authority *
* components are defined or undefined. * <p> In the case of the default provider, the URI is hierarchical with
* * a {@link URI#getPath() path} component that is absolute. The query and
* <p> For the default provider the {@link URI#getPath() path} component
* will represent the {@link #toAbsolutePath absolute} path; the query,
* fragment components are undefined. Whether the authority component is * fragment components are undefined. Whether the authority component is
* defined or not is implementation dependent. There is no guarantee that * defined or not is implementation dependent. There is no guarantee that
* the {@code URI} may be used to construct a {@link java.io.File java.io.File}. * the {@code URI} may be used to construct a {@link java.io.File java.io.File}.
...@@ -497,7 +495,7 @@ public interface Path ...@@ -497,7 +495,7 @@ public interface Path
* A format for compound URIs is not defined in this release; such a scheme * A format for compound URIs is not defined in this release; such a scheme
* may be added in a future release. * may be added in a future release.
* *
* @return an absolute, hierarchical URI with a non-empty path component * @return the URI representing this path
* *
* @throws java.io.IOError * @throws java.io.IOError
* if an I/O error occurs obtaining the absolute path, or where a * if an I/O error occurs obtaining the absolute path, or where a
......
/* /*
* Copyright (c) 1996, 2006, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -118,15 +118,17 @@ public final class UID implements Serializable { ...@@ -118,15 +118,17 @@ public final class UID implements Serializable {
boolean done = false; boolean done = false;
while (!done) { while (!done) {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
if (now <= lastTime) { if (now == lastTime) {
// wait for time to change // wait for time to change
try { try {
Thread.currentThread().sleep(1); Thread.sleep(1);
} catch (InterruptedException e) { } catch (InterruptedException e) {
interrupted = true; interrupted = true;
} }
} else { } else {
lastTime = now; // If system time has gone backwards increase
// original by 1ms to maintain uniqueness
lastTime = (now < lastTime) ? lastTime+1 : now;
lastCount = Short.MIN_VALUE; lastCount = Short.MIN_VALUE;
done = true; done = true;
} }
......
/* /*
* Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -249,10 +249,10 @@ public final class SignedObject implements Serializable { ...@@ -249,10 +249,10 @@ public final class SignedObject implements Serializable {
* a stream. * a stream.
*/ */
private void readObject(java.io.ObjectInputStream s) private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException throws java.io.IOException, ClassNotFoundException {
{ java.io.ObjectInputStream.GetField fields = s.readFields();
s.defaultReadObject(); content = ((byte[])fields.get("content", null)).clone();
content = content.clone(); signature = ((byte[])fields.get("signature", null)).clone();
signature = signature.clone(); thealgorithm = (String)fields.get("thealgorithm", null);
} }
} }
...@@ -79,7 +79,8 @@ public class BatchUpdateException extends SQLException { ...@@ -79,7 +79,8 @@ public class BatchUpdateException extends SQLException {
*/ */
public BatchUpdateException( String reason, String SQLState, int vendorCode, public BatchUpdateException( String reason, String SQLState, int vendorCode,
int[] updateCounts ) { int[] updateCounts ) {
this(reason, SQLState, vendorCode, updateCounts, null); super(reason, SQLState, vendorCode);
this.updateCounts = (updateCounts == null) ? null : Arrays.copyOf(updateCounts, updateCounts.length);
} }
/** /**
...@@ -106,7 +107,7 @@ public class BatchUpdateException extends SQLException { ...@@ -106,7 +107,7 @@ public class BatchUpdateException extends SQLException {
*/ */
public BatchUpdateException(String reason, String SQLState, public BatchUpdateException(String reason, String SQLState,
int[] updateCounts) { int[] updateCounts) {
this(reason, SQLState, 0, updateCounts, null); this(reason, SQLState, 0, updateCounts);
} }
/** /**
...@@ -132,7 +133,7 @@ public class BatchUpdateException extends SQLException { ...@@ -132,7 +133,7 @@ public class BatchUpdateException extends SQLException {
* @since 1.2 * @since 1.2
*/ */
public BatchUpdateException(String reason, int[] updateCounts) { public BatchUpdateException(String reason, int[] updateCounts) {
this(reason, null, 0, updateCounts, null); this(reason, null, 0, updateCounts);
} }
/** /**
...@@ -155,7 +156,7 @@ public class BatchUpdateException extends SQLException { ...@@ -155,7 +156,7 @@ public class BatchUpdateException extends SQLException {
* @since 1.2 * @since 1.2
*/ */
public BatchUpdateException(int[] updateCounts) { public BatchUpdateException(int[] updateCounts) {
this(null, null, 0, updateCounts, null); this(null, null, 0, updateCounts);
} }
/** /**
...@@ -170,7 +171,7 @@ public class BatchUpdateException extends SQLException { ...@@ -170,7 +171,7 @@ public class BatchUpdateException extends SQLException {
* @since 1.2 * @since 1.2
*/ */
public BatchUpdateException() { public BatchUpdateException() {
this(null, null, 0, null, null); this(null, null, 0, null);
} }
/** /**
......
...@@ -118,7 +118,13 @@ class Random implements java.io.Serializable { ...@@ -118,7 +118,13 @@ class Random implements java.io.Serializable {
* @see #setSeed(long) * @see #setSeed(long)
*/ */
public Random(long seed) { public Random(long seed) {
if (getClass() == Random.class)
this.seed = new AtomicLong(initialScramble(seed)); this.seed = new AtomicLong(initialScramble(seed));
else {
// subclass might have overriden setSeed
this.seed = new AtomicLong();
setSeed(seed);
}
} }
private static long initialScramble(long seed) { private static long initialScramble(long seed) {
......
...@@ -246,18 +246,37 @@ public class AtomicInteger extends Number implements java.io.Serializable { ...@@ -246,18 +246,37 @@ public class AtomicInteger extends Number implements java.io.Serializable {
} }
/**
* Returns the value of this {@code AtomicInteger} as an
* {@code int}.
*/
public int intValue() { public int intValue() {
return get(); return get();
} }
/**
* Returns the value of this {@code AtomicInteger} as a {@code long}
* after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/
public long longValue() { public long longValue() {
return (long)get(); return (long)get();
} }
/**
* Returns the value of this {@code AtomicInteger} as a {@code float}
* after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/
public float floatValue() { public float floatValue() {
return (float)get(); return (float)get();
} }
/**
* Returns the value of this {@code AtomicInteger} as a {@code double}
* after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/
public double doubleValue() { public double doubleValue() {
return (double)get(); return (double)get();
} }
......
...@@ -260,18 +260,37 @@ public class AtomicLong extends Number implements java.io.Serializable { ...@@ -260,18 +260,37 @@ public class AtomicLong extends Number implements java.io.Serializable {
} }
/**
* Returns the value of this {@code AtomicLong} as an {@code int}
* after a narrowing primitive conversion.
* @jls 5.1.3 Narrowing Primitive Conversions
*/
public int intValue() { public int intValue() {
return (int)get(); return (int)get();
} }
/**
* Returns the value of this {@code AtomicLong} as a {@code long}
* value.
*/
public long longValue() { public long longValue() {
return get(); return get();
} }
/**
* Returns the value of this {@code AtomicLong} as a {@code float}
* after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/
public float floatValue() { public float floatValue() {
return (float)get(); return (float)get();
} }
/**
* Returns the value of this {@code AtomicLong} as a {@code
* double} after a widening primitive conversion.
* @jls 5.1.2 Widening Primitive Conversions
*/
public double doubleValue() { public double doubleValue() {
return (double)get(); return (double)get();
} }
......
...@@ -251,7 +251,10 @@ public class Logger { ...@@ -251,7 +251,10 @@ public class Logger {
protected Logger(String name, String resourceBundleName) { protected Logger(String name, String resourceBundleName) {
this.manager = LogManager.getLogManager(); this.manager = LogManager.getLogManager();
if (resourceBundleName != null) { if (resourceBundleName != null) {
// Note: we may get a MissingResourceException here. // MissingResourceException or IllegalArgumentException can
// be thrown by setupResourceInfo(). Since this is the Logger
// constructor, the resourceBundleName field is null so
// IllegalArgumentException cannot happen here.
setupResourceInfo(resourceBundleName); setupResourceInfo(resourceBundleName);
} }
this.name = name; this.name = name;
...@@ -374,13 +377,10 @@ public class Logger { ...@@ -374,13 +377,10 @@ public class Logger {
public static Logger getLogger(String name, String resourceBundleName) { public static Logger getLogger(String name, String resourceBundleName) {
LogManager manager = LogManager.getLogManager(); LogManager manager = LogManager.getLogManager();
Logger result = manager.demandLogger(name); Logger result = manager.demandLogger(name);
if (result.resourceBundleName == null) {
// Note: we may get a MissingResourceException here. // MissingResourceException or IllegalArgumentException can be
// thrown by setupResourceInfo().
result.setupResourceInfo(resourceBundleName); result.setupResourceInfo(resourceBundleName);
} else if (!result.resourceBundleName.equals(resourceBundleName)) {
throw new IllegalArgumentException(result.resourceBundleName +
" != " + resourceBundleName);
}
return result; return result;
} }
...@@ -1353,14 +1353,29 @@ public class Logger { ...@@ -1353,14 +1353,29 @@ public class Logger {
} }
// Private utility method to initialize our one entry // Private utility method to initialize our one entry
// resource bundle cache. // resource bundle name cache.
// Note: for consistency reasons, we are careful to check // Note: for consistency reasons, we are careful to check
// that a suitable ResourceBundle exists before setting the // that a suitable ResourceBundle exists before setting the
// ResourceBundleName. // resourceBundleName field.
// Synchronized to prevent races in setting the field.
private synchronized void setupResourceInfo(String name) { private synchronized void setupResourceInfo(String name) {
if (name == null) { if (name == null) {
return; return;
} }
if (resourceBundleName != null) {
// this Logger already has a ResourceBundle
if (resourceBundleName.equals(name)) {
// the names match so there is nothing more to do
return;
}
// cannot change ResourceBundles once they are set
throw new IllegalArgumentException(
resourceBundleName + " != " + name);
}
ResourceBundle rb = findResourceBundle(name); ResourceBundle rb = findResourceBundle(name);
if (rb == null) { if (rb == null) {
// We've failed to find an expected ResourceBundle. // We've failed to find an expected ResourceBundle.
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
package javax.security.auth.kerberos; package javax.security.auth.kerberos;
import sun.misc.JavaxSecurityAuthKerberosAccess; import sun.security.krb5.JavaxSecurityAuthKerberosAccess;
import sun.security.krb5.EncryptionKey; import sun.security.krb5.EncryptionKey;
import sun.security.krb5.PrincipalName; import sun.security.krb5.PrincipalName;
......
...@@ -27,8 +27,8 @@ package javax.security.auth.kerberos; ...@@ -27,8 +27,8 @@ package javax.security.auth.kerberos;
import java.io.File; import java.io.File;
import java.util.Objects; import java.util.Objects;
import sun.misc.SharedSecrets;
import sun.security.krb5.EncryptionKey; import sun.security.krb5.EncryptionKey;
import sun.security.krb5.KerberosSecrets;
import sun.security.krb5.PrincipalName; import sun.security.krb5.PrincipalName;
import sun.security.krb5.RealmException; import sun.security.krb5.RealmException;
...@@ -74,9 +74,9 @@ public final class KeyTab { ...@@ -74,9 +74,9 @@ public final class KeyTab {
// is maintained in snapshot, this field is never "resolved". // is maintained in snapshot, this field is never "resolved".
private final File file; private final File file;
// Set up JavaxSecurityAuthKerberosAccess in SharedSecrets // Set up JavaxSecurityAuthKerberosAccess in KerberosSecrets
static { static {
SharedSecrets.setJavaxSecurityAuthKerberosAccess( KerberosSecrets.setJavaxSecurityAuthKerberosAccess(
new JavaxSecurityAuthKerberosAccessImpl()); new JavaxSecurityAuthKerberosAccessImpl());
} }
......
...@@ -40,8 +40,7 @@ import javax.accessibility.*; ...@@ -40,8 +40,7 @@ import javax.accessibility.*;
import sun.awt.AppContext; import sun.awt.AppContext;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.security.PrivilegedAction; import java.security.*;
import java.security.AccessController;
/** /**
* An implementation of the Icon interface that paints Icons * An implementation of the Icon interface that paints Icons
...@@ -81,32 +80,51 @@ public class ImageIcon implements Icon, Serializable, Accessible { ...@@ -81,32 +80,51 @@ public class ImageIcon implements Icon, Serializable, Accessible {
ImageObserver imageObserver; ImageObserver imageObserver;
String description = null; String description = null;
// Fields for twisted backward compatibility only. DO NOT USE.
protected final static Component component; protected final static Component component;
protected final static MediaTracker tracker; protected final static MediaTracker tracker;
static { static {
component = new Component() {}; component = AccessController.doPrivileged(new PrivilegedAction<Component>() {
AccessController.doPrivileged(new PrivilegedAction<Object>() { public Component run() {
public Object run() {
try { try {
final Component component = createNoPermsComponent();
// 6482575 - clear the appContext field so as not to leak it // 6482575 - clear the appContext field so as not to leak it
Field appContextField = Field appContextField =
Component.class.getDeclaredField("appContext"); Component.class.getDeclaredField("appContext");
appContextField.setAccessible(true); appContextField.setAccessible(true);
appContextField.set(component, null); appContextField.set(component, null);
}
catch (NoSuchFieldException e) { return component;
e.printStackTrace(); } catch (Throwable e) {
} // We don't care about component.
catch (IllegalAccessException e) { // So don't prevent class initialisation.
e.printStackTrace(); e.printStackTrace();
}
return null; return null;
} }
}
}); });
tracker = new MediaTracker(component); tracker = new MediaTracker(component);
} }
private static Component createNoPermsComponent() {
// 7020198 - set acc field to no permissions and no subject
// Note, will have appContext set.
return AccessController.doPrivileged(
new PrivilegedAction<Component>() {
public Component run() {
return new Component() {
};
}
},
new AccessControlContext(new ProtectionDomain[]{
new ProtectionDomain(null, null)
})
);
}
/** /**
* Id used in loading images from MediaTracker. * Id used in loading images from MediaTracker.
*/ */
......
...@@ -588,6 +588,10 @@ public class NimbusLookAndFeel extends SynthLookAndFeel { ...@@ -588,6 +588,10 @@ public class NimbusLookAndFeel extends SynthLookAndFeel {
} }
private void addDefault(String key, Object value) { private void addDefault(String key, Object value) {
if (compiledDefaults == null) {
return;
}
String prefix = parsePrefix(key); String prefix = parsePrefix(key);
if (prefix != null) { if (prefix != null) {
Map<String, Object> keys = compiledDefaults.get(prefix); Map<String, Object> keys = compiledDefaults.get(prefix);
......
...@@ -337,8 +337,7 @@ public class Utilities { ...@@ -337,8 +337,7 @@ public class Utilities {
// x before x0, return. // x before x0, return.
return 0; return 0;
} }
int currX = x0; int nextX = x0;
int nextX = currX;
// s may be a shared segment, so it is copied prior to calling // s may be a shared segment, so it is copied prior to calling
// the tab expander // the tab expander
char[] txt = s.array; char[] txt = s.array;
...@@ -388,19 +387,45 @@ public class Utilities { ...@@ -388,19 +387,45 @@ public class Utilities {
} else { } else {
nextX += metrics.charWidth(txt[i]); nextX += metrics.charWidth(txt[i]);
} }
if ((x >= currX) && (x < nextX)) { if (x < nextX) {
// found the hit position... return the appropriate side // found the hit position... return the appropriate side
int offset = ((round == false) || ((x - currX) < (nextX - x))) ? int offset;
(i - txtOffset) : (i + 1 - txtOffset);
// the length of the string measured as a whole may differ from // the length of the string measured as a whole may differ from
// the sum of individual character lengths, for example if // the sum of individual character lengths, for example if
// fractional metrics are enabled; and we must guard from this. // fractional metrics are enabled; and we must guard from this.
if (round) {
offset = i + 1 - txtOffset;
int width = metrics.charsWidth(txt, txtOffset, offset);
int span = x - x0;
if (span < width) {
while (offset > 0) {
int nextWidth = offset > 1 ? metrics.charsWidth(txt, txtOffset, offset - 1) : 0;
if (span >= nextWidth) {
if (span - nextWidth < width - span) {
offset--;
}
break;
}
width = nextWidth;
offset--;
}
}
} else {
offset = i - txtOffset;
while (offset > 0 && metrics.charsWidth(txt, txtOffset, offset) > (x - x0)) { while (offset > 0 && metrics.charsWidth(txt, txtOffset, offset) > (x - x0)) {
offset--; offset--;
} }
}
return offset; return offset;
} }
currX = nextX;
} }
// didn't find, return end offset // didn't find, return end offset
......
...@@ -180,7 +180,6 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -180,7 +180,6 @@ public class FileFontStrike extends PhysicalStrike {
pScalerContext = NullFontScaler.getNullScalerContext(); pScalerContext = NullFontScaler.getNullScalerContext();
} else { } else {
pScalerContext = fileFont.getScaler().createScalerContext(matrix, pScalerContext = fileFont.getScaler().createScalerContext(matrix,
fileFont instanceof TrueTypeFont,
desc.aaHint, desc.fmHint, desc.aaHint, desc.fmHint,
boldness, italic, disableHinting); boldness, italic, disableHinting);
} }
......
...@@ -242,7 +242,6 @@ public abstract class FontScaler implements DisposerRecord { ...@@ -242,7 +242,6 @@ public abstract class FontScaler implements DisposerRecord {
freed when corresponding strike is being released. freed when corresponding strike is being released.
*/ */
abstract long createScalerContext(double[] matrix, abstract long createScalerContext(double[] matrix,
boolean fontType,
int aa, int fm, int aa, int fm,
float boldness, float italic, float boldness, float italic,
boolean disableHinting); boolean disableHinting);
......
...@@ -210,12 +210,12 @@ class FreetypeFontScaler extends FontScaler { ...@@ -210,12 +210,12 @@ class FreetypeFontScaler extends FontScaler {
return getUnitsPerEMNative(nativeScaler); return getUnitsPerEMNative(nativeScaler);
} }
long createScalerContext(double[] matrix, boolean fontType, long createScalerContext(double[] matrix,
int aa, int fm, float boldness, float italic, int aa, int fm, float boldness, float italic,
boolean disableHinting) { boolean disableHinting) {
if (nativeScaler != 0L) { if (nativeScaler != 0L) {
return createScalerContextNative(nativeScaler, matrix, return createScalerContextNative(nativeScaler, matrix,
fontType, aa, fm, boldness, italic); aa, fm, boldness, italic);
} }
return NullFontScaler.getNullScalerContext(); return NullFontScaler.getNullScalerContext();
} }
...@@ -254,7 +254,7 @@ class FreetypeFontScaler extends FontScaler { ...@@ -254,7 +254,7 @@ class FreetypeFontScaler extends FontScaler {
private native long getUnitsPerEMNative(long pScaler); private native long getUnitsPerEMNative(long pScaler);
native long createScalerContextNative(long pScaler, double[] matrix, native long createScalerContextNative(long pScaler, double[] matrix,
boolean fontType, int aa, int fm, float boldness, float italic); int aa, int fm, float boldness, float italic);
/* Freetype scaler context does not contain any pointers that /* Freetype scaler context does not contain any pointers that
has to be invalidated if native scaler is bad */ has to be invalidated if native scaler is bad */
......
...@@ -66,7 +66,7 @@ class NullFontScaler extends FontScaler { ...@@ -66,7 +66,7 @@ class NullFontScaler extends FontScaler {
long getLayoutTableCache() {return 0L;} long getLayoutTableCache() {return 0L;}
long createScalerContext(double[] matrix, boolean fontType, int aa, long createScalerContext(double[] matrix, int aa,
int fm, float boldness, float italic, boolean disableHinting) { int fm, float boldness, float italic, boolean disableHinting) {
return getNullScalerContext(); return getNullScalerContext();
} }
......
...@@ -106,7 +106,7 @@ public class TrueTypeFont extends FileFont { ...@@ -106,7 +106,7 @@ public class TrueTypeFont extends FileFont {
private static Map<String, Short> lcidMap; private static Map<String, Short> lcidMap;
class DirectoryEntry { static class DirectoryEntry {
int tag; int tag;
int offset; int offset;
int length; int length;
......
...@@ -172,11 +172,11 @@ public class Blit extends GraphicsPrimitive ...@@ -172,11 +172,11 @@ public class Blit extends GraphicsPrimitive
while (si.nextSpan(span)) { while (si.nextSpan(span)) {
int w = span[2] - span[0]; int w = span[2] - span[0];
int h = span[3] - span[1]; int h = span[3] - span[1];
srcRas = srcRas.createChild(srcx + span[0], srcy + span[1], Raster tmpSrcRas = srcRas.createChild(srcx + span[0], srcy + span[1],
w, h, 0, 0, null); w, h, 0, 0, null);
dstRas = dstRas.createWritableChild(span[0], span[1], WritableRaster tmpDstRas = dstRas.createWritableChild(span[0], span[1],
w, h, 0, 0, null); w, h, 0, 0, null);
ctx.compose(srcRas, dstRas, dstRas); ctx.compose(tmpSrcRas, tmpDstRas, tmpDstRas);
} }
ctx.dispose(); ctx.dispose();
} }
......
...@@ -509,6 +509,9 @@ public class DrawImage implements DrawImagePipe ...@@ -509,6 +509,9 @@ public class DrawImage implements DrawImagePipe
* edges thus has to be h*2+2 in length * edges thus has to be h*2+2 in length
*/ */
int edges[] = new int[(dy2-dy1)*2+2]; int edges[] = new int[(dy2-dy1)*2+2];
// It is important that edges[0]=edges[1]=0 when we call
// Transform in case it must return early and we would
// not want to render anything on an error condition.
helper.Transform(tmpmaskblit, srcData, tmpData, helper.Transform(tmpmaskblit, srcData, tmpData,
AlphaComposite.Src, null, AlphaComposite.Src, null,
itx, interpType, itx, interpType,
......
...@@ -43,7 +43,7 @@ java.launcher.opt.footer =\ -cp <class search path of directories and zip ...@@ -43,7 +43,7 @@ java.launcher.opt.footer =\ -cp <class search path of directories and zip
\ and ZIP archives to search for class files.\n\ \ and ZIP archives to search for class files.\n\
\ -D<name>=<value>\n\ \ -D<name>=<value>\n\
\ set a system property\n\ \ set a system property\n\
\ -verbose[:class|gc|jni]\n\ \ -verbose:[class|gc|jni]\n\
\ enable verbose output\n\ \ enable verbose output\n\
\ -version print product version and exit\n\ \ -version print product version and exit\n\
\ -version:<value>\n\ \ -version:<value>\n\
......
...@@ -29,7 +29,6 @@ import java.util.jar.JarFile; ...@@ -29,7 +29,6 @@ import java.util.jar.JarFile;
import java.io.Console; import java.io.Console;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.security.ProtectionDomain; import java.security.ProtectionDomain;
import javax.security.auth.kerberos.KeyTab;
import java.security.AccessController; import java.security.AccessController;
...@@ -52,7 +51,6 @@ public class SharedSecrets { ...@@ -52,7 +51,6 @@ public class SharedSecrets {
private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess; private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess; private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
private static JavaSecurityAccess javaSecurityAccess; private static JavaSecurityAccess javaSecurityAccess;
private static JavaxSecurityAuthKerberosAccess javaxSecurityAuthKerberosAccess;
public static JavaUtilJarAccess javaUtilJarAccess() { public static JavaUtilJarAccess javaUtilJarAccess() {
if (javaUtilJarAccess == null) { if (javaUtilJarAccess == null) {
...@@ -141,16 +139,4 @@ public class SharedSecrets { ...@@ -141,16 +139,4 @@ public class SharedSecrets {
} }
return javaSecurityAccess; return javaSecurityAccess;
} }
public static void setJavaxSecurityAuthKerberosAccess
(JavaxSecurityAuthKerberosAccess jsaka) {
javaxSecurityAuthKerberosAccess = jsaka;
}
public static JavaxSecurityAuthKerberosAccess
getJavaxSecurityAuthKerberosAccess() {
if (javaxSecurityAuthKerberosAccess == null)
unsafe.ensureClassInitialized(KeyTab.class);
return javaxSecurityAuthKerberosAccess;
}
} }
...@@ -532,15 +532,11 @@ public class URLClassPath { ...@@ -532,15 +532,11 @@ public class URLClassPath {
uc = url.openConnection(); uc = url.openConnection();
InputStream in = uc.getInputStream(); InputStream in = uc.getInputStream();
if (uc instanceof JarURLConnection) { if (uc instanceof JarURLConnection) {
/* JarURLConnection.getInputStream() returns a separate /* Need to remember the jar file so it can be closed
* instance on each call. So we have to close this here.
* The jar file cache will keep the file open.
* Also, need to remember the jar file so it can be closed
* in a hurry. * in a hurry.
*/ */
JarURLConnection juc = (JarURLConnection)uc; JarURLConnection juc = (JarURLConnection)uc;
jarfile = juc.getJarFile(); jarfile = juc.getJarFile();
in.close();
} }
} catch (Exception e) { } catch (Exception e) {
return null; return null;
......
此差异已折叠。
...@@ -238,4 +238,14 @@ abstract public class URLConnection extends java.net.URLConnection { ...@@ -238,4 +238,14 @@ abstract public class URLConnection extends java.net.URLConnection {
public void close() { public void close() {
url = null; url = null;
} }
private static HashMap<String,Void> proxiedHosts = new HashMap<>();
public synchronized static void setProxiedHost(String host) {
proxiedHosts.put(host.toLowerCase(), null);
}
public synchronized static boolean isProxiedHost(String host) {
return proxiedHosts.containsKey(host.toLowerCase());
}
} }
...@@ -301,8 +301,12 @@ public class HttpClient extends NetworkClient { ...@@ -301,8 +301,12 @@ public class HttpClient extends NetworkClient {
} else { } else {
SecurityManager security = System.getSecurityManager(); SecurityManager security = System.getSecurityManager();
if (security != null) { if (security != null) {
if (ret.proxy == Proxy.NO_PROXY || ret.proxy == null) {
security.checkConnect(InetAddress.getByName(url.getHost()).getHostAddress(), url.getPort());
} else {
security.checkConnect(url.getHost(), url.getPort()); security.checkConnect(url.getHost(), url.getPort());
} }
}
ret.url = url; ret.url = url;
} }
return ret; return ret;
...@@ -457,6 +461,7 @@ public class HttpClient extends NetworkClient { ...@@ -457,6 +461,7 @@ public class HttpClient extends NetworkClient {
protected synchronized void openServer() throws IOException { protected synchronized void openServer() throws IOException {
SecurityManager security = System.getSecurityManager(); SecurityManager security = System.getSecurityManager();
if (security != null) { if (security != null) {
security.checkConnect(host, port); security.checkConnect(host, port);
} }
...@@ -469,6 +474,7 @@ public class HttpClient extends NetworkClient { ...@@ -469,6 +474,7 @@ public class HttpClient extends NetworkClient {
url.getProtocol().equals("https") ) { url.getProtocol().equals("https") ) {
if ((proxy != null) && (proxy.type() == Proxy.Type.HTTP)) { if ((proxy != null) && (proxy.type() == Proxy.Type.HTTP)) {
sun.net.www.URLConnection.setProxiedHost(host);
privilegedOpenServer((InetSocketAddress) proxy.address()); privilegedOpenServer((InetSocketAddress) proxy.address());
usingProxy = true; usingProxy = true;
return; return;
...@@ -484,6 +490,7 @@ public class HttpClient extends NetworkClient { ...@@ -484,6 +490,7 @@ public class HttpClient extends NetworkClient {
* ftp url. * ftp url.
*/ */
if ((proxy != null) && (proxy.type() == Proxy.Type.HTTP)) { if ((proxy != null) && (proxy.type() == Proxy.Type.HTTP)) {
sun.net.www.URLConnection.setProxiedHost(host);
privilegedOpenServer((InetSocketAddress) proxy.address()); privilegedOpenServer((InetSocketAddress) proxy.address());
usingProxy = true; usingProxy = true;
return; return;
......
...@@ -44,7 +44,7 @@ import java.util.Iterator; ...@@ -44,7 +44,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import sun.misc.SharedSecrets; import sun.security.krb5.KerberosSecrets;
import sun.security.krb5.PrincipalName; import sun.security.krb5.PrincipalName;
/** /**
* Utilities for obtaining and converting Kerberos tickets. * Utilities for obtaining and converting Kerberos tickets.
...@@ -378,7 +378,7 @@ public class Krb5Util { ...@@ -378,7 +378,7 @@ public class Krb5Util {
*/ */
public static EncryptionKey[] keysFromJavaxKeyTab( public static EncryptionKey[] keysFromJavaxKeyTab(
KeyTab ktab, PrincipalName cname) { KeyTab ktab, PrincipalName cname) {
return SharedSecrets.getJavaxSecurityAuthKerberosAccess(). return KerberosSecrets.getJavaxSecurityAuthKerberosAccess().
keyTabGetEncryptionKeys(ktab, cname); keyTabGetEncryptionKeys(ktab, cname);
} }
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* questions. * questions.
*/ */
package sun.misc; package sun.security.krb5;
import javax.security.auth.kerberos.KeyTab; import javax.security.auth.kerberos.KeyTab;
import sun.security.krb5.EncryptionKey; import sun.security.krb5.EncryptionKey;
......
/*
* Copyright (c) 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.security.krb5;
import javax.security.auth.kerberos.KeyTab;
import sun.misc.Unsafe;
public class KerberosSecrets {
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static JavaxSecurityAuthKerberosAccess javaxSecurityAuthKerberosAccess;
public static void setJavaxSecurityAuthKerberosAccess
(JavaxSecurityAuthKerberosAccess jsaka) {
javaxSecurityAuthKerberosAccess = jsaka;
}
public static JavaxSecurityAuthKerberosAccess
getJavaxSecurityAuthKerberosAccess() {
if (javaxSecurityAuthKerberosAccess == null)
unsafe.ensureClassInitialized(KeyTab.class);
return javaxSecurityAuthKerberosAccess;
}
}
/* /*
* Copyright (c) 2003, 2010, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -653,6 +653,13 @@ final class Config { ...@@ -653,6 +653,13 @@ final class Config {
} }
} }
debug(keyword + ": " + lib); debug(keyword + ": " + lib);
// Check to see if full path is specified to prevent the DLL
// preloading attack
if (!(new File(lib)).isAbsolute()) {
throw new ConfigurationException(
"Absolute path required for library value: " + lib);
}
return lib; return lib;
} }
......
/* /*
* Copyright (c) 2005, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -236,7 +236,8 @@ public final class Secmod { ...@@ -236,7 +236,8 @@ public final class Secmod {
throw new IllegalStateException(e); throw new IllegalStateException(e);
} }
if (modules == null) { if (modules == null) {
List<Module> modules = (List<Module>)nssGetModuleList(nssHandle); List<Module> modules = (List<Module>)nssGetModuleList(nssHandle,
nssLibDir);
this.modules = Collections.unmodifiableList(modules); this.modules = Collections.unmodifiableList(modules);
} }
return modules; return modules;
...@@ -358,7 +359,7 @@ public final class Secmod { ...@@ -358,7 +359,7 @@ public final class Secmod {
* A representation of one PKCS#11 slot in a PKCS#11 module. * A representation of one PKCS#11 slot in a PKCS#11 module.
*/ */
public static final class Module { public static final class Module {
// name of the native library // path of the native library
final String libraryName; final String libraryName;
// descriptive name used by NSS // descriptive name used by NSS
final String commonName; final String commonName;
...@@ -371,8 +372,10 @@ public final class Secmod { ...@@ -371,8 +372,10 @@ public final class Secmod {
// trust attributes. Used for the KEYSTORE and TRUSTANCHOR modules only // trust attributes. Used for the KEYSTORE and TRUSTANCHOR modules only
private Map<Bytes,TrustAttributes> trust; private Map<Bytes,TrustAttributes> trust;
Module(String libraryName, String commonName, boolean fips, int slot) { Module(String libraryDir, String libraryName, String commonName,
boolean fips, int slot) {
ModuleType type; ModuleType type;
if ((libraryName == null) || (libraryName.length() == 0)) { if ((libraryName == null) || (libraryName.length() == 0)) {
// must be softtoken // must be softtoken
libraryName = System.mapLibraryName(SOFTTOKEN_LIB_NAME); libraryName = System.mapLibraryName(SOFTTOKEN_LIB_NAME);
...@@ -397,7 +400,7 @@ public final class Secmod { ...@@ -397,7 +400,7 @@ public final class Secmod {
+ "module: " + libraryName + ", " + commonName); + "module: " + libraryName + ", " + commonName);
} }
} }
this.libraryName = libraryName; this.libraryName = (new File(libraryDir, libraryName)).getPath();
this.commonName = commonName; this.commonName = commonName;
this.slot = slot; this.slot = slot;
this.type = type; this.type = type;
...@@ -752,6 +755,6 @@ public final class Secmod { ...@@ -752,6 +755,6 @@ public final class Secmod {
private static native boolean nssInit(String functionName, long handle, String configDir); private static native boolean nssInit(String functionName, long handle, String configDir);
private static native Object nssGetModuleList(long handle); private static native Object nssGetModuleList(long handle, String libDir);
} }
...@@ -1790,7 +1790,21 @@ public class PolicyFile extends java.security.Policy { ...@@ -1790,7 +1790,21 @@ public class PolicyFile extends java.security.Policy {
CodeSource canonCs = cs; CodeSource canonCs = cs;
URL u = cs.getLocation(); URL u = cs.getLocation();
if (u != null && u.getProtocol().equals("file")) { if (u != null) {
if (u.getProtocol().equals("jar")) {
// unwrap url embedded inside jar url
String spec = u.getFile();
int separator = spec.indexOf("!/");
if (separator != -1) {
try {
u = new URL(spec.substring(0, separator));
} catch (MalformedURLException e) {
// Fail silently. In this case, url stays what
// it was above
}
}
}
if (u.getProtocol().equals("file")) {
boolean isLocalFile = false; boolean isLocalFile = false;
String host = u.getHost(); String host = u.getHost();
isLocalFile = (host == null || host.equals("") || isLocalFile = (host == null || host.equals("") ||
...@@ -1801,6 +1815,7 @@ public class PolicyFile extends java.security.Policy { ...@@ -1801,6 +1815,7 @@ public class PolicyFile extends java.security.Policy {
path = ParseUtil.decode(path); path = ParseUtil.decode(path);
} }
} }
}
if (path != null) { if (path != null) {
try { try {
......
...@@ -4193,15 +4193,11 @@ class Pair<A, B> { ...@@ -4193,15 +4193,11 @@ class Pair<A, B> {
return "Pair[" + fst + "," + snd + "]"; return "Pair[" + fst + "," + snd + "]";
} }
private static boolean equals(Object x, Object y) {
return (x == null && y == null) || (x != null && x.equals(y));
}
public boolean equals(Object other) { public boolean equals(Object other) {
return return
other instanceof Pair && other instanceof Pair &&
equals(fst, ((Pair)other).fst) && Objects.equals(fst, ((Pair)other).fst) &&
equals(snd, ((Pair)other).snd); Objects.equals(snd, ((Pair)other).snd);
} }
public int hashCode() { public int hashCode() {
......
/* /*
* Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -318,13 +318,6 @@ public class DistributionPoint { ...@@ -318,13 +318,6 @@ public class DistributionPoint {
out.write(DerValue.tag_Sequence, tagged); out.write(DerValue.tag_Sequence, tagged);
} }
/**
* Utility function for a.equals(b) where both a and b may be null.
*/
private static boolean equals(Object a, Object b) {
return (a == null) ? (b == null) : a.equals(b);
}
/** /**
* Compare an object to this DistributionPoint for equality. * Compare an object to this DistributionPoint for equality.
* *
...@@ -340,9 +333,9 @@ public class DistributionPoint { ...@@ -340,9 +333,9 @@ public class DistributionPoint {
} }
DistributionPoint other = (DistributionPoint)obj; DistributionPoint other = (DistributionPoint)obj;
boolean equal = equals(this.fullName, other.fullName) boolean equal = Objects.equals(this.fullName, other.fullName)
&& equals(this.relativeName, other.relativeName) && Objects.equals(this.relativeName, other.relativeName)
&& equals(this.crlIssuer, other.crlIssuer) && Objects.equals(this.crlIssuer, other.crlIssuer)
&& Arrays.equals(this.reasonFlags, other.reasonFlags); && Arrays.equals(this.reasonFlags, other.reasonFlags);
return equal; return equal;
} }
......
/* /*
* Copyright (c) 2005, 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -201,8 +201,8 @@ public class DistributionPointName { ...@@ -201,8 +201,8 @@ public class DistributionPointName {
} }
DistributionPointName other = (DistributionPointName)obj; DistributionPointName other = (DistributionPointName)obj;
return equals(this.fullName, other.fullName) && return Objects.equals(this.fullName, other.fullName) &&
equals(this.relativeName, other.relativeName); Objects.equals(this.relativeName, other.relativeName);
} }
/** /**
...@@ -239,11 +239,4 @@ public class DistributionPointName { ...@@ -239,11 +239,4 @@ public class DistributionPointName {
return sb.toString(); return sb.toString();
} }
/*
* Utility function for a.equals(b) where both a and b may be null.
*/
private static boolean equals(Object a, Object b) {
return (a == null) ? (b == null) : a.equals(b);
}
} }
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "jni.h" #include "jni.h"
#include "jvm.h" #include "jvm.h"
#include "jdk_util_md.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
......
...@@ -1971,6 +1971,13 @@ Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_readImage ...@@ -1971,6 +1971,13 @@ Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_readImage
return data->abortFlag; return data->abortFlag;
} }
if (cinfo->output_components <= 0 ||
cinfo->image_width > (0xffffffffu / (unsigned int)cinfo->output_components))
{
JNU_ThrowByName(env, "javax/imageio/IIOException",
"Invalid number of output components");
return data->abortFlag;
}
// Allocate a 1-scanline buffer // Allocate a 1-scanline buffer
scanLinePtr = (JSAMPROW)malloc(cinfo->image_width*cinfo->output_components); scanLinePtr = (JSAMPROW)malloc(cinfo->image_width*cinfo->output_components);
......
...@@ -367,7 +367,7 @@ static double euclidianDistance(double a, double b) { ...@@ -367,7 +367,7 @@ static double euclidianDistance(double a, double b) {
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
Java_sun_font_FreetypeFontScaler_createScalerContextNative( Java_sun_font_FreetypeFontScaler_createScalerContextNative(
JNIEnv *env, jobject scaler, jlong pScaler, jdoubleArray matrix, JNIEnv *env, jobject scaler, jlong pScaler, jdoubleArray matrix,
jboolean ttFont, jint aa, jint fm, jfloat boldness, jfloat italic) { jint aa, jint fm, jfloat boldness, jfloat italic) {
double dmat[4], ptsz; double dmat[4], ptsz;
FTScalerContext *context = FTScalerContext *context =
(FTScalerContext*) calloc(1, sizeof(FTScalerContext)); (FTScalerContext*) calloc(1, sizeof(FTScalerContext));
......
...@@ -186,7 +186,11 @@ JNIEXPORT void JNICALL Java_sun_font_SunLayoutEngine_nativeLayout ...@@ -186,7 +186,11 @@ JNIEXPORT void JNICALL Java_sun_font_SunLayoutEngine_nativeLayout
jchar buffer[256]; jchar buffer[256];
jchar* chars = buffer; jchar* chars = buffer;
if (len > 256) { if (len > 256) {
chars = (jchar*)malloc(len * sizeof(jchar)); size_t size = len * sizeof(jchar);
if (size / sizeof(jchar) != len) {
return;
}
chars = (jchar*)malloc(size);
if (chars == 0) { if (chars == 0) {
return; return;
} }
......
...@@ -233,9 +233,19 @@ JNIEXPORT jlong JNICALL Java_sun_java2d_cmm_lcms_LCMS_loadProfile ...@@ -233,9 +233,19 @@ JNIEXPORT jlong JNICALL Java_sun_java2d_cmm_lcms_LCMS_loadProfile
jint dataSize; jint dataSize;
storeID_t sProf; storeID_t sProf;
if (JNU_IsNull(env, data)) {
JNU_ThrowIllegalArgumentException(env, "Invalid profile data");
return 0L;
}
dataArray = (*env)->GetByteArrayElements (env, data, 0); dataArray = (*env)->GetByteArrayElements (env, data, 0);
dataSize = (*env)->GetArrayLength (env, data); dataSize = (*env)->GetArrayLength (env, data);
if (dataArray == NULL) {
JNU_ThrowIllegalArgumentException(env, "Invalid profile data");
return 0L;
}
sProf.pf = cmsOpenProfileFromMem((const void *)dataArray, sProf.pf = cmsOpenProfileFromMem((const void *)dataArray,
(cmsUInt32Number) dataSize); (cmsUInt32Number) dataSize);
...@@ -334,8 +344,9 @@ JNIEXPORT void JNICALL Java_sun_java2d_cmm_lcms_LCMS_getProfileData ...@@ -334,8 +344,9 @@ JNIEXPORT void JNICALL Java_sun_java2d_cmm_lcms_LCMS_getProfileData
} }
/* Get profile header info */ /* Get profile header info */
cmsBool _getHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize); static cmsBool _getHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize);
cmsBool _setHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize); static cmsBool _setHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize);
static cmsBool _writeCookedTag(cmsHPROFILE pfTarget, cmsTagSignature sig, jbyte *pData, jint size);
/* /*
* Class: sun_java2d_cmm_lcms_LCMS * Class: sun_java2d_cmm_lcms_LCMS
...@@ -468,22 +479,30 @@ JNIEXPORT void JNICALL Java_sun_java2d_cmm_lcms_LCMS_setTagData ...@@ -468,22 +479,30 @@ JNIEXPORT void JNICALL Java_sun_java2d_cmm_lcms_LCMS_setTagData
sProf.j = id; sProf.j = id;
sig.j = tagSig; sig.j = tagSig;
if (JNU_IsNull(env, data)) {
JNU_ThrowIllegalArgumentException(env, "Can not write tag data.");
return;
}
tagSize =(*env)->GetArrayLength(env, data); tagSize =(*env)->GetArrayLength(env, data);
dataArray = (*env)->GetByteArrayElements(env, data, 0); dataArray = (*env)->GetByteArrayElements(env, data, 0);
if (dataArray == NULL) {
JNU_ThrowIllegalArgumentException(env, "Can not write tag data.");
return;
}
if (tagSig == SigHead) { if (tagSig == SigHead) {
status = _setHeaderInfo(sProf.pf, dataArray, tagSize); status = _setHeaderInfo(sProf.pf, dataArray, tagSize);
} else { } else {
status = cmsWriteRawTag(sProf.pf, sig.cms, dataArray, tagSize); status = _writeCookedTag(sProf.pf, sig.cms, dataArray, tagSize);
} }
(*env)->ReleaseByteArrayElements(env, data, dataArray, 0); (*env)->ReleaseByteArrayElements(env, data, dataArray, 0);
if (!status) { if (!status) {
JNU_ThrowByName(env, "java/awt/color/CMMException", JNU_ThrowIllegalArgumentException(env, "Can not write tag data.");
"Can not write tag data.");
} }
} }
...@@ -645,7 +664,7 @@ JNIEXPORT void JNICALL Java_sun_java2d_cmm_lcms_LCMS_initLCMS ...@@ -645,7 +664,7 @@ JNIEXPORT void JNICALL Java_sun_java2d_cmm_lcms_LCMS_initLCMS
PF_ID_fID = (*env)->GetFieldID (env, Pf, "ID", "J"); PF_ID_fID = (*env)->GetFieldID (env, Pf, "ID", "J");
} }
cmsBool _getHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize) static cmsBool _getHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize)
{ {
cmsUInt32Number pfSize = 0; cmsUInt32Number pfSize = 0;
cmsUInt8Number* pfBuffer = NULL; cmsUInt8Number* pfBuffer = NULL;
...@@ -672,7 +691,7 @@ cmsBool _getHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize) ...@@ -672,7 +691,7 @@ cmsBool _getHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize)
return status; return status;
} }
cmsBool _setHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize) static cmsBool _setHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize)
{ {
cmsICCHeader pfHeader = { 0 }; cmsICCHeader pfHeader = { 0 };
...@@ -696,3 +715,77 @@ cmsBool _setHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize) ...@@ -696,3 +715,77 @@ cmsBool _setHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize)
return TRUE; return TRUE;
} }
static cmsBool _writeCookedTag(cmsHPROFILE pfTarget,
cmsTagSignature sig,
jbyte *pData, jint size)
{
cmsBool status;
cmsUInt32Number pfSize = 0;
cmsUInt8Number* pfBuffer = NULL;
cmsHPROFILE p = cmsCreateProfilePlaceholder(NULL);
if (NULL != p) {
cmsICCHeader hdr = { 0 };
/* Populate the placeholder's header according to target profile */
hdr.flags = cmsGetHeaderFlags(pfTarget);
hdr.renderingIntent = cmsGetHeaderRenderingIntent(pfTarget);
hdr.manufacturer = cmsGetHeaderManufacturer(pfTarget);
hdr.model = cmsGetHeaderModel(pfTarget);
hdr.pcs = cmsGetPCS(pfTarget);
hdr.colorSpace = cmsGetColorSpace(pfTarget);
hdr.deviceClass = cmsGetDeviceClass(pfTarget);
hdr.version = cmsGetEncodedICCversion(pfTarget);
cmsGetHeaderAttributes(pfTarget, &hdr.attributes);
cmsGetHeaderProfileID(pfTarget, (cmsUInt8Number*)&hdr.profileID);
cmsSetHeaderFlags(p, hdr.flags);
cmsSetHeaderManufacturer(p, hdr.manufacturer);
cmsSetHeaderModel(p, hdr.model);
cmsSetHeaderAttributes(p, hdr.attributes);
cmsSetHeaderProfileID(p, (cmsUInt8Number*)&(hdr.profileID));
cmsSetHeaderRenderingIntent(p, hdr.renderingIntent);
cmsSetPCS(p, hdr.pcs);
cmsSetColorSpace(p, hdr.colorSpace);
cmsSetDeviceClass(p, hdr.deviceClass);
cmsSetEncodedICCversion(p, hdr.version);
if (cmsWriteRawTag(p, sig, pData, size)) {
if (cmsSaveProfileToMem(p, NULL, &pfSize)) {
pfBuffer = malloc(pfSize);
if (pfBuffer != NULL) {
/* load raw profile data into the buffer */
if (!cmsSaveProfileToMem(p, pfBuffer, &pfSize)) {
free(pfBuffer);
pfBuffer = NULL;
}
}
}
}
cmsCloseProfile(p);
}
if (pfBuffer == NULL) {
return FALSE;
}
/* re-open the placeholder profile */
p = cmsOpenProfileFromMem(pfBuffer, pfSize);
free(pfBuffer);
status = FALSE;
if (p != NULL) {
/* Note that pCookedTag points to internal structures of the placeholder,
* so this data is valid only while the placeholder is open.
*/
void *pCookedTag = cmsReadTag(p, sig);
if (pCookedTag != NULL) {
status = cmsWriteTag(pfTarget, sig, pCookedTag);
}
pCookedTag = NULL;
cmsCloseProfile(p);
}
return status;
}
...@@ -1636,6 +1636,11 @@ cmsInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig ...@@ -1636,6 +1636,11 @@ cmsInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig
TagDescriptor = _cmsGetTagDescriptor(sig); TagDescriptor = _cmsGetTagDescriptor(sig);
// Serialize // Serialize
if (!_cmsWriteTypeBase(MemIO, TypeHandler ->Signature)) {
cmsCloseIOhandler(MemIO);
return 0;
}
if (!TypeHandler ->WritePtr(TypeHandler, MemIO, Object, TagDescriptor ->ElemCount)) return 0; if (!TypeHandler ->WritePtr(TypeHandler, MemIO, Object, TagDescriptor ->ElemCount)) return 0;
// Get Size and close // Get Size and close
......
...@@ -74,6 +74,94 @@ static TransformInterpFunc BicubicInterpStub; ...@@ -74,6 +74,94 @@ static TransformInterpFunc BicubicInterpStub;
TransformInterpFunc *pBilinearFunc = BilinearInterp; TransformInterpFunc *pBilinearFunc = BilinearInterp;
TransformInterpFunc *pBicubicFunc = BicubicInterp; TransformInterpFunc *pBicubicFunc = BicubicInterp;
/*
* The dxydxy parameters of the inverse transform determine how
* quickly we step through the source image. For tiny scale
* factors (on the order of 1E-16 or so) the stepping distances
* are huge. The image has been scaled so small that stepping
* a single pixel in device space moves the sampling point by
* billions (or more) pixels in the source image space. These
* huge stepping values can overflow the whole part of the longs
* we use for the fixed point stepping equations and so we need
* a more robust solution. We could simply iterate over every
* device pixel, use the inverse transform to transform it back
* into the source image coordinate system and then test it for
* being in range and sample pixel-by-pixel, but that is quite
* a bit more expensive. Fortunately, if the scale factors are
* so tiny that we overflow our long values then the number of
* pixels we are planning to visit should be very tiny. The only
* exception to that rule is if the scale factor along one
* dimension is tiny (creating the huge stepping values), and
* the scale factor along the other dimension is fairly regular
* or an up-scale. In that case we have a lot of pixels along
* the direction of the larger axis to sample, but few along the
* smaller axis. Though, pessimally, with an added shear factor
* such a linearly tiny image could have bounds that cover a large
* number of pixels. Such odd transformations should be very
* rare and the absolute limit on calculations would involve a
* single reverse transform of every pixel in the output image
* which is not fast, but it should not cause an undue stall
* of the rendering software.
*
* The specific test we will use is to calculate the inverse
* transformed values of every corner of the destination bounds
* (in order to be user-clip independent) and if we can
* perform a fixed-point-long inverse transform of all of
* those points without overflowing we will use the fast
* fixed point algorithm. Otherwise we will use the safe
* per-pixel transform algorithm.
* The 4 corners are 0,0, 0,dsth, dstw,0, dstw,dsth
* Transformed they are:
* tx, ty
* tx +dxdy*H, ty +dydy*H
* tx+dxdx*W, ty+dydx*W
* tx+dxdx*W+dxdy*H, ty+dydx*W+dydy*H
*/
/* We reject coordinates not less than 1<<30 so that the distance between */
/* any 2 of them is less than 1<<31 which would overflow into the sign */
/* bit of a signed long value used to represent fixed point coordinates. */
#define TX_FIXED_UNSAFE(v) (fabs(v) >= (1<<30))
static jboolean
checkOverflow(jint dxoff, jint dyoff,
SurfaceDataBounds *pBounds,
TransformInfo *pItxInfo,
jdouble *retx, jdouble *rety)
{
jdouble x, y;
x = dxoff+pBounds->x1+0.5; /* Center of pixel x1 */
y = dyoff+pBounds->y1+0.5; /* Center of pixel y1 */
Transform_transform(pItxInfo, &x, &y);
*retx = x;
*rety = y;
if (TX_FIXED_UNSAFE(x) || TX_FIXED_UNSAFE(y)) {
return JNI_TRUE;
}
x = dxoff+pBounds->x2-0.5; /* Center of pixel x2-1 */
y = dyoff+pBounds->y1+0.5; /* Center of pixel y1 */
Transform_transform(pItxInfo, &x, &y);
if (TX_FIXED_UNSAFE(x) || TX_FIXED_UNSAFE(y)) {
return JNI_TRUE;
}
x = dxoff+pBounds->x1+0.5; /* Center of pixel x1 */
y = dyoff+pBounds->y2-0.5; /* Center of pixel y2-1 */
Transform_transform(pItxInfo, &x, &y);
if (TX_FIXED_UNSAFE(x) || TX_FIXED_UNSAFE(y)) {
return JNI_TRUE;
}
x = dxoff+pBounds->x2-0.5; /* Center of pixel x2-1 */
y = dyoff+pBounds->y2-0.5; /* Center of pixel y2-1 */
Transform_transform(pItxInfo, &x, &y);
if (TX_FIXED_UNSAFE(x) || TX_FIXED_UNSAFE(y)) {
return JNI_TRUE;
}
return JNI_FALSE;
}
/* /*
* Fill the edge buffer with pairs of coordinates representing the maximum * Fill the edge buffer with pairs of coordinates representing the maximum
* left and right pixels of the destination surface that should be processed * left and right pixels of the destination surface that should be processed
...@@ -82,21 +170,19 @@ TransformInterpFunc *pBicubicFunc = BicubicInterp; ...@@ -82,21 +170,19 @@ TransformInterpFunc *pBicubicFunc = BicubicInterp;
* Only pixels that map back through the specified (inverse) transform to a * Only pixels that map back through the specified (inverse) transform to a
* source coordinate that falls within the (0, 0, sw, sh) bounds of the * source coordinate that falls within the (0, 0, sw, sh) bounds of the
* source image should be processed. * source image should be processed.
* pEdgeBuf points to an array of jints that holds MAXEDGES*2 values. * pEdges points to an array of jints that holds 2 + numedges*2 values where
* If more storage is needed, then this function allocates a new buffer. * numedges should match (pBounds->y2 - pBounds->y1).
* In either case, a pointer to the buffer actually used to store the * The first two jints in pEdges should be set to y1 and y2 and every pair
* results is returned. * of jints after that represent the xmin,xmax of all pixels in range of
* The caller is responsible for freeing the buffer if the return value * the transformed blit for the corresponding scanline.
* is not the same as the original pEdgeBuf passed in.
*/ */
static jint * static void
calculateEdges(jint *pEdgeBuf, calculateEdges(jint *pEdges,
SurfaceDataBounds *pBounds, SurfaceDataBounds *pBounds,
TransformInfo *pItxInfo, TransformInfo *pItxInfo,
jlong xbase, jlong ybase, jlong xbase, jlong ybase,
juint sw, juint sh) juint sw, juint sh)
{ {
jint *pEdges;
jlong dxdxlong, dydxlong; jlong dxdxlong, dydxlong;
jlong dxdylong, dydylong; jlong dxdylong, dydylong;
jlong drowxlong, drowylong; jlong drowxlong, drowylong;
...@@ -111,10 +197,8 @@ calculateEdges(jint *pEdgeBuf, ...@@ -111,10 +197,8 @@ calculateEdges(jint *pEdgeBuf,
dy1 = pBounds->y1; dy1 = pBounds->y1;
dx2 = pBounds->x2; dx2 = pBounds->x2;
dy2 = pBounds->y2; dy2 = pBounds->y2;
if ((dy2-dy1) > MAXEDGES) { *pEdges++ = dy1;
pEdgeBuf = malloc(2 * (dy2-dy1) * sizeof (*pEdges)); *pEdges++ = dy2;
}
pEdges = pEdgeBuf;
drowxlong = (dx2-dx1-1) * dxdxlong; drowxlong = (dx2-dx1-1) * dxdxlong;
drowylong = (dx2-dx1-1) * dydxlong; drowylong = (dx2-dx1-1) * dydxlong;
...@@ -155,10 +239,22 @@ calculateEdges(jint *pEdgeBuf, ...@@ -155,10 +239,22 @@ calculateEdges(jint *pEdgeBuf,
ybase += dydylong; ybase += dydylong;
dy1++; dy1++;
} }
return pEdgeBuf;
} }
static void
Transform_SafeHelper(JNIEnv *env,
SurfaceDataOps *srcOps,
SurfaceDataOps *dstOps,
SurfaceDataRasInfo *pSrcInfo,
SurfaceDataRasInfo *pDstInfo,
NativePrimitive *pMaskBlitPrim,
CompositeInfo *pCompInfo,
TransformHelperFunc *pHelperFunc,
TransformInterpFunc *pInterpFunc,
RegionData *pClipInfo, TransformInfo *pItxInfo,
jint *pData, jint *pEdges,
jint dxoff, jint dyoff, jint sw, jint sh);
/* /*
* Class: sun_java2d_loops_TransformHelper * Class: sun_java2d_loops_TransformHelper
* Method: Transform * Method: Transform
...@@ -187,12 +283,14 @@ Java_sun_java2d_loops_TransformHelper_Transform ...@@ -187,12 +283,14 @@ Java_sun_java2d_loops_TransformHelper_Transform
jint maxlinepix; jint maxlinepix;
TransformHelperFunc *pHelperFunc; TransformHelperFunc *pHelperFunc;
TransformInterpFunc *pInterpFunc; TransformInterpFunc *pInterpFunc;
jint edgebuf[MAXEDGES * 2]; jdouble xorig, yorig;
jint numedges;
jint *pEdges; jint *pEdges;
jdouble x, y; jint edgebuf[2 + MAXEDGES * 2];
jlong xbase, ybase; union {
jlong dxdxlong, dydxlong; jlong align;
jlong dxdylong, dydylong; jint data[LINE_SIZE];
} rgb;
#ifdef MAKE_STUBS #ifdef MAKE_STUBS
static int th_initialized; static int th_initialized;
...@@ -269,40 +367,63 @@ Java_sun_java2d_loops_TransformHelper_Transform ...@@ -269,40 +367,63 @@ Java_sun_java2d_loops_TransformHelper_Transform
if (srcOps->Lock(env, srcOps, &srcInfo, pHelperPrim->srcflags) if (srcOps->Lock(env, srcOps, &srcInfo, pHelperPrim->srcflags)
!= SD_SUCCESS) != SD_SUCCESS)
{ {
/* edgeArray should already contain zeros for min/maxy */
return; return;
} }
if (dstOps->Lock(env, dstOps, &dstInfo, pMaskBlitPrim->dstflags) if (dstOps->Lock(env, dstOps, &dstInfo, pMaskBlitPrim->dstflags)
!= SD_SUCCESS) != SD_SUCCESS)
{ {
SurfaceData_InvokeUnlock(env, srcOps, &srcInfo); SurfaceData_InvokeUnlock(env, srcOps, &srcInfo);
/* edgeArray should already contain zeros for min/maxy */
return; return;
} }
Region_IntersectBounds(&clipInfo, &dstInfo.bounds); Region_IntersectBounds(&clipInfo, &dstInfo.bounds);
numedges = (dstInfo.bounds.y2 - dstInfo.bounds.y1);
if (numedges > MAXEDGES) {
pEdges = malloc((2 + 2 * numedges) * sizeof (*pEdges));
if (pEdges == NULL) {
SurfaceData_InvokeUnlock(env, dstOps, &dstInfo);
SurfaceData_InvokeUnlock(env, srcOps, &srcInfo);
/* edgeArray should already contain zeros for min/maxy */
return;
}
} else {
pEdges = edgebuf;
}
Transform_GetInfo(env, itxform, &itxInfo); Transform_GetInfo(env, itxform, &itxInfo);
if (!Region_IsEmpty(&clipInfo)) {
srcOps->GetRasInfo(env, srcOps, &srcInfo);
dstOps->GetRasInfo(env, dstOps, &dstInfo);
if (srcInfo.rasBase == NULL || dstInfo.rasBase == NULL) {
pEdges[0] = pEdges[1] = 0;
} else if (checkOverflow(dxoff, dyoff, &dstInfo.bounds,
&itxInfo, &xorig, &yorig))
{
Transform_SafeHelper(env, srcOps, dstOps,
&srcInfo, &dstInfo,
pMaskBlitPrim, &compInfo,
pHelperFunc, pInterpFunc,
&clipInfo, &itxInfo, rgb.data, pEdges,
dxoff, dyoff, sx2-sx1, sy2-sy1);
} else {
SurfaceDataBounds span;
jlong dxdxlong, dydxlong;
jlong dxdylong, dydylong;
jlong xbase, ybase;
dxdxlong = DblToLong(itxInfo.dxdx); dxdxlong = DblToLong(itxInfo.dxdx);
dydxlong = DblToLong(itxInfo.dydx); dydxlong = DblToLong(itxInfo.dydx);
dxdylong = DblToLong(itxInfo.dxdy); dxdylong = DblToLong(itxInfo.dxdy);
dydylong = DblToLong(itxInfo.dydy); dydylong = DblToLong(itxInfo.dydy);
x = dxoff+dstInfo.bounds.x1+0.5; /* Center of pixel x1 */ xbase = DblToLong(xorig);
y = dyoff+dstInfo.bounds.y1+0.5; /* Center of pixel y1 */ ybase = DblToLong(yorig);
Transform_transform(&itxInfo, &x, &y);
xbase = DblToLong(x);
ybase = DblToLong(y);
pEdges = calculateEdges(edgebuf, &dstInfo.bounds, &itxInfo, calculateEdges(pEdges, &dstInfo.bounds, &itxInfo,
xbase, ybase, sx2-sx1, sy2-sy1); xbase, ybase, sx2-sx1, sy2-sy1);
if (!Region_IsEmpty(&clipInfo)) {
srcOps->GetRasInfo(env, srcOps, &srcInfo);
dstOps->GetRasInfo(env, dstOps, &dstInfo);
if (srcInfo.rasBase && dstInfo.rasBase) {
union {
jlong align;
jint data[LINE_SIZE];
} rgb;
SurfaceDataBounds span;
Region_StartIteration(env, &clipInfo); Region_StartIteration(env, &clipInfo);
while (Region_NextIteration(&clipInfo, &span)) { while (Region_NextIteration(&clipInfo, &span)) {
jlong rowxlong, rowylong; jlong rowxlong, rowylong;
...@@ -318,8 +439,8 @@ Java_sun_java2d_loops_TransformHelper_Transform ...@@ -318,8 +439,8 @@ Java_sun_java2d_loops_TransformHelper_Transform
/* Note - process at most one scanline at a time. */ /* Note - process at most one scanline at a time. */
dx1 = pEdges[(dy1 - dstInfo.bounds.y1) * 2]; dx1 = pEdges[(dy1 - dstInfo.bounds.y1) * 2 + 2];
dx2 = pEdges[(dy1 - dstInfo.bounds.y1) * 2 + 1]; dx2 = pEdges[(dy1 - dstInfo.bounds.y1) * 2 + 3];
if (dx1 < span.x1) dx1 = span.x1; if (dx1 < span.x1) dx1 = span.x1;
if (dx2 > span.x2) dx2 = span.x2; if (dx2 > span.x2) dx2 = span.x2;
...@@ -376,21 +497,124 @@ Java_sun_java2d_loops_TransformHelper_Transform ...@@ -376,21 +497,124 @@ Java_sun_java2d_loops_TransformHelper_Transform
} }
SurfaceData_InvokeRelease(env, dstOps, &dstInfo); SurfaceData_InvokeRelease(env, dstOps, &dstInfo);
SurfaceData_InvokeRelease(env, srcOps, &srcInfo); SurfaceData_InvokeRelease(env, srcOps, &srcInfo);
} else {
pEdges[0] = pEdges[1] = 0;
} }
SurfaceData_InvokeUnlock(env, dstOps, &dstInfo); SurfaceData_InvokeUnlock(env, dstOps, &dstInfo);
SurfaceData_InvokeUnlock(env, srcOps, &srcInfo); SurfaceData_InvokeUnlock(env, srcOps, &srcInfo);
if (!JNU_IsNull(env, edgeArray)) { if (!JNU_IsNull(env, edgeArray)) {
(*env)->SetIntArrayRegion(env, edgeArray, 0, 1, &dstInfo.bounds.y1); (*env)->SetIntArrayRegion(env, edgeArray, 0, 2+numedges*2, pEdges);
(*env)->SetIntArrayRegion(env, edgeArray, 1, 1, &dstInfo.bounds.y2);
(*env)->SetIntArrayRegion(env, edgeArray,
2, (dstInfo.bounds.y2 - dstInfo.bounds.y1)*2,
pEdges);
} }
if (pEdges != edgebuf) { if (pEdges != edgebuf) {
free(pEdges); free(pEdges);
} }
} }
static void
Transform_SafeHelper(JNIEnv *env,
SurfaceDataOps *srcOps,
SurfaceDataOps *dstOps,
SurfaceDataRasInfo *pSrcInfo,
SurfaceDataRasInfo *pDstInfo,
NativePrimitive *pMaskBlitPrim,
CompositeInfo *pCompInfo,
TransformHelperFunc *pHelperFunc,
TransformInterpFunc *pInterpFunc,
RegionData *pClipInfo, TransformInfo *pItxInfo,
jint *pData, jint *pEdges,
jint dxoff, jint dyoff, jint sw, jint sh)
{
SurfaceDataBounds span;
jint dx1, dx2;
jint dy1, dy2;
jint i, iy;
dy1 = pDstInfo->bounds.y1;
dy2 = pDstInfo->bounds.y2;
dx1 = pDstInfo->bounds.x1;
dx2 = pDstInfo->bounds.x2;
pEdges[0] = dy1;
pEdges[1] = dy2;
for (iy = dy1; iy < dy2; iy++) {
jint i = (iy - dy1) * 2;
/* row spans are set to max,min until we find a pixel in range below */
pEdges[i + 2] = dx2;
pEdges[i + 3] = dx1;
}
Region_StartIteration(env, pClipInfo);
while (Region_NextIteration(pClipInfo, &span)) {
dy1 = span.y1;
dy2 = span.y2;
while (dy1 < dy2) {
dx1 = span.x1;
dx2 = span.x2;
i = (dy1 - pDstInfo->bounds.y1) * 2;
while (dx1 < dx2) {
jdouble x, y;
jlong xlong, ylong;
x = dxoff + dx1 + 0.5;
y = dyoff + dy1 + 0.5;
Transform_transform(pItxInfo, &x, &y);
xlong = DblToLong(x);
ylong = DblToLong(y);
/* Process only pixels with centers in bounds
* Test double values to avoid overflow in conversion
* to long values and then also test the long values
* in case they rounded up and out of bounds during
* the conversion.
*/
if (x >= 0 && y >= 0 && x < sw && y < sh &&
WholeOfLong(xlong) < sw &&
WholeOfLong(ylong) < sh)
{
void *pDst;
if (pEdges[i + 2] > dx1) {
pEdges[i + 2] = dx1;
}
if (pEdges[i + 3] <= dx1) {
pEdges[i + 3] = dx1 + 1;
}
/* Get IntArgbPre pixel data from source */
(*pHelperFunc)(pSrcInfo,
pData, 1,
xlong, 0,
ylong, 0);
/* Interpolate result pixels if needed */
if (pInterpFunc) {
(*pInterpFunc)(pData, 1,
FractOfLong(xlong-LongOneHalf), 0,
FractOfLong(ylong-LongOneHalf), 0);
}
/* Store/Composite interpolated pixels into dest */
pDst = PtrCoord(pDstInfo->rasBase,
dx1, pDstInfo->pixelStride,
dy1, pDstInfo->scanStride);
(*pMaskBlitPrim->funcs.maskblit)(pDst, pData,
0, 0, 0,
1, 1,
pDstInfo, pSrcInfo,
pMaskBlitPrim,
pCompInfo);
}
/* Increment to next input pixel */
dx1++;
}
/* Increment to next scanline */
dy1++;
}
}
Region_EndIteration(env, pClipInfo);
}
#define BL_INTERP_V1_to_V2_by_F(v1, v2, f) \ #define BL_INTERP_V1_to_V2_by_F(v1, v2, f) \
(((v1)<<8) + ((v2)-(v1))*(f)) (((v1)<<8) + ((v2)-(v1))*(f))
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the Elliptic Curve Cryptography library. * The Original Code is the Elliptic Curve Cryptography library.
* *
...@@ -37,23 +34,7 @@ ...@@ -37,23 +34,7 @@
* Dr Vipul Gupta <vipul.gupta@sun.com> and * Dr Vipul Gupta <vipul.gupta@sun.com> and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "mplogic.h" #include "mplogic.h"
#include "ec.h" #include "ec.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the Elliptic Curve Cryptography library. * The Original Code is the Elliptic Curve Cryptography library.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories * Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#ifndef __ec_h_ #ifndef __ec_h_
#define __ec_h_ #define __ec_h_
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library for binary polynomial field curves. * The Original Code is the elliptic curve math library for binary polynomial field curves.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _EC2_H #ifndef _EC2_H
#define _EC2_H #define _EC2_H
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library for binary polynomial field curves. * The Original Code is the elliptic curve math library for binary polynomial field curves.
* *
...@@ -38,23 +35,7 @@ ...@@ -38,23 +35,7 @@
* Stephen Fung <fungstep@hotmail.com>, and * Stephen Fung <fungstep@hotmail.com>, and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories. * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories.
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "ec2.h" #include "ec2.h"
#include "mp_gf2m.h" #include "mp_gf2m.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library for binary polynomial field curves. * The Original Code is the elliptic curve math library for binary polynomial field curves.
* *
...@@ -38,23 +35,7 @@ ...@@ -38,23 +35,7 @@
* Stephen Fung <fungstep@hotmail.com>, and * Stephen Fung <fungstep@hotmail.com>, and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories. * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories.
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "ec2.h" #include "ec2.h"
#include "mp_gf2m.h" #include "mp_gf2m.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library for binary polynomial field curves. * The Original Code is the elliptic curve math library for binary polynomial field curves.
* *
...@@ -38,23 +35,7 @@ ...@@ -38,23 +35,7 @@
* Stephen Fung <fungstep@hotmail.com>, and * Stephen Fung <fungstep@hotmail.com>, and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories. * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories.
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "ec2.h" #include "ec2.h"
#include "mp_gf2m.h" #include "mp_gf2m.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library for binary polynomial field curves. * The Original Code is the elliptic curve math library for binary polynomial field curves.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "ec2.h" #include "ec2.h"
#include "mplogic.h" #include "mplogic.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library for binary polynomial field curves. * The Original Code is the elliptic curve math library for binary polynomial field curves.
* *
...@@ -38,23 +35,7 @@ ...@@ -38,23 +35,7 @@
* Stephen Fung <fungstep@hotmail.com>, and * Stephen Fung <fungstep@hotmail.com>, and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories. * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories.
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "ec2.h" #include "ec2.h"
#include "mplogic.h" #include "mplogic.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library. * The Original Code is the elliptic curve math library.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Stephen Fung <fungstep@hotmail.com>, Sun Microsystems Laboratories * Stephen Fung <fungstep@hotmail.com>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "ecl-priv.h" #include "ecl-priv.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the Netscape security libraries. * The Original Code is the Netscape security libraries.
* *
...@@ -37,23 +34,7 @@ ...@@ -37,23 +34,7 @@
* Dr Vipul Gupta <vipul.gupta@sun.com> and * Dr Vipul Gupta <vipul.gupta@sun.com> and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _ECC_IMPL_H #ifndef _ECC_IMPL_H
#define _ECC_IMPL_H #define _ECC_IMPL_H
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the Elliptic Curve Cryptography library. * The Original Code is the Elliptic Curve Cryptography library.
* *
...@@ -37,23 +34,7 @@ ...@@ -37,23 +34,7 @@
* Dr Vipul Gupta <vipul.gupta@sun.com> and * Dr Vipul Gupta <vipul.gupta@sun.com> and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include <sys/types.h> #include <sys/types.h>
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library. * The Original Code is the elliptic curve math library.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _ECL_CURVE_H #ifndef _ECL_CURVE_H
#define _ECL_CURVE_H #define _ECL_CURVE_H
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library. * The Original Code is the elliptic curve math library.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _ECL_EXP_H #ifndef _ECL_EXP_H
#define _ECL_EXP_H #define _ECL_EXP_H
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library. * The Original Code is the elliptic curve math library.
* *
...@@ -37,23 +34,7 @@ ...@@ -37,23 +34,7 @@
* Stephen Fung <fungstep@hotmail.com> and * Stephen Fung <fungstep@hotmail.com> and
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _ECL_PRIV_H #ifndef _ECL_PRIV_H
#define _ECL_PRIV_H #define _ECL_PRIV_H
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library. * The Original Code is the elliptic curve math library.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#include "mpi.h" #include "mpi.h"
#include "mplogic.h" #include "mplogic.h"
......
/* ********************************************************************* /*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
* *
* Sun elects to have this file available under and governed by the * This library is free software; you can redistribute it and/or
* Mozilla Public License Version 1.1 ("MPL") (see * modify it under the terms of the GNU Lesser General Public
* http://www.mozilla.org/MPL/ for full license text). For the avoidance * License as published by the Free Software Foundation; either
* of doubt and subject to the following, Sun also elects to allow * version 2.1 of the License, or (at your option) any later version.
* licensees to use this file under the MPL, the GNU General Public
* License version 2 only or the Lesser General Public License version
* 2.1 only. Any references to the "GNU General Public License version 2
* or later" or "GPL" in the following shall be construed to mean the
* GNU General Public License version 2 only. Any references to the "GNU
* Lesser General Public License version 2.1 or later" or "LGPL" in the
* following shall be construed to mean the GNU Lesser General Public
* License version 2.1 only. However, the following notice accompanied
* the original version of this file:
* *
* Version: MPL 1.1/GPL 2.0/LGPL 2.1 * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* *
* The contents of this file are subject to the Mozilla Public License Version * You should have received a copy of the GNU Lesser General Public License
* 1.1 (the "License"); you may not use this file except in compliance with * along with this library; if not, write to the Free Software Foundation,
* the License. You may obtain a copy of the License at * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* http://www.mozilla.org/MPL/
* *
* Software distributed under the License is distributed on an "AS IS" basis, * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * or visit www.oracle.com if you need additional information or have any
* for the specific language governing rights and limitations under the * questions.
* License. */
/* *********************************************************************
* *
* The Original Code is the elliptic curve math library. * The Original Code is the elliptic curve math library.
* *
...@@ -36,23 +33,7 @@ ...@@ -36,23 +33,7 @@
* Contributor(s): * Contributor(s):
* Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
* *
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
*********************************************************************** */ *********************************************************************** */
/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _ECL_H #ifndef _ECL_H
#define _ECL_H #define _ECL_H
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册