Skip to content

Commit 53028c4

Browse files
authored
Merge pull request #88 from jenkinsci/npe
Prevent NPE when createValue returns null
2 parents cecd350 + 4a61a92 commit 53028c4

3 files changed

Lines changed: 56 additions & 12 deletions

File tree

src/main/java/org/jenkinsci/plugins/parameterizedscheduler/ParameterParser.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package org.jenkinsci.plugins.parameterizedscheduler;
22

3+
import com.google.common.base.Splitter;
34
import hudson.model.ParametersDefinitionProperty;
5+
import org.apache.commons.lang.StringUtils;
46

57
import java.util.Collections;
68
import java.util.List;
79
import java.util.Map;
810
import java.util.stream.Collectors;
911

10-
import org.apache.commons.lang.StringUtils;
11-
import org.jenkinsci.plugins.parameterizedscheduler.Messages;
12-
13-
import com.google.common.base.Splitter;
14-
1512
public class ParameterParser {
1613
/**
1714
* if ever changed, documentation and messages will need to be updated as well

src/main/java/org/jenkinsci/plugins/parameterizedscheduler/ParameterizedTimerTrigger.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.jenkinsci.plugins.parameterizedscheduler;
22

3+
import antlr.ANTLRException;
34
import hudson.model.AbstractProject;
45
import hudson.model.Cause;
56
import hudson.model.CauseAction;
@@ -10,6 +11,8 @@
1011
import hudson.model.ParametersDefinitionProperty;
1112
import hudson.scheduler.Hash;
1213
import hudson.triggers.Trigger;
14+
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
15+
import org.kohsuke.stapler.DataBoundConstructor;
1316

1417
import java.util.ArrayList;
1518
import java.util.Calendar;
@@ -18,11 +21,6 @@
1821
import java.util.logging.Level;
1922
import java.util.logging.Logger;
2023

21-
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
22-
import org.kohsuke.stapler.DataBoundConstructor;
23-
24-
import antlr.ANTLRException;
25-
2624
/**
2725
* {@link Trigger} that runs a job periodically with support for parameters.
2826
*
@@ -64,9 +62,15 @@ private List<ParameterValue> configurePropertyValues(Map<String, String> paramet
6462
if (parameterValues.containsKey(paramDefinition.getName())) {
6563
ParameterizedStaplerRequest request = new ParameterizedStaplerRequest(
6664
parameterValues.get(paramDefinition.getName()));
67-
defValues.add(paramDefinition.createValue(request));
68-
} else if (defaultValue != null)
65+
ParameterValue value = paramDefinition.createValue(request);
66+
if (value!= null) {
67+
defValues.add(value);
68+
} else {
69+
LOGGER.warning("Cannot create value for " + paramDefinition.getName());
70+
}
71+
} else if (defaultValue != null) {
6972
defValues.add(defaultValue);
73+
}
7074
}
7175

7276
return defValues;

src/test/java/org/jenkinsci/plugins/parameterizedscheduler/ParameterizedSchedulerTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,24 @@
22

33
import hudson.model.FreeStyleProject;
44
import hudson.model.Job;
5+
import hudson.model.ParameterDefinition;
6+
import hudson.model.ParameterValue;
57
import hudson.model.ParametersAction;
68
import hudson.model.ParametersDefinitionProperty;
79
import hudson.model.StringParameterDefinition;
810
import hudson.triggers.Trigger;
11+
import net.sf.json.JSONObject;
912
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
1013
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
1114
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
1215
import org.junit.Rule;
1316
import org.junit.Test;
17+
import org.jvnet.hudson.test.Issue;
1418
import org.jvnet.hudson.test.JenkinsRule;
19+
import org.kohsuke.stapler.StaplerRequest;
20+
21+
import javax.annotation.CheckForNull;
22+
import javax.annotation.Nonnull;
1523

1624
import static org.hamcrest.MatcherAssert.assertThat;
1725
import static org.hamcrest.Matchers.is;
@@ -97,4 +105,39 @@ public void declarative() throws Exception {
97105
assertThat(p.getLastCompletedBuild(), is(not(wfr)));
98106
assertThat((String) p.getLastCompletedBuild().getAction(ParametersAction.class).getParameter("foo").getValue(), is("bar"));
99107
}
108+
109+
@Test
110+
@Issue("JENKINS-49372")
111+
public void nullValueCreated() throws Exception {
112+
FreeStyleProject p = r.createFreeStyleProject();
113+
p.addProperty(new ParametersDefinitionProperty(new NullParameterDefinition("foo")));
114+
assertThat(p.getLastCompletedBuild(), is(nullValue()));
115+
Trigger<Job> t = new ParameterizedTimerTrigger("* * * * *%foo=test");
116+
t.start(p, true);
117+
p.addTrigger(t);
118+
new Cron().doRun();
119+
assertThat(p.isInQueue(), is(true));
120+
r.waitUntilNoActivity();
121+
// Build should complete successfully but will not have any value
122+
assertThat(p.getLastCompletedBuild(), is(notNullValue()));
123+
}
124+
125+
private static class NullParameterDefinition extends ParameterDefinition {
126+
127+
public NullParameterDefinition(@Nonnull String name) {
128+
super(name, null);
129+
}
130+
131+
@CheckForNull
132+
@Override
133+
public ParameterValue createValue(StaplerRequest staplerRequest, JSONObject jsonObject) {
134+
return null;
135+
}
136+
137+
@CheckForNull
138+
@Override
139+
public ParameterValue createValue(StaplerRequest staplerRequest) {
140+
return null;
141+
}
142+
}
100143
}

0 commit comments

Comments
 (0)