8020039: SynthTableHeaderUI refers to possibly null parameter in cell renderer
Reviewed-by: rchamyal, serb
Contributed-by: ajit.ghaisas@oracle.com
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java Wed Feb 24 08:58:31 2016 -0800
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java Thu Feb 25 10:22:22 2016 +0530
@@ -128,14 +128,17 @@
// Modify the table "border" to draw smaller, and with the titles in the right position
// and sort indicators, just like an NSSave/Open panel.
final AquaTableHeaderBorder cellBorder = AquaTableHeaderBorder.getListHeaderBorder();
- final boolean thisColumnSelected = localTable.getColumnModel().getColumn(column).getModelIndex() == sortColumn;
+ cellBorder.setSortOrder(AquaTableHeaderBorder.SORT_NONE);
+
+ if (localTable != null) {
+ final boolean thisColumnSelected = localTable.getColumnModel().getColumn(column).getModelIndex() == sortColumn;
- cellBorder.setSelected(thisColumnSelected);
- if (thisColumnSelected) {
- cellBorder.setSortOrder(sortOrder);
- } else {
- cellBorder.setSortOrder(AquaTableHeaderBorder.SORT_NONE);
+ cellBorder.setSelected(thisColumnSelected);
+ if (thisColumnSelected) {
+ cellBorder.setSortOrder(sortOrder);
+ }
}
+
setBorder(cellBorder);
return this;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java Wed Feb 24 08:58:31 2016 -0800
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java Thu Feb 25 10:22:22 2016 +0530
@@ -230,9 +230,10 @@
boolean hasRollover = (column == getRolloverColumn());
if (isSelected || hasRollover || hasFocus) {
+ boolean enabled = (table == null)? true : table.isEnabled();
SynthLookAndFeel.setSelectedUI((SynthLabelUI)SynthLookAndFeel.
getUIOfType(getUI(), SynthLabelUI.class),
- isSelected, hasFocus, table.isEnabled(),
+ isSelected, hasFocus, enabled,
hasRollover);
} else {
SynthLookAndFeel.resetSelectedUI();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTableHeader/8020039/TableHeaderRendererExceptionTest.java Thu Feb 25 10:22:22 2016 +0530
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.swing.UIManager;
+import javax.swing.table.JTableHeader;
+
+/**
+ * @test
+ * @summary Tests whether getTableCellRendererComponent() method handles
+ * null table parameter
+ * @bug 8020039
+ * @run main TableHeaderRendererExceptionTest
+ */
+public class TableHeaderRendererExceptionTest {
+
+ public static void main(String[] args) throws Throwable {
+ //Execute test for all supported look and feels
+ UIManager.LookAndFeelInfo[] lookAndFeelArray
+ = UIManager.getInstalledLookAndFeels();
+
+ for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) {
+ String lookAndFeelString = lookAndFeelItem.getClassName();
+
+ UIManager.setLookAndFeel(lookAndFeelString);
+
+ // Test getTableCellRendererComponent method by passing null table
+ JTableHeader header = new JTableHeader();
+
+ header.getDefaultRenderer().getTableCellRendererComponent(null,
+ " test ", true, true, -1, 0);
+ }
+ }
+}