--- 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) # --- 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; + } + } }