From 93f7ec53a6dab62ca659e2a815587f232716ecd6 Mon Sep 17 00:00:00 2001 From: jbachorik Date: Tue, 12 Mar 2013 09:34:26 +0100 Subject: [PATCH] 8009038: Improve JMX notification support Summary: Disallowing access to mutable shared arrays Reviewed-by: dfuchs, mchung, skoivu --- .../management/StandardEmitterMBean.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/share/classes/javax/management/StandardEmitterMBean.java b/src/share/classes/javax/management/StandardEmitterMBean.java index 5b22c34dd..dcebb48d8 100644 --- a/src/share/classes/javax/management/StandardEmitterMBean.java +++ b/src/share/classes/javax/management/StandardEmitterMBean.java @@ -64,6 +64,9 @@ package javax.management; public class StandardEmitterMBean extends StandardMBean implements NotificationEmitter { + private static final MBeanNotificationInfo[] NO_NOTIFICATION_INFO = + new MBeanNotificationInfo[0]; + private final NotificationEmitter emitter; private final MBeanNotificationInfo[] notificationInfo; @@ -99,11 +102,7 @@ public class StandardEmitterMBean extends StandardMBean */ public StandardEmitterMBean(T implementation, Class mbeanInterface, NotificationEmitter emitter) { - super(implementation, mbeanInterface, false); - if (emitter == null) - throw new IllegalArgumentException("Null emitter"); - this.emitter = emitter; - this.notificationInfo = emitter.getNotificationInfo(); + this(implementation, mbeanInterface, false, emitter); } /** @@ -148,7 +147,12 @@ public class StandardEmitterMBean extends StandardMBean if (emitter == null) throw new IllegalArgumentException("Null emitter"); this.emitter = emitter; - this.notificationInfo = emitter.getNotificationInfo(); + MBeanNotificationInfo[] infos = emitter.getNotificationInfo(); + if (infos == null || infos.length == 0) { + this.notificationInfo = NO_NOTIFICATION_INFO; + } else { + this.notificationInfo = infos.clone(); + } } /** @@ -184,11 +188,7 @@ public class StandardEmitterMBean extends StandardMBean */ protected StandardEmitterMBean(Class mbeanInterface, NotificationEmitter emitter) { - super(mbeanInterface, false); - if (emitter == null) - throw new IllegalArgumentException("Null emitter"); - this.emitter = emitter; - this.notificationInfo = emitter.getNotificationInfo(); + this(mbeanInterface, false, emitter); } /** @@ -231,7 +231,12 @@ public class StandardEmitterMBean extends StandardMBean if (emitter == null) throw new IllegalArgumentException("Null emitter"); this.emitter = emitter; - this.notificationInfo = emitter.getNotificationInfo(); + MBeanNotificationInfo[] infos = emitter.getNotificationInfo(); + if (infos == null || infos.length == 0) { + this.notificationInfo = NO_NOTIFICATION_INFO; + } else { + this.notificationInfo = infos.clone(); + } } public void removeNotificationListener(NotificationListener listener) @@ -253,7 +258,11 @@ public class StandardEmitterMBean extends StandardMBean } public MBeanNotificationInfo[] getNotificationInfo() { - return notificationInfo; + if (notificationInfo.length == 0) { + return notificationInfo; + } else { + return notificationInfo.clone(); + } } /** -- GitLab