8176055: JMX diagnostic improvements
authorhb
Fri, 12 May 2017 18:21:13 +0530
changeset 45991 c308fa07c6f2
parent 45990 ba8bfbb9d633
child 45992 38bdf44057b9
8176055: JMX diagnostic improvements Reviewed-by: dfuchs, mchung, ahgross, rhalade, jwilhelm
jdk/src/jdk.management/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java
jdk/src/jdk.management/share/classes/com/sun/management/internal/HotSpotDiagnostic.java
--- a/jdk/src/jdk.management/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java	Thu May 11 17:21:16 2017 +0000
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java	Fri May 12 18:21:13 2017 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -61,9 +61,10 @@
      * @param  outputFile the system-dependent filename
      * @param  live if {@code true} dump only <i>live</i> objects
      *         i.e. objects that are reachable from others
-     * @throws IOException if the {@code outputFile}
+     * @throws IOException if the {@code outputFile} already exists,
      *                     cannot be created, opened, or written to.
      * @throws UnsupportedOperationException if this operation is not supported.
+     * @throws IllegalArgumentException if {@code outputFile} does not end with ".hprof" suffix.
      * @throws NullPointerException if {@code outputFile} is {@code null}.
      * @throws SecurityException
      *         If a security manager exists and its {@link
--- a/jdk/src/jdk.management/share/classes/com/sun/management/internal/HotSpotDiagnostic.java	Thu May 11 17:21:16 2017 +0000
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/internal/HotSpotDiagnostic.java	Fri May 12 18:21:13 2017 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2017, 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
@@ -22,7 +22,6 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
-
 package com.sun.management.internal;
 
 import java.io.IOException;
@@ -32,6 +31,8 @@
 
 import com.sun.management.HotSpotDiagnosticMXBean;
 import com.sun.management.VMOption;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import sun.management.Util;
 
 /**
@@ -43,6 +44,14 @@
 
     @Override
     public void dumpHeap(String outputFile, boolean live) throws IOException {
+
+        String propertyName = "jdk.management.heapdump.allowAnyFileSuffix";
+        PrivilegedAction<Boolean> pa = () -> Boolean.parseBoolean(System.getProperty(propertyName, "false"));
+        boolean allowAnyFileSuffix = AccessController.doPrivileged(pa);
+        if (!allowAnyFileSuffix && !outputFile.endsWith(".hprof")) {
+            throw new IllegalArgumentException("heapdump file must have .hprof extention");
+        }
+
         SecurityManager security = System.getSecurityManager();
         if (security != null) {
             security.checkWrite(outputFile);