25
25
26
26
package org .graalvm .visualvm .jmx ;
27
27
28
+ import java .util .Arrays ;
28
29
import org .graalvm .visualvm .application .Application ;
29
30
import org .graalvm .visualvm .core .datasource .Storage ;
30
31
import org .graalvm .visualvm .core .datasupport .Utils ;
@@ -110,7 +111,7 @@ public Custom(String username, char[] password, boolean persistent) {
110
111
111
112
112
113
public Map <String , ?> getEnvironment (Application application , Storage storage ) {
113
- return createMap (user , pword );
114
+ return createMap (user , pword == null ? null : Arrays . copyOf ( pword , pword . length ) );
114
115
}
115
116
116
117
public String getEnvironmentId (Storage storage ) {
@@ -145,7 +146,8 @@ public static class Persistent extends CredentialsProvider {
145
146
146
147
public Map <String , ?> getEnvironment (Application application , Storage storage ) {
147
148
String user = storage .getCustomProperty (PROPERTY_USER );
148
- char [] pword = storage .getCustomProperty (PROPERTY_PWORD ).toCharArray ();
149
+ char [] pword = storage .getCustomProperty (PROPERTY_PWORD ) == null ?
150
+ null : storage .getCustomProperty (PROPERTY_PWORD ).toCharArray ();
149
151
return createMap (user , pword );
150
152
}
151
153
@@ -162,8 +164,8 @@ String getUsername(Storage storage) { return storage.getCustomProperty(
162
164
PROPERTY_USER ); }
163
165
164
166
boolean hasPassword (Storage storage ) {
165
- String pword = storage .getCustomProperty (PROPERTY_PWORD );
166
- return pword != null && pword .length () > 0 ;
167
+ if ( storage .getCustomProperty (PROPERTY_PWORD ) == null ) return false ;
168
+ return storage . getCustomProperty ( PROPERTY_PWORD ) .length () > 0 ;
167
169
}
168
170
169
171
boolean isPersistent (Storage storage ) {
@@ -175,19 +177,25 @@ boolean isPersistent(Storage storage) {
175
177
176
178
// --- Private implementation ----------------------------------------------
177
179
180
+ // NOTE: clears the pword parameter!
178
181
private static Map <String , ?> createMap (String username , char [] pword ) {
179
182
Map map = new HashMap ();
180
183
181
- if (username != null && !username .isEmpty ())
182
- map .put (JMXConnector .CREDENTIALS , new String [] { username , new String (decodePassword (pword )) });
184
+ if (username != null && !username .isEmpty ()) {
185
+ map .put (JMXConnector .CREDENTIALS , new String [] { username , pword == null ? null : new String (decodePassword (pword )) });
186
+ } else {
187
+ if (pword != null ) Arrays .fill (pword , (char )0 );
188
+ }
183
189
184
190
return map ;
185
191
}
186
192
193
+ // NOTE: clears the pword parameter!
187
194
private static char [] encodePassword (char [] pword ) {
188
195
return pword == null ? null : Utils .encodePassword (pword );
189
196
}
190
197
198
+ // NOTE: clears the pword parameter!
191
199
private static char [] decodePassword (char [] pword ) {
192
200
return pword == null ? null : Utils .decodePassword (pword );
193
201
}
0 commit comments