8020039: SynthTableHeaderUI refers to possibly null parameter in cell renderer
Reviewed-by: rchamyal, serb
diff --git a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java
index 2dec5c8..35b87aa 100644
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTableHeaderUI.java
@@ -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);
- cellBorder.setSelected(thisColumnSelected);
- if (thisColumnSelected) {
- cellBorder.setSortOrder(sortOrder);
- } else {
- 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);
+ }
}
+
setBorder(cellBorder);
return this;
}
diff --git a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java
index 904172f..16272ff 100644
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java
@@ -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();
diff --git a/jdk/test/javax/swing/JTableHeader/8020039/TableHeaderRendererExceptionTest.java b/jdk/test/javax/swing/JTableHeader/8020039/TableHeaderRendererExceptionTest.java
new file mode 100644
index 0000000..54ac5fd
--- /dev/null
+++ b/jdk/test/javax/swing/JTableHeader/8020039/TableHeaderRendererExceptionTest.java
@@ -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);
+ }
+ }
+}