Skip to content

Commit

Permalink
6521141: DebugGraphics NPE @ setFont();
Browse files Browse the repository at this point in the history
Reviewed-by: prr
  • Loading branch information
Tejesh R authored and prsadhuk committed Aug 16, 2022
1 parent 6e6ae59 commit 21f4eb2
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
23 changes: 23 additions & 0 deletions src/java.desktop/share/classes/javax/swing/DebugGraphics.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@

import java.awt.*;
import java.awt.image.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.text.AttributedCharacterIterator;

/**
Expand Down Expand Up @@ -72,11 +74,32 @@ public class DebugGraphics extends Graphics {
/**
* Constructs a new debug graphics context that supports slowed
* down drawing.
* <p>
* NOTE: This constructor should not be called by
* applications, it is for internal use only. When called directly
* it will create an un-usable instance.
*/
@SuppressWarnings("removal")
public DebugGraphics() {
super();
buffer = null;
xOffset = yOffset = 0;

// Creates a Graphics context when the constructor is called.
if (this.graphics == null) {
StackWalker walker = AccessController.doPrivileged(new PrivilegedAction<StackWalker>() {
@Override
public StackWalker run() {
StackWalker stackwalker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
return stackwalker;
}
});

if (walker.getCallerClass() != this.getClass()) {
BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
this.graphics = bi.createGraphics();
}
}
}

/**
Expand Down
41 changes: 41 additions & 0 deletions test/jdk/javax/swing/DebugGraphics/DebugGraphicsNPETest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2022, 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 java.awt.Font;
import javax.swing.DebugGraphics;

/* @test
* @bug 6521141
* @summary Test to check if NPE does not occur when graphics is not
* initialized and DebugGraphics instance is created with default
* Constructor and used.
* @run main DebugGraphicsNPETest
*/
public class DebugGraphicsNPETest {
public static void main(String[] args) throws Exception {
DebugGraphics dg = new DebugGraphics();
Font font = new Font(Font.SERIF, Font.PLAIN, 10);
dg.setFont(font);
System.out.println("Test Pass!");
}
}

1 comment on commit 21f4eb2

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.