Index: head/java/icedtea-web/Makefile =================================================================== --- head/java/icedtea-web/Makefile (revision 354182) +++ head/java/icedtea-web/Makefile (revision 354183) @@ -1,118 +1,119 @@ # $FreeBSD$ PORTNAME= icedtea-web PORTVERSION= 1.5 CATEGORIES= java www MASTER_SITES= http://icedtea.wildebeest.org/download/source/ \ http://icedtea.classpath.org/download/source/ MAINTAINER= java@FreeBSD.org COMMENT= Free Java plug-in and Java Web Start for OpenJDK LICENSE= GPLv2 BUILD_DEPENDS= ${LOCALBASE}/bin/zip:${PORTSDIR}/archivers/zip \ ${LOCALBASE}/bin/bash:${PORTSDIR}/shells/bash RUN_DEPENDS= ${LOCALBASE}/bin/bash:${PORTSDIR}/shells/bash GNU_CONFIGURE= yes USE_JAVA= yes JAVA_OS= native JAVA_VENDOR= openjdk -JAVA_VERSION= 1.6 1.7 USE_PERL5= build USE_XORG= x11 USES= desktop-file-utils gmake perl5 pkgconfig shebangfix SHEBANG_FILES= javac.in jrunscript.in launcher/launchers.in WANT_GNOME= yes EXTRACT_CMD= ${GZIP_CMD} EXTRACT_BEFORE_ARGS= -dc EXTRACT_AFTER_ARGS= | ${SETENV} LC_ALL=en_US.UTF-8 ${TAR} -xf - PLIST_FILES= bin/itweb-javaws \ bin/itweb-policyeditor \ bin/itweb-settings \ man/man1/itweb-javaws.1.gz \ man/man1/itweb-policyeditor.1.gz \ man/man1/itweb-settings.1.gz \ share/applications/itweb-javaws.desktop \ share/applications/itweb-policyeditor.desktop \ share/applications/itweb-settings.desktop \ share/pixmaps/itweb-javaws.png PORTDATA= javaws_splash.png netx.jar PORTDOCS= netx CONFIGURE_ARGS= --with-asm=no --with-ecj=no --with-emma=no --with-jacoco=no CONFIGURE_ARGS+=--with-jdk-home="${JAVA_HOME}" CONFIGURE_ENV= ac_cv_path_BIN_BASH=${bash_CMD} SH= ${bash_CMD} OPTIONS_DEFINE= PLUGIN RHINO TEST OPTIONS_DEFAULT=PLUGIN PLUGIN_DESC= Enable the browser plug-in RHINO_DESC= Add support for Proxy Auto Config files TEST_DESC= Add support for running regression test DOCS_CONFIGURE_ENABLE= docs PLUGIN_CONFIGURE_ENABLE=plugin RHINO_BUILD_DEPENDS= ${JAVASHAREDIR}/rhino/rhino.jar:${PORTSDIR}/lang/rhino RHINO_RUN_DEPENDS= ${JAVASHAREDIR}/rhino/rhino.jar:${PORTSDIR}/lang/rhino RHINO_CONFIGURE_OFF= --with-rhino=no RHINO_CONFIGURE_ON= --with-rhino=${JAVASHAREDIR}/rhino/rhino.jar TEST_BUILD_DEPENDS= ${JAVALIBDIR}/junit.jar:${PORTSDIR}/java/junit TEST_CONFIGURE_OFF= --with-junit=no TEST_CONFIGURE_ON= --with-junit=${JAVALIBDIR}/junit.jar PLUGIN_PLIST_FILES= lib/IcedTeaPlugin.so PLUGIN_USE= GNOME=glib20 PLUGIN_USES= gecko webplugin:native .include .if ${PORT_OPTIONS:MPLUGIN} PORTDATA+= plugin.jar PORTDOCS+= plugin WEBPLUGIN_DIR= ${PREFIX}/lib WEBPLUGIN_FILES=IcedTeaPlugin.so .endif .include -.if ${JAVA_PORT_VERSION} == "1.6.0" +.if ${JAVA_PORT_VERSION} == "1.8.0" +EXTRA_PATCHES= ${PATCHDIR}/extrapatch-jdk8 +.elif ${JAVA_PORT_VERSION} == "1.6.0" pre-extract: @${ECHO_MSG} @${ECHO_MSG} "IMPORTANT: To build IcedTea-Web ${PORTVERSION}, you have to turn on 'ICEDTEA' option" @${ECHO_MSG} "for ${JAVA_PORT} (default). Otherwise, it will neither build nor work." @${ECHO_MSG} @sleep 5 .endif post-patch: ${REINPLACE_CMD} -e 's|^Icon=javaws|Icon=itweb-javaws|' \ ${WRKSRC}/*.desktop.in ${CP} -fp ${FILESDIR}/*.html \ ${WRKSRC}/netx/net/sourceforge/jnlp/resources .if ${PORT_OPTIONS:MTEST} post-build: @${ECHO_MSG} @${ECHO_MSG} "Run \"make test\" to execute regression test." @${ECHO_MSG} .endif post-install: ${MKDIR} ${STAGEDIR}${DESKTOPDIR} ${INSTALL_DATA} ${WRKSRC}/*.desktop ${STAGEDIR}${DESKTOPDIR} ${INSTALL_DATA} ${WRKSRC}/javaws.png \ ${STAGEDIR}${PREFIX}/share/pixmaps/itweb-javaws.png .if ${PORT_OPTIONS:MTEST} test: build @(cd ${WRKSRC}; ${GMAKE} check) .if ${PORT_OPTIONS:MPLUGIN} @(cd ${WRKSRC}; ${GMAKE} plugin-tests) .endif .endif .include Index: head/java/icedtea-web/files/extrapatch-jdk8 =================================================================== --- head/java/icedtea-web/files/extrapatch-jdk8 (nonexistent) +++ head/java/icedtea-web/files/extrapatch-jdk8 (revision 354183) @@ -0,0 +1,1542 @@ +--- Makefile.in 2014-04-02 06:21:18.672343000 -0400 ++++ Makefile.in 2014-05-15 18:30:56.000000000 -0400 +@@ -769,8 +769,8 @@ + # Flags + export IT_CFLAGS=$(CFLAGS) $(ARCHFLAG) + export IT_JAVAC_SETTINGS=-g -encoding utf-8 $(JAVACFLAGS) $(MEMORY_LIMIT) $(PREFER_SOURCE) +-export IT_LANGUAGE_SOURCE_VERSION=6 +-export IT_CLASS_TARGET_VERSION=6 ++export IT_LANGUAGE_SOURCE_VERSION=7 ++export IT_CLASS_TARGET_VERSION=7 + export IT_JAVACFLAGS=$(IT_JAVAC_SETTINGS) -source $(IT_LANGUAGE_SOURCE_VERSION) -target $(IT_CLASS_TARGET_VERSION) + + # +@@ -2189,6 +2189,14 @@ + ln -sf ./$(JRE_ARCH_DIR) \ + $(BOOT_DIR)/jre/lib/$(INSTALL_ARCH_DIR); \ + fi; ++ mkdir -p $(BOOT_DIR)/lib && \ ++ ln -sf $(SYSTEM_JDK_DIR)/lib/$(JRE_ARCH_DIR) \ ++ $(BOOT_DIR)/lib/ && \ ++ if ! test -d $(BOOT_DIR)/lib/$(INSTALL_ARCH_DIR); \ ++ then \ ++ ln -sf ./$(JRE_ARCH_DIR) \ ++ $(BOOT_DIR)/lib/$(INSTALL_ARCH_DIR); \ ++ fi; + mkdir -p $(BOOT_DIR)/include && \ + for i in $(SYSTEM_JDK_DIR)/include/*; do \ + test -r $$i | continue; \ +--- configure 2014-04-02 06:21:18.000335000 -0400 ++++ configure 2014-05-15 17:04:42.000000000 -0400 +@@ -626,6 +626,8 @@ + VERSION_DEFS + HAVE_JAVA7_FALSE + HAVE_JAVA7_TRUE ++HAVE_JAVA8_FALSE ++HAVE_JAVA8_TRUE + JAVA + SYSTEM_JRE_DIR + X11_LIBS +@@ -7226,8 +7228,9 @@ + + JAVA_VERSION=`$JAVA -version 2>&1 | sed -n '1s/[^"]*"\(.*\)"$/\1/p'` + HAVE_JAVA7=`echo $JAVA_VERSION | awk '{if ($(0) >= 1.7) print "yes"}'` +- if ! test -z "$HAVE_JAVA7" ; then +- VERSION_DEFS='-DHAVE_JAVA7' ++ HAVE_JAVA8=`echo $JAVA_VERSION | awk '{if ($(0) >= 1.8) print "yes"}'` ++ if ! test -z "$HAVE_JAVA8" ; then ++ VERSION_DEFS='-DHAVE_JAVA8' + fi + + if test x"${HAVE_JAVA7}" = "xyes" ; then +@@ -7237,6 +7240,13 @@ + HAVE_JAVA7_TRUE='#' + HAVE_JAVA7_FALSE= + fi ++if test x"${HAVE_JAVA8}" = "xyes" ; then ++ HAVE_JAVA8_TRUE= ++ HAVE_JAVA8_FALSE='#' ++else ++ HAVE_JAVA8_TRUE='#' ++ HAVE_JAVA8_FALSE= ++fi + + + +@@ -10444,6 +10454,10 @@ + as_fn_error $? "conditional \"HAVE_JAVA7\" was never defined. + Usually this means the macro was only invoked conditionally." "$LINENO" 5 + fi ++if test -z "${HAVE_JAVA8_TRUE}" && test -z "${HAVE_JAVA8_FALSE}"; then ++ as_fn_error $? "conditional \"HAVE_JAVA8\" was never defined. ++Usually this means the macro was only invoked conditionally." "$LINENO" 5 ++fi + if test -z "${WITH_XSLTPROC_TRUE}" && test -z "${WITH_XSLTPROC_FALSE}"; then + as_fn_error $? "conditional \"WITH_XSLTPROC\" was never defined. + Usually this means the macro was only invoked conditionally." "$LINENO" 5 +--- netx/net/sourceforge/jnlp/JNLPFile.java 2014-04-02 06:20:59.682125000 -0400 ++++ netx/net/sourceforge/jnlp/JNLPFile.java 2014-05-15 16:57:19.000000000 -0400 +@@ -267,7 +267,6 @@ + /** + * Create a JNLPFile from an input stream. + * +- * @throws IOException if an IO exception occurred + * @throws ParseException if the JNLP file was invalid + */ + public JNLPFile(InputStream input, ParserSettings settings) throws ParseException { +@@ -281,7 +280,6 @@ + * @param input input stream of JNLP file. + * @param codebase codebase to use if not specified in JNLP file.. + * @param settings the {@link ParserSettings} to use when parsing +- * @throws IOException if an IO exception occurred + * @throws ParseException if the JNLP file was invalid + */ + public JNLPFile(InputStream input, URL codebase, ParserSettings settings) throws ParseException { +--- netx/net/sourceforge/jnlp/SecurityDesc.java 2014-04-02 06:20:59.680124000 -0400 ++++ netx/net/sourceforge/jnlp/SecurityDesc.java 2014-05-15 16:57:19.000000000 -0400 +@@ -90,7 +90,7 @@ + * The HTML permission level corresponding to the given String. If null is given, null comes + * back. If there is no permission level that can be granted in HTML matching the given String, + * null is also returned. +- * @param jnlpString the JNLP permission String ++ * @param htmlString the JNLP permission String + * @return the matching RequestedPermissionLevel + */ + public RequestedPermissionLevel fromHtmlString(final String htmlString) { +--- netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java 2014-04-02 06:20:59.683125000 -0400 ++++ netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java 2014-05-15 16:57:19.000000000 -0400 +@@ -292,12 +292,13 @@ + settingsPanel.add(p, panel.toString()); + } + +- final JList settingsList = new JList(panels); ++ final JList settingsList = new JList<>(panels); + settingsList.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { +- JList list = (JList) e.getSource(); +- SettingsPanel panel = (SettingsPanel) list.getSelectedValue(); ++ @SuppressWarnings("unchecked") ++ JList list = (JList) e.getSource(); ++ SettingsPanel panel = list.getSelectedValue(); + CardLayout cl = (CardLayout) settingsPanel.getLayout(); + cl.show(settingsPanel, panel.toString()); + } +--- netx/net/sourceforge/jnlp/controlpanel/DebuggingPanel.java 2014-04-02 06:20:59.683125000 -0400 ++++ netx/net/sourceforge/jnlp/controlpanel/DebuggingPanel.java 2014-05-15 16:57:19.000000000 -0400 +@@ -27,6 +27,7 @@ + import java.awt.event.ActionListener; + import java.awt.event.ItemEvent; + import java.awt.event.ItemListener; ++ + import javax.swing.Box; + import javax.swing.JButton; + import javax.swing.JCheckBox; +@@ -36,6 +37,7 @@ + import javax.swing.JTextField; + import javax.swing.event.DocumentEvent; + import javax.swing.event.DocumentListener; ++ + import net.sourceforge.jnlp.config.Defaults; + import net.sourceforge.jnlp.config.DeploymentConfiguration; + import net.sourceforge.jnlp.runtime.Translator; +@@ -139,7 +141,7 @@ + new ComboItem(Translator.R("DPShowJavawsOnly"), DeploymentConfiguration.CONSOLE_SHOW_JAVAWS) }; + + JLabel consoleLabel = new JLabel(Translator.R("DPJavaConsole")); +- JComboBox consoleComboBox = new JComboBox(); ++ JComboBox consoleComboBox = new JComboBox<>(); + consoleComboBox.setActionCommand(DeploymentConfiguration.KEY_CONSOLE_STARTUP_MODE); // The property this comboBox affects. + + JPanel consolePanel = new JPanel(); +@@ -201,7 +203,6 @@ + } + + @Override +- @SuppressWarnings("unchecked") + public void itemStateChanged(ItemEvent e) { + + Object o = e.getSource(); +@@ -210,7 +211,8 @@ + JCheckBox jcb = (JCheckBox) o; + config.setProperty(jcb.getActionCommand(), String.valueOf(jcb.isSelected())); + } else if (o instanceof JComboBox) { +- JComboBox jcb = (JComboBox) o; ++ @SuppressWarnings("unchecked") ++ JComboBox jcb = (JComboBox) o; + ComboItem c = (ComboItem) e.getItem(); + config.setProperty(jcb.getActionCommand(), c.getValue()); + } +--- netx/net/sourceforge/jnlp/controlpanel/DesktopShortcutPanel.java 2014-04-02 06:20:59.683125000 -0400 ++++ netx/net/sourceforge/jnlp/controlpanel/DesktopShortcutPanel.java 2014-05-15 16:57:19.000000000 -0400 +@@ -62,7 +62,7 @@ + private void addComponents() { + GridBagConstraints c = new GridBagConstraints(); + JLabel description = new JLabel("" + Translator.R("CPDesktopIntegrationDescription") + "
"); +- JComboBox shortcutComboOptions = new JComboBox(); ++ JComboBox shortcutComboOptions = new JComboBox<>(); + ComboItem[] items = { new ComboItem(Translator.R("DSPNeverCreate"), "NEVER"), + new ComboItem(Translator.R("DSPAlwaysAllow"), "ALWAYS"), + new ComboItem(Translator.R("DSPAskUser"), "ASK_USER"), +@@ -94,8 +94,9 @@ + add(filler, c); + } + ++ @SuppressWarnings("unchecked") + public void itemStateChanged(ItemEvent e) { + ComboItem c = (ComboItem) e.getItem(); +- config.setProperty(((JComboBox) e.getSource()).getActionCommand(), c.getValue()); ++ config.setProperty(((JComboBox) e.getSource()).getActionCommand(), c.getValue()); + } + } +--- netx/net/sourceforge/jnlp/controlpanel/TemporaryInternetFilesPanel.java 2014-04-02 06:20:59.683125000 -0400 ++++ netx/net/sourceforge/jnlp/controlpanel/TemporaryInternetFilesPanel.java 2014-05-15 16:57:19.000000000 -0400 +@@ -163,7 +163,7 @@ + new ComboItem("7", "7"), + new ComboItem("8", "8"), + new ComboItem(Translator.R("TIFPMax"), "9"), }; +- JComboBox cbCompression = new JComboBox(compressionOptions); ++ JComboBox cbCompression = new JComboBox<>(compressionOptions); + cbCompression.setSelectedIndex(Integer.parseInt(this.config.getProperty(properties[3]))); + cbCompression.addItemListener(new ItemListener() { + @Override +--- netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java 2014-04-02 06:20:59.683125000 -0400 ++++ netx/net/sourceforge/jnlp/controlpanel/UnsignedAppletsTrustingListPanel.java 2014-05-15 16:57:19.000000000 -0400 +@@ -51,6 +51,7 @@ + import java.util.Date; + import java.util.List; + import java.util.regex.Pattern; ++ + import javax.swing.DefaultCellEditor; + import javax.swing.JComboBox; + import javax.swing.JDialog; +@@ -72,6 +73,7 @@ + import javax.swing.table.TableCellRenderer; + import javax.swing.table.TableModel; + import javax.swing.table.TableRowSorter; ++ + import net.sourceforge.jnlp.config.DeploymentConfiguration; + import net.sourceforge.jnlp.runtime.Translator; + import net.sourceforge.jnlp.security.appletextendedsecurity.AppletSecurityLevel; +@@ -95,9 +97,9 @@ + private javax.swing.JButton moveRowDownButton; + private javax.swing.JCheckBox askBeforeActionCheckBox; + private javax.swing.JCheckBox filterRegexesCheckBox; +- private javax.swing.JComboBox mainPolicyComboBox; +- private javax.swing.JComboBox deleteTypeComboBox; +- private javax.swing.JComboBox viewFilter; ++ private javax.swing.JComboBox mainPolicyComboBox; ++ private javax.swing.JComboBox deleteTypeComboBox; ++ private javax.swing.JComboBox viewFilter; + private javax.swing.JLabel globalBehaviourLabel; + private javax.swing.JLabel securityLevelLabel; + private javax.swing.JScrollPane userTableScrollPane; +@@ -175,7 +177,7 @@ + setButtons((!currentModel.back.isReadOnly())); + } + +- public String appletItemsToCaption(List ii, String caption) { ++ public static String appletItemsToCaption(List ii, String caption) { + StringBuilder sb = new StringBuilder(); + for (UnsignedAppletActionEntry i : ii) { + sb.append(appletItemToCaption(i, caption)).append("\n"); +@@ -197,7 +199,7 @@ + + public static void removeSelectedFromTable(JTable table, boolean ask, UnsignedAppletActionTableModel data, Component forDialog) { + int[] originalIndexes = table.getSelectedRows(); +- List newIndexes = new ArrayList(originalIndexes.length); ++ List newIndexes = new ArrayList<>(originalIndexes.length); + for (int i = 0; i < originalIndexes.length; i++) { + //we need to remap values first + int modelRow = table.convertRowIndexToModel(originalIndexes[i]); +@@ -249,7 +251,7 @@ + userTable = createTbale(customModel); + globalTable = createTbale(globalModel); + helpButton = new javax.swing.JButton(); +- mainPolicyComboBox = new JComboBox(new AppletSecurityLevel[]{ ++ mainPolicyComboBox = new JComboBox<>(new AppletSecurityLevel[] { + AppletSecurityLevel.DENY_ALL, + AppletSecurityLevel.DENY_UNSIGNED, + AppletSecurityLevel.ASK_UNSIGNED, +@@ -258,8 +260,8 @@ + mainPolicyComboBox.setSelectedItem(AppletSecurityLevel.getDefault()); + securityLevelLabel = new javax.swing.JLabel(); + globalBehaviourLabel = new javax.swing.JLabel(); +- deleteTypeComboBox = new javax.swing.JComboBox(); +- viewFilter = new javax.swing.JComboBox(); ++ deleteTypeComboBox = new javax.swing.JComboBox<>(); ++ viewFilter = new javax.swing.JComboBox<>(); + deleteButton = new javax.swing.JButton(); + testUrlButton = new javax.swing.JButton(); + addRowButton = new javax.swing.JButton(); +@@ -335,7 +337,7 @@ + + globalBehaviourLabel.setText(Translator.R("APPEXTSECguiPanelGlobalBehaviourCaption")); + +- deleteTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{ ++ deleteTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { + Translator.R("APPEXTSECguiPanelDeleteMenuSelected"), + Translator.R("APPEXTSECguiPanelDeleteMenuAllA"), + Translator.R("APPEXTSECguiPanelDeleteMenuAllN"), +@@ -343,7 +345,7 @@ + Translator.R("APPEXTSECguiPanelDeleteMenuAlln"), + Translator.R("APPEXTSECguiPanelDeleteMenuAllAll")})); + +- viewFilter.setModel(new javax.swing.DefaultComboBoxModel(new String[]{ ++ viewFilter.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { + Translator.R("APPEXTSECguiPanelShowOnlyPermanent"), + Translator.R("APPEXTSECguiPanelShowOnlyTemporal"), + Translator.R("APPEXTSECguiPanelShowAll"), +@@ -681,7 +683,7 @@ + } + } + +- private void helpButtonActionPerformed(java.awt.event.ActionEvent evt) { ++ private static void helpButtonActionPerformed(java.awt.event.ActionEvent evt) { + JDialog d = new ExtendedAppletSecurityHelp(null, false); + ScreenFinder.centerWindowsToCurrentScreen(d); + d.setVisible(true); +@@ -701,7 +703,11 @@ + public TableCellEditor getCellEditor(int row, int column) { + int columnx = convertColumnIndexToModel(column); + if (columnx == 0) { +- return new DefaultCellEditor(new JComboBox(new ExecuteAppletAction[]{ExecuteAppletAction.ALWAYS, ExecuteAppletAction.NEVER, ExecuteAppletAction.YES, ExecuteAppletAction.NO})); ++ return new DefaultCellEditor(new JComboBox<>(new ExecuteAppletAction[] { ++ ExecuteAppletAction.ALWAYS, ++ ExecuteAppletAction.NEVER, ++ ExecuteAppletAction.YES, ++ ExecuteAppletAction.NO })); + } + if (columnx == 2) { + column = convertColumnIndexToModel(column); +@@ -761,7 +767,7 @@ + private void removeByBehaviour(ExecuteAppletAction unsignedAppletAction) { + UnsignedAppletActionEntry[] items = currentModel.back.toArray(); + if (askBeforeActionCheckBox.isSelected()) { +- List toBeDeleted = new ArrayList(); ++ List toBeDeleted = new ArrayList<>(); + for (int i = 0; i < items.length; i++) { + UnsignedAppletActionEntry unsignedAppletActionEntry = items[i]; + if (unsignedAppletActionEntry.getUnsignedAppletAction() == unsignedAppletAction) { +--- netx/net/sourceforge/jnlp/security/VariableX509TrustManagerJDK6.java 2014-04-02 06:20:59.679124000 -0400 ++++ netx/net/sourceforge/jnlp/security/VariableX509TrustManagerJDK6.java 2014-05-15 16:57:19.000000000 -0400 +@@ -1,75 +0,0 @@ +-/* VariableX509TrustManagerJDK6.java +- Copyright (C) 2012 Red Hat, Inc. +- +-This file is part of IcedTea. +- +-IcedTea is free software; you can redistribute it and/or +-modify it under the terms of the GNU General Public License as published by +-the Free Software Foundation, version 2. +- +-IcedTea 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 for more details. +- +-You should have received a copy of the GNU General Public License +-along with IcedTea; see the file COPYING. If not, write to +-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +-02110-1301 USA. +- +-Linking this library statically or dynamically with other modules is +-making a combined work based on this library. Thus, the terms and +-conditions of the GNU General Public License cover the whole +-combination. +- +-As a special exception, the copyright holders of this library give you +-permission to link this library with independent modules to produce an +-executable, regardless of the license terms of these independent +-modules, and to copy and distribute the resulting executable under +-terms of your choice, provided that you also meet, for each linked +-independent module, the terms and conditions of the license of that +-module. An independent module is a module which is not derived from +-or based on this library. If you modify this library, you may extend +-this exception to your version of the library, but you are not +-obligated to do so. If you do not wish to do so, delete this +-exception statement from your version. +-*/ +- +-package net.sourceforge.jnlp.security; +- +-import java.security.cert.CertificateException; +-import java.security.cert.X509Certificate; +- +-import com.sun.net.ssl.internal.ssl.X509ExtendedTrustManager; +- +-public class VariableX509TrustManagerJDK6 extends X509ExtendedTrustManager { +- +- private VariableX509TrustManager vX509TM = VariableX509TrustManager.getInstance(); +- +- @Override +- public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { +- checkClientTrusted(chain, authType, null, null); +- } +- +- @Override +- public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { +- vX509TM.checkTrustServer(chain, authType, null /* hostname*/, null /* socket */, null /* engine */); +- } +- +- @Override +- public X509Certificate[] getAcceptedIssuers() { +- return vX509TM.getAcceptedIssuers(); +- } +- +- @Override +- public void checkClientTrusted(X509Certificate[] chain, String authType, String hostname, String algorithm) throws CertificateException { +- vX509TM.checkTrustClient(chain, authType, hostname); // We don't need algorithm, we will always use this for TLS only +- } +- +- @Override +- public void checkServerTrusted(X509Certificate[] chain, String authType, String hostname, String algorithm) throws CertificateException { +- // We don't need to pass algorithm, we will always use this for TLS only +- vX509TM.checkTrustServer(chain, authType, hostname, null /* socket */, null /* engine */); +- } +- +-} +--- netx/net/sourceforge/jnlp/security/policyeditor/CustomPolicyViewer.java 2014-04-02 06:20:59.679124000 -0400 ++++ netx/net/sourceforge/jnlp/security/policyeditor/CustomPolicyViewer.java 2014-05-15 16:57:20.000000000 -0400 +@@ -66,14 +66,14 @@ + */ + public class CustomPolicyViewer extends JFrame { + +- private final Collection customPermissions = new TreeSet(); ++ private final Collection customPermissions = new TreeSet<>(); + private final JScrollPane scrollPane = new JScrollPane(); +- private final DefaultListModel listModel = new DefaultListModel(); +- private final JList list = new JList(listModel); ++ private final DefaultListModel listModel = new DefaultListModel<>(); ++ private final JList list = new JList<>(listModel); + private final JButton addButton = new JButton(), removeButton = new JButton(), closeButton = new JButton(); + private final JLabel listLabel = new JLabel(); + private final ActionListener addButtonAction, removeButtonAction, closeButtonAction; +- private final WeakReference weakThis = new WeakReference(this); ++ private final WeakReference weakThis = new WeakReference<>(this); + + /** + * @param parent the parent PolicyEditor which created this CustomPolicyViewer +--- netx/net/sourceforge/jnlp/security/policyeditor/PermissionActions.java 2014-04-02 06:20:59.679124000 -0400 ++++ netx/net/sourceforge/jnlp/security/policyeditor/PermissionActions.java 2014-05-15 16:57:20.000000000 -0400 +@@ -88,7 +88,7 @@ + } + + private static Set setFromString(final String string) { +- final Set set = new HashSet(); ++ final Set set = new HashSet<>(); + Collections.addAll(set, string.split(",")); + return set; + } +--- netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java 2014-04-02 06:20:59.679124000 -0400 ++++ netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditor.java 2014-05-15 16:57:20.000000000 -0400 +@@ -165,18 +165,18 @@ + private File file; + private boolean changesMade = false; + private boolean closed = false; +- private final Map> codebasePermissionsMap = new HashMap>(); +- private final Map> customPermissionsMap = new HashMap>(); +- private final Map checkboxMap = new TreeMap(); +- private final List groupBoxList = new ArrayList(Group.values().length); ++ private final Map> codebasePermissionsMap = new HashMap<>(); ++ private final Map> customPermissionsMap = new HashMap<>(); ++ private final Map checkboxMap = new TreeMap<>(); ++ private final List groupBoxList = new ArrayList<>(Group.values().length); + private final JScrollPane scrollPane = new JScrollPane(); +- private final DefaultListModel listModel = new DefaultListModel(); +- private final JList list = new JList(listModel); ++ private final DefaultListModel listModel = new DefaultListModel<>(); ++ private final JList list = new JList<>(listModel); + private final JButton okButton = new JButton(), closeButton = new JButton(), + addCodebaseButton = new JButton(), removeCodebaseButton = new JButton(); + private final JFileChooser fileChooser; + private CustomPolicyViewer cpViewer = null; +- private final WeakReference weakThis = new WeakReference(this); ++ private final WeakReference weakThis = new WeakReference<>(this); + private MD5SumWatcher fileWatcher; + + private final ActionListener okButtonAction, addCodebaseButtonAction, +@@ -196,13 +196,13 @@ + return group; + } + +- private void setState(Map map) { +- List backup = new LinkedList(); ++ private void setState(final Map map) { ++ final List backup = new LinkedList<>(); + for (final ActionListener l : this.getActionListeners()) { + backup.add(l); + this.removeActionListener(l); + } +- int i = group.getState(map); ++ final int i = group.getState(map); + this.setBackground(getParent().getBackground()); + if (i > 0) { + this.setSelected(true); +@@ -215,7 +215,7 @@ + this.setSelected(false); + } + +- for (ActionListener al : backup) { ++ for (final ActionListener al : backup) { + this.addActionListener(al); + } + } +@@ -273,7 +273,7 @@ + removeCodebaseButtonAction = new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { +- removeCodebase((String) list.getSelectedValue()); ++ removeCodebase(getSelectedCodebase()); + } + }; + removeCodebaseButton.setText(R("PERemoveCodebase")); +@@ -324,7 +324,7 @@ + @Override + public void run() { + String codebase = getSelectedCodebase(); +- if (codebase == null){ ++ if (codebase == null) { + return; + } + if (cpViewer == null) { +@@ -343,9 +343,9 @@ + + setupLayout(); + } +- ++ + private String getSelectedCodebase() { +- String codebase = (String) list.getSelectedValue(); ++ final String codebase = list.getSelectedValue(); + if (codebase == null || codebase.isEmpty()) { + return null; + } +@@ -355,7 +355,7 @@ + return codebase; + } + +- private static void preparePolicyEditorWindow(final PolicyEditorWindow w, PolicyEditor e) { ++ private static void preparePolicyEditorWindow(final PolicyEditorWindow w, final PolicyEditor e) { + w.setModalityType(ModalityType.MODELESS); //at least some default + w.setPolicyEditor(e); + w.setTitle(R("PETitle")); +@@ -386,7 +386,6 @@ + editor.closeButton.setText(R("ButClose")); + editor.closeButton.addActionListener(editor.closeButtonAction); + +- + final Action saveAct = new AbstractAction() { + @Override + public void actionPerformed(final ActionEvent e) { +@@ -437,7 +436,7 @@ + + private PolicyEditorFrame(final PolicyEditor editor) { + super(); +- preparePolicyEditorWindow((PolicyEditorWindow)this, editor); ++ preparePolicyEditorWindow((PolicyEditorWindow) this, editor); + } + + @Override +@@ -451,17 +450,17 @@ + } + + @Override +- public final void setPolicyEditor(PolicyEditor e) { ++ public final void setPolicyEditor(final PolicyEditor e) { + editor = e; + } + + @Override +- public final void setDefaultCloseOperation(int operation) { ++ public final void setDefaultCloseOperation(final int operation) { + super.setDefaultCloseOperation(operation); + } + + @Override +- public final void setJMenuBar(JMenuBar menu) { ++ public final void setJMenuBar(final JMenuBar menu) { + super.setJMenuBar(menu); + } + +@@ -471,7 +470,7 @@ + } + + @Override +- public void setModalityType(ModalityType type) { ++ public void setModalityType(final ModalityType type) { + //no op for frame + } + +@@ -502,11 +501,11 @@ + + private PolicyEditorDialog(final PolicyEditor editor) { + super(); +- preparePolicyEditorWindow((PolicyEditorWindow)this, editor); ++ preparePolicyEditorWindow((PolicyEditorWindow) this, editor); + } + + @Override +- public final void setTitle(String title) { ++ public final void setTitle(final String title) { + super.setTitle(title); + } + +@@ -516,17 +515,17 @@ + } + + @Override +- public final void setPolicyEditor(PolicyEditor e) { ++ public final void setPolicyEditor(final PolicyEditor e) { + editor = e; + } + + @Override +- public final void setDefaultCloseOperation(int operation) { ++ public final void setDefaultCloseOperation(final int operation) { + super.setDefaultCloseOperation(operation); + } + + @Override +- public final void setJMenuBar(JMenuBar menu) { ++ public final void setJMenuBar(final JMenuBar menu) { + super.setJMenuBar(menu); + } + +@@ -536,7 +535,7 @@ + } + + @Override +- public void setModalityType(ModalityType type) { ++ public void setModalityType(final ModalityType type) { + super.setModalityType(type); + } + +@@ -641,7 +640,7 @@ + final Action act = new AbstractAction() { + @Override + public void actionPerformed(final ActionEvent e) { +- removeCodebase((String) list.getSelectedValue()); ++ removeCodebase(getSelectedCodebase()); + } + }; + setAccelerator(R("PERemoveCodebaseMnemonic"), ActionEvent.ALT_MASK, act, "RemoveCodebaseAccelerator"); +@@ -726,6 +725,7 @@ + stopAsking = true; + } + } catch (final MalformedURLException mfue) { ++ // ignore - loop/ask again + } + } + addNewCodebase(codebase); +@@ -773,7 +773,7 @@ + if (permissions != null) { + return new HashMap(permissions); + } else { +- final Map blank = new HashMap(); ++ final Map blank = new HashMap<>(); + for (final PolicyEditorPermissions perm : PolicyEditorPermissions.values()) { + blank.put(perm, false); + } +@@ -800,10 +800,10 @@ + */ + private void updateCheckboxes(final String codebase) { + try { +- if (SwingUtilities.isEventDispatchThread()){ +- updateCheckboxesImpl(codebase); ++ if (SwingUtilities.isEventDispatchThread()) { ++ updateCheckboxesImpl(codebase); + } else { +- updateCheckboxesInvokeAndWait(codebase); ++ updateCheckboxesInvokeAndWait(codebase); + } + } catch (InterruptedException ex) { + OutputController.getLogger().log(ex); +@@ -811,52 +811,52 @@ + OutputController.getLogger().log(ex); + } + } +- ++ + private void updateCheckboxesInvokeAndWait(final String codebase) throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { +- updateCheckboxesImpl(codebase); ++ updateCheckboxesImpl(codebase); + } + }); + + } +- +- private void updateCheckboxesImpl(String codebase) { +- for (final PolicyEditorPermissions perm : PolicyEditorPermissions.values()) { +- final JCheckBox box = checkboxMap.get(perm); +- for (final ActionListener l : box.getActionListeners()) { +- box.removeActionListener(l); +- } +- initializeMapForCodebase(codebase); +- final Map map = codebasePermissionsMap.get(codebase); +- final boolean state; +- if (map != null) { +- final Boolean s = map.get(perm); +- if (s != null) { +- state = s; +- } else { +- state = false; +- } +- } else { +- state = false; +- } ++ ++ private void updateCheckboxesImpl(final String codebase) { ++ for (final PolicyEditorPermissions perm : PolicyEditorPermissions.values()) { ++ final JCheckBox box = checkboxMap.get(perm); ++ for (final ActionListener l : box.getActionListeners()) { ++ box.removeActionListener(l); ++ } ++ initializeMapForCodebase(codebase); ++ final Map map = codebasePermissionsMap.get(codebase); ++ final boolean state; ++ if (map != null) { ++ final Boolean s = map.get(perm); ++ if (s != null) { ++ state = s; ++ } else { ++ state = false; ++ } ++ } else { ++ state = false; ++ } ++ for (final JCheckBoxWithGroup jg : groupBoxList) { ++ jg.setState(map); ++ } ++ box.setSelected(state); ++ box.addActionListener(new ActionListener() { ++ @Override ++ public void actionPerformed(final ActionEvent e) { ++ changesMade = true; ++ map.put(perm, box.isSelected()); + for (JCheckBoxWithGroup jg : groupBoxList) { + jg.setState(map); + } +- box.setSelected(state); +- box.addActionListener(new ActionListener() { +- @Override +- public void actionPerformed(final ActionEvent e) { +- changesMade = true; +- map.put(perm, box.isSelected()); +- for (JCheckBoxWithGroup jg : groupBoxList) { +- jg.setState(map); +- } +- } +- }); + } +- } ++ }); ++ } ++ } + + /** + * Set a mnemonic key for a menu item or button +@@ -947,8 +947,8 @@ + checkboxConstraints.gridy = 1; + + for (final JCheckBox box : checkboxMap.values()) { +- if (PolicyEditorPermissions.Group.anyContains(box, checkboxMap)){ +- //do not show boxes in any group ++ if (PolicyEditorPermissions.Group.anyContains(box, checkboxMap)) { ++ //do not show boxes in any group + continue; + } + add(box, checkboxConstraints); +@@ -960,7 +960,7 @@ + } + } + //add groups +- for (PolicyEditorPermissions.Group g : PolicyEditorPermissions.Group.values()) { ++ for (final PolicyEditorPermissions.Group g : PolicyEditorPermissions.Group.values()) { + //no metter what, put group title on new line + checkboxConstraints.gridy++; + //all groups are in second column +@@ -977,14 +977,14 @@ + groupPanel.setVisible(!groupPanel.isVisible()); + PolicyEditor.this.validate(); + Container c = PolicyEditor.this.getParent(); +- //find the window and repack it ++ // find the window and repack it + while (!(c instanceof Window)) { + if (c == null) { + return; + } + c = c.getParent(); + } +- Window w = (Window) c; ++ final Window w = (Window) c; + w.pack(); + + } +@@ -993,34 +993,34 @@ + groupCh.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { +- String codebase = getSelectedCodebase(); ++ final String codebase = getSelectedCodebase(); + if (codebase == null) { + return; + } +- List backup = new LinkedList(); ++ List backup = new LinkedList<>(); + for (final ActionListener l : groupCh.getActionListeners()) { + backup.add(l); + groupCh.removeActionListener(l); + } + final Map map = codebasePermissionsMap.get(codebase); +- for (PolicyEditorPermissions p : groupCh.getGroup().getPermissions()) { ++ for (final PolicyEditorPermissions p : groupCh.getGroup().getPermissions()) { + map.put(p, groupCh.isSelected()); + } + changesMade = true; + updateCheckboxes(codebase); +- for (ActionListener al : backup) { ++ for (final ActionListener al : backup) { + groupCh.addActionListener(al); + } + + } + }); + add(groupCh, checkboxConstraints); +- //place panel with mebers below the title ++ // place panel with members below the title + checkboxConstraints.gridy++; + checkboxConstraints.gridx = 2; +- //spread group's panel over two columns ++ // spread group's panel over two columns + checkboxConstraints.gridwidth = 2; +- checkboxConstraints.fill = checkboxConstraints.BOTH; ++ checkboxConstraints.fill = GridBagConstraints.BOTH; + add(groupPanel, checkboxConstraints); + final GridBagConstraints groupCheckboxLabelConstraints = new GridBagConstraints(); + groupCheckboxLabelConstraints.anchor = GridBagConstraints.LINE_START; +@@ -1028,7 +1028,7 @@ + groupCheckboxLabelConstraints.weighty = 0; + groupCheckboxLabelConstraints.gridx = 1; + groupCheckboxLabelConstraints.gridy = 1; +- for (PolicyEditorPermissions p : g.getPermissions()) { ++ for (final PolicyEditorPermissions p : g.getPermissions()) { + groupPanel.add(checkboxMap.get(p), groupCheckboxLabelConstraints); + // Two columns of checkboxes + groupCheckboxLabelConstraints.gridx++; +@@ -1042,7 +1042,6 @@ + checkboxConstraints.gridwidth = 1; + } + +- + final JLabel codebaseListLabel = new JLabel(R("PECodebaseLabel")); + codebaseListLabel.setBorder(new EmptyBorder(2, 2, 2, 2)); + final GridBagConstraints listLabelConstraints = new GridBagConstraints(); +@@ -1152,7 +1151,7 @@ + // If this fails we'll end up handling it a few lines down anyway. + } + } +- OpenFileResult ofr = FileUtils.testFilePermissions(file); ++ final OpenFileResult ofr = FileUtils.testFilePermissions(file); + if (ofr == OpenFileResult.FAILURE || ofr == OpenFileResult.NOT_FILE) { + FileUtils.showCouldNotOpenFilepathDialog(weakThis.get(), file.getPath()); + return; +@@ -1258,7 +1257,7 @@ + } + + if (codebasePermissionsMap.get(codebase) == null) { +- final Map map = new HashMap(); ++ final Map map = new HashMap<>(); + for (final PolicyEditorPermissions perm : PolicyEditorPermissions.values()) { + map.put(perm, false); + } +@@ -1266,7 +1265,7 @@ + } + + if (customPermissionsMap.get(codebase) == null) { +- final Set set = new HashSet(); ++ final Set set = new HashSet<>(); + customPermissionsMap.put(codebase, set); + } + +@@ -1307,8 +1306,10 @@ + } + final StringBuilder sb = new StringBuilder(); + sb.append(AUTOGENERATED_NOTICE); +- sb.append("\n/* Generated by PolicyEditor at ").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") +- .format(Calendar.getInstance().getTime())).append(" */").append(System.getProperty("line.separator")); ++ sb.append("\n/* Generated by PolicyEditor at ") ++ .append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime())) ++ .append(" */") ++ .append(System.getProperty("line.separator")); + final Set enabledPermissions = new HashSet(); + FileLock fileLock; + try { +@@ -1456,7 +1457,7 @@ + */ + static Map argsToMap(final String[] args) { + final List argsList = Arrays. asList(args); +- final Map map = new HashMap(); ++ final Map map = new HashMap<>(); + + if (argsList.contains(HELP_FLAG)) { + map.put(HELP_FLAG, null); +--- netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditorPermissions.java 2014-04-02 06:20:59.679124000 -0400 ++++ netx/net/sourceforge/jnlp/security/policyeditor/PolicyEditorPermissions.java 2014-05-15 16:57:20.000000000 -0400 +@@ -123,13 +123,14 @@ + + private final PolicyEditorPermissions[] permissions; + private final String title; +- private Group(String title, PolicyEditorPermissions... permissions) { ++ ++ private Group(final String title, final PolicyEditorPermissions... permissions) { + this.title = title; + this.permissions = permissions; + + } + +- public static boolean anyContains(PolicyEditorPermissions permission) { ++ public static boolean anyContains(final PolicyEditorPermissions permission) { + for (Group g : Group.values()) { + if (g.contains(permission)) { + return true; +@@ -138,10 +139,10 @@ + return false; + } + +- public static boolean anyContains(JCheckBox view, Map checkboxMap) { +- for (Map.Entry pairs : checkboxMap.entrySet()){ ++ public static boolean anyContains(final JCheckBox view, final Map checkboxMap) { ++ for (final Map.Entry pairs : checkboxMap.entrySet()) { + if (pairs.getValue() == view) { +- for (Group g : Group.values()) { ++ for (final Group g : Group.values()) { + if (g.contains(pairs.getKey())) { + return true; + } +@@ -157,10 +158,10 @@ + * - none is selected + */ + public int getState (final Map map) { +- boolean allTrue=true; +- boolean allFalse=true; +- for (PolicyEditorPermissions pp: getPermissions()){ +- Boolean b = map.get(pp); ++ boolean allTrue = true; ++ boolean allFalse = true; ++ for (final PolicyEditorPermissions pp : getPermissions()) { ++ final Boolean b = map.get(pp); + if (b == null){ + return 0; + } +@@ -170,23 +171,22 @@ + allTrue = false; + } + } +- if (allFalse){ ++ if (allFalse) { + return -1; + } +- if (allTrue){ ++ if (allTrue) { + return 1; + } + return 0; + } + +- public boolean contains(PolicyEditorPermissions permission) { +- for (PolicyEditorPermissions policyEditorPermissions : permissions) { ++ public boolean contains(final PolicyEditorPermissions permission) { ++ for (final PolicyEditorPermissions policyEditorPermissions : permissions) { + if (policyEditorPermissions == permission) { + return true; + } + } + return false; +- + } + + public String getTitle() { +@@ -199,7 +199,7 @@ + + } + +- ++ + private final String name, description; + private final PermissionType type; + private final PermissionTarget target; +--- netx/net/sourceforge/jnlp/security/policyeditor/PolicyEntry.java 2014-04-02 06:20:59.679124000 -0400 ++++ netx/net/sourceforge/jnlp/security/policyeditor/PolicyEntry.java 2014-05-15 16:57:20.000000000 -0400 +@@ -51,8 +51,8 @@ + public class PolicyEntry { + + private final String codebase; +- private final Set permissions = new HashSet(); +- private final Set customPermissions = new HashSet(); ++ private final Set permissions = new HashSet<>(); ++ private final Set customPermissions = new HashSet<>(); + + public PolicyEntry(final String codebase, final Collection permissions, + final Collection customPermissions) { +--- netx/net/sourceforge/jnlp/security/viewer/CertificatePane.java 2014-04-02 06:20:59.679124000 -0400 ++++ netx/net/sourceforge/jnlp/security/viewer/CertificatePane.java 2014-05-15 16:57:20.000000000 -0400 +@@ -108,7 +108,7 @@ + JTabbedPane tabbedPane; + private final JTable userTable; + private final JTable systemTable; +- private JComboBox certificateTypeCombo; ++ private JComboBox certificateTypeCombo; + private KeyStores.Type currentKeyStoreType; + private KeyStores.Level currentKeyStoreLevel; + +@@ -130,7 +130,7 @@ + + userTable = new JTable(null); + systemTable = new JTable(null); +- disableForSystem = new ArrayList(); ++ disableForSystem = new ArrayList<>(); + + addComponents(); + +@@ -165,7 +165,7 @@ + + JLabel certificateTypeLabel = new JLabel(R("CVCertificateType")); + +- certificateTypeCombo = new JComboBox(certificateTypes); ++ certificateTypeCombo = new JComboBox<>(certificateTypes); + certificateTypeCombo.addActionListener(new CertificateTypeListener()); + + certificateTypePanel.add(certificateTypeLabel, BorderLayout.LINE_START); +@@ -257,7 +257,7 @@ + private void readKeyStore() { + + Enumeration aliases = null; +- certs = new ArrayList(); ++ certs = new ArrayList<>(); + try { + + //Get all of the X509Certificates and put them into an ArrayList +@@ -279,7 +279,7 @@ + SecurityUtil.getCN(c.getIssuerX500Principal().getName()); + } + } catch (Exception e) { +- //TODO ++ // TODO handle exception + OutputController.getLogger().log(OutputController.Level.ERROR_ALL, e); + } + } +@@ -314,9 +314,7 @@ + if (result == JOptionPane.OK_OPTION) { + return jpf.getPassword(); + } +- else { +- return null; +- } ++ return null; + } + + /** Allows storing KeyStores.Types in a JComponent */ +@@ -342,7 +340,7 @@ + @Override + @SuppressWarnings("unchecked")//this is just certificateTypeCombo, nothing else + public void actionPerformed(ActionEvent e) { +- JComboBox source = (JComboBox) e.getSource(); ++ JComboBox source = (JComboBox) e.getSource(); + CertificateType type = (CertificateType) source.getSelectedItem(); + currentKeyStoreType = type.getType(); + repopulateTables(); +--- netx/net/sourceforge/jnlp/util/FileUtils.java 2014-04-02 06:20:59.685125000 -0400 ++++ netx/net/sourceforge/jnlp/util/FileUtils.java 2014-05-15 16:57:20.000000000 -0400 +@@ -394,7 +394,6 @@ + /** + * Show a dialog informing the user that the file could not be opened + * @param frame a {@link JFrame} to act as parent to this dialog +- * @param filePath a {@link String} representing the path to the file we failed to open + * @param message a {@link String} giving the specific reason the file could not be opened + */ + public static void showCouldNotOpenDialog(final Component frame, final String message) { +--- netx/net/sourceforge/jnlp/util/JarFile.java 2014-04-02 06:20:59.685125000 -0400 ++++ netx/net/sourceforge/jnlp/util/JarFile.java 2014-05-15 16:57:20.000000000 -0400 +@@ -43,94 +43,82 @@ + import java.io.InputStream; + import net.sourceforge.jnlp.runtime.JNLPRuntime; + +-//in jdk6 java.util.jar.JarFile is not Closeable - fixing +-//overwritening class can add duplicate occurence of interface so this should be perfectly safe +-public class JarFile extends java.util.jar.JarFile implements Closeable{ ++/** ++ * A wrapper over {@link java.util.jar.JarFile} that verifies zip headers to ++ * protect against GIFAR attacks. ++ * ++ * @see Gifar ++ */ ++public class JarFile extends java.util.jar.JarFile implements Closeable { + + public JarFile(String name) throws IOException { +- super(name); +- verifyZipHeader(new File(name)); ++ super(name); ++ verifyZipHeader(new File(name)); + } + +- /** +- */ + public JarFile(String name, boolean verify) throws IOException { + super(name, verify); + verifyZipHeader(new File(name)); + } + +- /** +- */ + public JarFile(File file) throws IOException { + super(file); + verifyZipHeader(file); + } + +- /** +- */ + public JarFile(File file, boolean verify) throws IOException { + super(file, verify); + verifyZipHeader(file); + } + +- /* +- */ + public JarFile(File file, boolean verify, int mode) throws IOException { + super(file, verify, mode); +- verifyZipHeader(file); ++ verifyZipHeader(file); + } +- +- +- +- ++ + /** +- * According to specification - +- * http://www.pkware.com/documents/casestudies/APPNOTE.TXT or just google +- * around zip header all entries in zip-compressed must start with well +- * known "PK" which is defined as hexa x50 x4b x03 x04, which in decimal are +- * 80 75 3 4. +- * ++ * The ZIP specification requires that the zip header for all entries in a ++ * zip-compressed archive must start with a well known "PK" which is ++ * defined as hex x50 x4b x03 x04. ++ *

+ * Note - this is not file-header, it is item-header. +- * +- * Actually most of compressing formats have some n-bytes header se eg: ++ *

++ * Actually most of compressing formats have some n-bytes headers. Eg: + * http://www.gzip.org/zlib/rfc-gzip.html#header-trailer for ID1 and ID2 so + * in case that some differently compressed jars will come to play, this is +- * the palce where to fix it. ++ * the place where to fix it. + * ++ * @see ZIP Specification + */ +- private static final byte[] ZIP_LOCAL_FILE_HEADER_SIGNATURE = new byte[]{80, 75, 3, 4}; ++ private static final byte[] ZIP_ENTRY_HEADER_SIGNATURE = new byte[] {0x50, 0x4b, 0x03, 0x04}; + + /** +- * This method is checking first four bytes of jar-file against +- * ZIP_LOCAL_FILE_HEADER_SIGNATURE +- * ++ * Verify the header for the zip entry. ++ *

+ * Although zip specification allows to skip all corrupted entries, it is +- * not safe for jars. If first four bytes of file are not zip +- * ZIP_LOCAL_FILE_HEADER_SIGNATURE then exception is thrown +- * +- * As noted, ZIP_LOCAL_FILE_HEADER_SIGNATURE is not ile-header, but is item-header. +- * Possible attack is using the fact that entries without header are considered +- * corrupted and so can be ignoered. However, for other they can have some meaning. +- * +- * So for our purposes we must insists on first record to be valid. +- * +- * @param file +- * @throws IOException +- * @throws InvalidJarHeaderException ++ * not safe for jars since it allows a different format to fake itself as ++ * a Jar. + */ +- public static void verifyZipHeader(File file) throws IOException { ++ private void verifyZipHeader(File file) throws IOException { + if (!JNLPRuntime.isIgnoreHeaders()) { + InputStream s = new FileInputStream(file); ++ ++ /* ++ * Theoretically, a valid ZIP file can begin with anything. We ++ * ensure it begins with a valid entry header to confirm it only ++ * contains zip entries. ++ */ ++ + try { +- byte[] buffer = new byte[ZIP_LOCAL_FILE_HEADER_SIGNATURE.length]; ++ byte[] buffer = new byte[ZIP_ENTRY_HEADER_SIGNATURE.length]; + /* + * for case that new byte[] will accidently initialize same + * sequence as zip header and during the read the buffer will not be filled +- */ ++ */ + for (int i = 0; i < buffer.length; i++) { + buffer[i] = 0; + } +- int toRead = ZIP_LOCAL_FILE_HEADER_SIGNATURE.length; ++ int toRead = ZIP_ENTRY_HEADER_SIGNATURE.length; + int readSoFar = 0; + int n = 0; + /* +@@ -144,7 +132,7 @@ + } + } + for (int i = 0; i < buffer.length; i++) { +- if (buffer[i] != ZIP_LOCAL_FILE_HEADER_SIGNATURE[i]) { ++ if (buffer[i] != ZIP_ENTRY_HEADER_SIGNATURE[i]) { + throw new InvalidJarHeaderException("Jar " + file.getName() + " do not heave valid header. You can skip this check by -Xignoreheaders"); + } + } +--- netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java 2014-04-02 06:20:59.684125000 -0400 ++++ netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java 2014-05-15 16:57:20.000000000 -0400 +@@ -15,6 +15,7 @@ + import java.util.Observer; + import java.util.concurrent.atomic.AtomicBoolean; + import java.util.regex.Pattern; ++ + import javax.swing.ButtonGroup; + import javax.swing.JFrame; + import javax.swing.JMenuItem; +@@ -26,6 +27,7 @@ + import javax.swing.text.Document; + import javax.swing.text.PlainDocument; + import javax.swing.text.html.HTMLDocument; ++ + import net.sourceforge.jnlp.runtime.JNLPRuntime; + import net.sourceforge.jnlp.runtime.Translator; + import net.sourceforge.jnlp.util.logging.headers.ObservableMessagesProvider; +@@ -247,7 +249,6 @@ + statistics.setText(model.createStatisticHint()); + } + +- @SuppressWarnings("unchecked") + private void initComponents() { + + jPanel2 = new javax.swing.JPanel(); +@@ -267,7 +268,7 @@ + showPreInit = new javax.swing.JCheckBox(); + sortByLabel = new javax.swing.JLabel(); + regExLabel = new javax.swing.JCheckBox(); +- sortBy = new javax.swing.JComboBox(); ++ sortBy = new javax.swing.JComboBox<>(); + searchLabel = new javax.swing.JLabel(); + autorefresh = new javax.swing.JCheckBox(); + refresh = new javax.swing.JButton(); +@@ -362,7 +363,7 @@ + regExLabel.setText(Translator.R("COPregex") + ":"); + regExLabel.addActionListener(getDefaultActionSingleton()); + +- sortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[]{ ++ sortBy.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { + Translator.R("COPAsArrived"), + Translator.R("COPuser"), + Translator.R("COPorigin"), +@@ -943,7 +944,7 @@ + private javax.swing.JCheckBox showThread2; + private javax.swing.JCheckBox showUser; + private javax.swing.JCheckBox sortCopyAll; +- private javax.swing.JComboBox sortBy; ++ private javax.swing.JComboBox sortBy; + private javax.swing.JLabel sortByLabel; + private javax.swing.JLabel statistics; + private javax.swing.JCheckBox wordWrap; +--- netx/net/sourceforge/nanoxml/XMLElement.java 2014-04-02 06:20:59.669124000 -0400 ++++ netx/net/sourceforge/nanoxml/XMLElement.java 2014-05-15 16:57:20.000000000 -0400 +@@ -39,7 +39,7 @@ + /** + * XMLElement is a representation of an XML object. The object is able to parse + * XML code. +- *

++ *
+ *
Parsing XML Data
+ *
+ * You can parse XML data using the following code: +@@ -83,7 +83,6 @@ + * {@link #createAnotherElement() createAnotherElement} + * which has to return a new copy of the receiver. + *
+- *

+ * + * @see net.sourceforge.nanoxml.XMLParseException + * +@@ -178,7 +177,8 @@ + private boolean ignoreWhitespace; + + /** +- * Character read too much.
++ * Character read too much. ++ *

+ * This character provides push-back functionality to the input reader + * without having to use a PushbackReader. + * If there is no such character, this field is {@code '\0'}. +@@ -210,7 +210,8 @@ + private int parserLineNr; + + /** +- * Creates and initializes a new XML element.
++ * Creates and initializes a new XML element. ++ *

+ * Calling the construction is equivalent to: + *

  • {@code new XMLElement(new Hashtable(), false, true)}
+ * +@@ -400,7 +401,8 @@ + } + + /** +- * Returns an attribute of the element.
++ * Returns an attribute of the element. ++ *

+ * If the attribute doesn't exist, {@code null} is returned. + * + * @param name The name of the attribute. +@@ -535,7 +537,7 @@ + * The new name. + * + *

Preconditions:
+- *
    ++ *
    • {@code name != null}
    • + *
    • {@code name} is a valid XML identifier
    • + *
+ */ +@@ -597,7 +599,8 @@ + } + + /** +- * This method scans an identifier from the current reader.
++ * This method scans an identifier from the current reader. ++ *

+ * The scanned whitespace is appended to {@code result}. + * + * @return the next character following the whitespace. +@@ -625,7 +628,8 @@ + } + + /** +- * This method scans a delimited string from the current reader.
++ * This method scans a delimited string from the current reader. ++ *

+ * The scanned string without delimiters is appended to {@code string}. + * + *

Preconditions:
+@@ -653,8 +657,10 @@ + + /** + * Scans a {@code #PCDATA} element. CDATA sections and entities are +- * resolved.
+- * The next < char is skipped.
++ * resolved. ++ *

++ * The next < char is skipped. ++ *

+ * The scanned data is appended to {@code data}. + * + *

Preconditions:
+@@ -831,7 +837,8 @@ + } + + /** +- * Scans the data for literal text.
++ * Scans the data for literal text. ++ *

+ * Scanning stops when a character does not match or after the complete + * text has been checked, whichever comes first. + * +@@ -985,7 +992,8 @@ + } + + /** +- * Resolves an entity. The name of the entity is read from the reader.
++ * Resolves an entity. The name of the entity is read from the reader. ++ *

+ * The value of the entity is appended to {@code buf}. + * + * @param buf Where to put the entity value. +--- netx/net/sourceforge/nanoxml/XMLParseException.java 2014-04-02 06:20:59.669124000 -0400 ++++ netx/net/sourceforge/nanoxml/XMLParseException.java 2014-05-15 16:57:20.000000000 -0400 +@@ -32,7 +32,8 @@ + * An XMLParseException is thrown when an error occures while parsing an XML + * string. + *

+- * $Revision: 1.1 $
++ * $Revision: 1.1 $

++ *

+ * $Date: 2002/08/03 04:05:32 $

+ * + * @see net.sourceforge.nanoxml.XMLElement +--- plugin/icedteanp/IcedTeaNPPlugin.cc 2014-04-02 06:20:59.687125000 -0400 ++++ plugin/icedteanp/IcedTeaNPPlugin.cc 2014-05-15 16:57:20.000000000 -0400 +@@ -64,16 +64,16 @@ + #define PLUGIN_FULL_NAME PLUGIN_NAME " (using " PLUGIN_VERSION ")" + #define PLUGIN_DESC "The " PLUGIN_NAME " executes Java applets." + +-#ifdef HAVE_JAVA7 +- #define JPI_VERSION "1.7.0_" JDK_UPDATE_VERSION +- #define PLUGIN_APPLET_MIME_DESC7 \ +- "application/x-java-applet;version=1.7:class,jar:IcedTea;" +- #define PLUGIN_BEAN_MIME_DESC7 \ +- "application/x-java-bean;version=1.7:class,jar:IcedTea;" ++#ifdef HAVE_JAVA8 ++ #define JPI_VERSION "1.8.0_" JDK_UPDATE_VERSION ++ #define PLUGIN_APPLET_MIME_DESC \ ++ "application/x-java-applet;version=1.8:class,jar:IcedTea;" ++ #define PLUGIN_BEAN_MIME_DESC \ ++ "application/x-java-bean;version=1.8:class,jar:IcedTea;" + #else +- #define JPI_VERSION "1.6.0_" JDK_UPDATE_VERSION +- #define PLUGIN_APPLET_MIME_DESC7 +- #define PLUGIN_BEAN_MIME_DESC7 ++ #define JPI_VERSION "1.7.0_" JDK_UPDATE_VERSION ++ #define PLUGIN_APPLET_MIME_DESC ++ #define PLUGIN_BEAN_MIME_DESC + #endif + + #define PLUGIN_MIME_DESC \ +@@ -93,7 +93,8 @@ + "application/x-java-applet;version=1.4.2:class,jar:IcedTea;" \ + "application/x-java-applet;version=1.5:class,jar:IcedTea;" \ + "application/x-java-applet;version=1.6:class,jar:IcedTea;" \ +- PLUGIN_APPLET_MIME_DESC7 \ ++ "application/x-java-applet;version=1.7:class,jar:IcedTea;" \ ++ PLUGIN_APPLET_MIME_DESC \ + "application/x-java-applet;jpi-version=" JPI_VERSION ":class,jar:IcedTea;" \ + "application/x-java-bean:class,jar:IcedTea;" \ + "application/x-java-bean;version=1.1:class,jar:IcedTea;" \ +@@ -110,7 +111,8 @@ + "application/x-java-bean;version=1.4.2:class,jar:IcedTea;" \ + "application/x-java-bean;version=1.5:class,jar:IcedTea;" \ + "application/x-java-bean;version=1.6:class,jar:IcedTea;" \ +- PLUGIN_BEAN_MIME_DESC7 \ ++ "application/x-java-bean;version=1.7:class,jar:IcedTea;" \ ++ PLUGIN_BEAN_MIME_DESC \ + "application/x-java-bean;jpi-version=" JPI_VERSION ":class,jar:IcedTea;" \ + "application/x-java-vm-npruntime::IcedTea;" + +--- tests/test-extensions/net/sourceforge/jnlp/tools/CodeSignerCreator.java 2014-04-02 06:20:59.637124000 -0400 ++++ tests/test-extensions/net/sourceforge/jnlp/tools/CodeSignerCreator.java 2014-05-15 16:57:20.000000000 -0400 +@@ -25,17 +25,24 @@ + + package net.sourceforge.jnlp.tools; + ++import java.lang.reflect.Constructor; ++import java.lang.reflect.InvocationTargetException; ++import java.lang.reflect.Method; + import java.security.CodeSigner; ++import java.security.InvalidKeyException; ++import java.security.NoSuchAlgorithmException; ++import java.security.NoSuchProviderException; + import java.security.PrivateKey; ++import java.security.SignatureException; + import java.security.Timestamp; + import java.security.cert.CertPath; ++import java.security.cert.CertificateException; + import java.security.cert.CertificateFactory; + import java.security.cert.X509Certificate; + import java.util.ArrayList; + import java.util.Date; + + import sun.security.x509.AlgorithmId; +-import sun.security.x509.CertAndKeyGen; + import sun.security.x509.CertificateAlgorithmId; + import sun.security.x509.CertificateIssuerName; + import sun.security.x509.CertificateSerialNumber; +@@ -72,13 +79,10 @@ + // KeyTool#doGenKeyPair + X500Name x500Name = new X500Name(dname); + +- CertAndKeyGen keypair = new CertAndKeyGen(keyAlgName, sigAlgName); ++ KeyPair keyPair = new KeyPair(keyAlgName, sigAlgName, keysize); ++ PrivateKey privKey = keyPair.getPrivateKey(); + +- keypair.generate(keysize); +- PrivateKey privKey = keypair.getPrivateKey(); +- +- X509Certificate oldCert = keypair.getSelfCertificate(x500Name, +- notBefore, validity * 24L * 60L * 60L); ++ X509Certificate oldCert = keyPair.getSelfCertificate(x500Name, notBefore, validity); + + // KeyTool#doSelfCert + byte[] encoded = oldCert.getEncoded(); +@@ -142,4 +146,70 @@ + Timestamp certTimestamp = new Timestamp(jarEntryCert.getNotBefore(), certPath); + return new CodeSigner(certPath, certTimestamp); + } ++ ++ /** ++ * A wrapper over JDK-internal CertAndKeyGen Class. ++ *

++ * This is an internal class whose package changed between OpenJDK 7 and 8. ++ * Use reflection to access the right thing. ++ */ ++ public static class KeyPair { ++ ++ private /* CertAndKeyGen */ Object keyPair; ++ ++ public KeyPair(String keyAlgName, String sigAlgName, int keySize) throws NoSuchAlgorithmException, InvalidKeyException { ++ try { ++ // keyPair = new CertAndKeyGen(keyAlgName, sigAlgName); ++ Class certAndKeyGenClass = Class.forName(getCertAndKeyGenClass()); ++ Constructor constructor = certAndKeyGenClass.getDeclaredConstructor(String.class, String.class); ++ keyPair = constructor.newInstance(keyAlgName, sigAlgName); ++ ++ // keyPair.generate(keySize); ++ Method generate = certAndKeyGenClass.getMethod("generate", int.class); ++ generate.invoke(keyPair, keySize); ++ } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | ++ IllegalAccessException | IllegalArgumentException | InvocationTargetException certAndKeyGenClassError) { ++ throw new AssertionError("Unable to use CertAndKeyGen class", certAndKeyGenClassError); ++ } ++ } ++ ++ public PrivateKey getPrivateKey() { ++ try { ++ // return keyPair.getPrivateKey(); ++ Class klass = keyPair.getClass(); ++ Method method = klass.getMethod("getPrivateKey"); ++ return (PrivateKey) method.invoke(keyPair); ++ } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException error) { ++ throw new AssertionError(error); ++ } ++ } ++ ++ public X509Certificate getSelfCertificate(X500Name name, Date notBefore, long validityInDays) ++ throws InvalidKeyException, CertificateException, SignatureException, ++ NoSuchAlgorithmException, NoSuchProviderException { ++ try { ++ // return keyPair.getSelfCertificate(name, notBefore, validityInDays * 24L * 60L * 60L); ++ Class klass = keyPair.getClass(); ++ Method method = klass.getMethod("getSelfCertificate", X500Name.class, Date.class, long.class); ++ return (X509Certificate) method.invoke(keyPair, name, notBefore, validityInDays * 24L * 60L * 60L); ++ } catch (InvocationTargetException ite) { ++ throw new RuntimeException(ite.getCause()); ++ } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException error) { ++ throw new AssertionError(error); ++ } ++ } ++ ++ private String getCertAndKeyGenClass() { ++ String javaVersion = System.getProperty("java.version"); ++ String className = null; ++ if (javaVersion.startsWith("1.7")) { ++ className = "sun.security.x509.CertAndKeyGen"; ++ } else if (javaVersion.startsWith("1.8")) { ++ className = "sun.security.tools.keytool.CertAndKeyGen"; ++ } else { ++ throw new AssertionError("Unrecognized Java Version"); ++ } ++ return className; ++ } ++ } + } Property changes on: head/java/icedtea-web/files/extrapatch-jdk8 ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property