Skip to content

Commit

Permalink
[FIXED JENKINS-11514] NPE in Mask Passwords plugin prevents jobs usin…
Browse files Browse the repository at this point in the history
…g the plugin from loading
  • Loading branch information
rseguy committed Oct 27, 2011
1 parent c8364cb commit d2aa32d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 8 deletions.
Expand Up @@ -72,6 +72,10 @@ public class MaskPasswordsConfig {
/**
* Users can define name/password pairs at the global level to share common
* passwords with several jobs.
*
* <p>Never ever use this attribute directly: Use {@link #getGlobalVarPasswordPairsList} to avoid
* potential NPEs.</p>
*
* @since 2.7
*/
private List<VarPasswordPair> globalVarPasswordPairs;
Expand All @@ -82,8 +86,6 @@ public MaskPasswordsConfig() {
// default values for the first time the config is created
addMaskedPasswordParameterDefinition(hudson.model.PasswordParameterDefinition.class.getName());
addMaskedPasswordParameterDefinition(com.michelin.cio.hudson.plugins.passwordparam.PasswordParameterDefinition.class.getName());

globalVarPasswordPairs = new ArrayList<VarPasswordPair>(); // order matters for display purposes
}

/**
Expand All @@ -99,7 +101,7 @@ public void addGlobalVarPasswordPair(VarPasswordPair varPasswordPair) {
if(StringUtils.isBlank(varPasswordPair.getVar()) || StringUtils.isBlank(varPasswordPair.getPassword())) {
return;
}
globalVarPasswordPairs.add(varPasswordPair);
getGlobalVarPasswordPairsList().add(varPasswordPair);
}

/**
Expand All @@ -113,7 +115,7 @@ public void addMaskedPasswordParameterDefinition(String className) {

public void clear() {
maskPasswordsParamDefClasses.clear();
globalVarPasswordPairs.clear();
getGlobalVarPasswordPairsList().clear();
}

public static MaskPasswordsConfig getInstance() {
Expand All @@ -137,16 +139,30 @@ private static XmlFile getConfigFile() {
* @since 2.7
*/
public List<VarPasswordPair> getGlobalVarPasswordPairs() {
List<VarPasswordPair> r = new ArrayList<VarPasswordPair>(globalVarPasswordPairs.size());
List<VarPasswordPair> r = new ArrayList<VarPasswordPair>(getGlobalVarPasswordPairsList().size());

// deep copy
for(VarPasswordPair varPasswordPair: globalVarPasswordPairs) {
for(VarPasswordPair varPasswordPair: getGlobalVarPasswordPairsList()) {
r.add((VarPasswordPair) varPasswordPair.clone());
}

return r;
}

/**
* Fixes JENKINS-11514: When {@code MaskPasswordsConfig.xml} is there but was created from
* version 2.6.1 (or older) of the plugin, {@link #globalVarPasswordPairs} can actually be
* {@code null} ==> Always use this getter to avoid NPEs.
*
* @since 2.7.1
*/
private List<VarPasswordPair> getGlobalVarPasswordPairsList() {
if(globalVarPasswordPairs == null) {
globalVarPasswordPairs = new ArrayList<VarPasswordPair>();
}
return globalVarPasswordPairs;
}

/**
* Returns a map of all {@link ParameterDefinition}s that can be used in
* jobs.
Expand Down
Expand Up @@ -20,5 +20,5 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

GlobalVarPasswordPairs=Mask Passwords &mdash; Global name/password pairs
ParameterDefinitions=Mask Passwords &mdash; Parameters to automatically mask
GlobalVarPasswordPairs=Mask Passwords - Global name/password pairs
ParameterDefinitions=Mask Passwords - Parameters to automatically mask

0 comments on commit d2aa32d

Please sign in to comment.