Skip to content

Commit f3248d9

Browse files
authored
Merge pull request #995 from jglick/settersOnClosures
[JENKINS-75353] Ignore `Closure` metaproperties
2 parents 7c3a975 + 51ea1d3 commit f3248d9

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/LoggingInvoker.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,14 @@ private void maybeRecord(Class<?> clazz, Supplier<String> message) {
134134
return delegate.getProperty(lhs, name);
135135
}
136136

137+
private static final Set<String> CLOSURE_METAPROPS = Set.of("delegate", "directive", "resolveStrategy");
138+
137139
@Override public void setProperty(Object lhs, String name, Object value) throws Throwable {
138140
Class<?> clazz = classOf(lhs);
139141
maybeRecord(clazz, () -> clazz.getName() + "." + name);
140142
delegate.setProperty(lhs, name, value);
141143
if (SystemProperties.getBoolean(LoggingInvoker.class.getName() + ".fieldSetWarning", true)) {
142-
if (value != null) {
144+
if (value != null && !CLOSURE_METAPROPS.contains(name)) {
143145
var owner = findOwner(lhs);
144146
if (owner instanceof CpsScript) {
145147
try {

plugin/src/test/java/org/jenkinsci/plugins/workflow/cps/LoggingInvokerTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,10 @@ private void assertInternalCalls(String script, boolean sandbox, String... calls
7676
assertThat(exec.getInternalCalls(), containsInAnyOrder(calls));
7777
}
7878

79+
@Test public void settersOnClosures() throws Exception {
80+
var p = r.createProject(WorkflowJob.class);
81+
p.setDefinition(new CpsFlowDefinition("def c1 = {}; def c2 = {echo 'OK ran'}; c1.delegate = c2; c1.resolveStrategy = Closure.DELEGATE_FIRST; c1()", true));
82+
r.assertLogNotContains("`def`", r.buildAndAssertSuccess(p));
83+
}
84+
7985
}

0 commit comments

Comments
 (0)