From 7c908a0a2d9b16b68a0a6f010f183cc8c34b145e Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 15 Dec 2022 08:08:41 -0500 Subject: [PATCH] Replacing `Arrays.asList` with `List.of` can introduce `NullPointerException` --- .../workflow/cps/actions/ArgumentsActionImpl.java | 2 +- .../workflow/cps/persistence/IteratorHack.java | 2 +- .../workflow/cps/persistence/IteratorHackTest.java | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/actions/ArgumentsActionImpl.java b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/actions/ArgumentsActionImpl.java index 0d9d58be9..429a012ca 100644 --- a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/actions/ArgumentsActionImpl.java +++ b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/actions/ArgumentsActionImpl.java @@ -175,7 +175,7 @@ Object sanitizeArrayAndRecordMutation(@NonNull Object[] objects, @CheckForNull E this.isUnmodifiedBySanitization = false; return NotStoredReason.OVERSIZE_VALUE; } - List inputList = List.of(objects); + List inputList = Arrays.asList(objects); Object sanitized = sanitizeListAndRecordMutation(inputList, variables); if (sanitized == inputList) { // Works because if not mutated, we return original input instance return objects; diff --git a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHack.java b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHack.java index b541c5e12..5b07c8bd5 100644 --- a/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHack.java +++ b/plugin/src/main/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHack.java @@ -102,7 +102,7 @@ public static Iterator iterator(Set set) { public static Iterator iterator(E[] array) { // TODO as above - return new Itr<>(List.of(array)); + return new Itr<>(Arrays.asList(array)); } public static Iterator iterator(Deque deque) { diff --git a/plugin/src/test/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHackTest.java b/plugin/src/test/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHackTest.java index e98406dcc..efc131425 100644 --- a/plugin/src/test/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHackTest.java +++ b/plugin/src/test/java/org/jenkinsci/plugins/workflow/cps/persistence/IteratorHackTest.java @@ -256,4 +256,18 @@ public class IteratorHackTest { r.assertBuildStatusSuccess(r.waitForCompletion(b)); }); } + + @Issue("https://github.com/jenkinsci/workflow-cps-plugin/pull/627#issuecomment-1352869571") + @Test public void arrayIterator() throws Exception { + rr.then(r -> { + WorkflowJob p = r.createProject(WorkflowJob.class); + p.setDefinition(new CpsFlowDefinition( + "Object[] arr = [1, null, 2]\n" + + "for (def elt : arr) {\n" + + " echo(/iterating on $elt/)\n" + + "}\n", false)); + rr.j.assertLogContains("iterating on null", rr.j.buildAndAssertSuccess(p)); + }); + } + }